Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Tradfri: Lampen und Rollos mit HomeMatic Wandtaster steuern

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    1.6k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    671

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    1.2k

Tradfri: Lampen und Rollos mit HomeMatic Wandtaster steuern

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
19 Beiträge 5 Kommentatoren 1.5k Aufrufe 3 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #10

    @codierknecht sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

    @homoran sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

    auf Aktualisierung, nicht auf Änderung!
    wie immer das mit js geht

    on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT", change: "ne"}, async function (obj) {
    }
    

    sischer datt?
    ist ne nicht not equal, also Änderung?

    kein Support per PN! - Fragen im Forum stellen -
    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Das Forum freut sich über eine Spende. Benutzt dazu den Spendenbutton oben rechts. Danke!
    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    D CodierknechtC 2 Antworten Letzte Antwort
    0
    • HomoranH Homoran

      @codierknecht sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

      @homoran sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

      auf Aktualisierung, nicht auf Änderung!
      wie immer das mit js geht

      on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT", change: "ne"}, async function (obj) {
      }
      

      sischer datt?
      ist ne nicht not equal, also Änderung?

      D Offline
      D Offline
      dtp
      schrieb am zuletzt editiert von dtp
      #11

      @homoran Korrekt "ne" ist not equal. Damit geht's nicht. Aber so hat's funktioniert, nachdem ich das Skript von @paul53 für PRESS_SHORT beider Kanäle ausgeführt habe.

      on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT"}, async function (obj) {
        setState('tradfri.0.L-65547.lightbulb.brightness', 40);
      });
      
      on({id: "hm-rpc.1.00019F299738F8.2.PRESS_SHORT"}, async function (obj) {
        setState('tradfri.0.L-65547.lightbulb.brightness', 0);
      });
      

      Danke euch. Da muss man erst mal drauf kommen.

      Nun kann ich mir noch Gedanken über eine Umsetzung für die Dimmfunktion mit PRESS_LONG_START und PRESS_LONG_RELEASE machen.

      ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

      1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @codierknecht sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

        @homoran sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

        auf Aktualisierung, nicht auf Änderung!
        wie immer das mit js geht

        on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT", change: "ne"}, async function (obj) {
        }
        

        sischer datt?
        ist ne nicht not equal, also Änderung?

        CodierknechtC Online
        CodierknechtC Online
        Codierknecht
        Developer Most Active
        schrieb am zuletzt editiert von Codierknecht
        #12

        @homoran sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

        ist ne nicht not equal, also Änderung?

        Natürlich - Du hast natürlich Recht.
        Muss mal endlich die Tomaten von den Augen kratzen 👓 👓 🍅 🍅

        Das hier wäre "Änderung":

        on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT", change: "any"}, async function (obj) {
        }
        

        Wobei man in diesem Fall das change auch komplett weglassen kann. Also so wie @dtp es schon herausgefunden hat.

        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler, "Refactoring")

        Proxmox 9.1.1 LXC|8 GB|Core i7-6700
        HmIP|ZigBee|Tasmota|Unifi
        Zabbix Certified Specialist
        Konnte ich Dir helfen? Dann benutze bitte das Voting unten rechts im Beitrag

        D 1 Antwort Letzte Antwort
        0
        • CodierknechtC Codierknecht

          @homoran sagte in hm-rpc, keine Statusänderung bei HMIP-Tasterbetätigung:

          ist ne nicht not equal, also Änderung?

          Natürlich - Du hast natürlich Recht.
          Muss mal endlich die Tomaten von den Augen kratzen 👓 👓 🍅 🍅

          Das hier wäre "Änderung":

          on({id: "hm-rpc.1.00019F299738F8.1.PRESS_SHORT", change: "any"}, async function (obj) {
          }
          

          Wobei man in diesem Fall das change auch komplett weglassen kann. Also so wie @dtp es schon herausgefunden hat.

          D Offline
          D Offline
          dtp
          schrieb am zuletzt editiert von dtp
          #13

          So, hier dann mal mein Skript zum Ein- und Ausschalten sowie Hoch- und Runterdimmen einer Tradfri-Leuchte mit einem HomeMatic-Taster.

          var triggerID = "hm-rpc.1.00019F299738F8"; // ID des auslösenden Tasters
          var channelUp = 1; // Kanal des auslösenden Tasters zum Hochschalten
          var channelDown = 2; // Kanal des auslösenden Tasters zum Runterschalten
          var loadID = "tradfri.0.L-65547.lightbulb.brightness"; // Datenpunkt des zu steuernden Verbrauchers
          
          var step = 5; // Schrittweite beim Dimmen in Prozent
          var speed = 0.5; // Dauer einen einzelnen Dimmschrittes in Sekunden
          var count = 0; // Zähler (sollte immer auf 0 initialisiert werden)
          var IntervalId;
          
          // kurze Tasterbetätigung zum Einschalten
          on({id: triggerID+"."+channelUp+".PRESS_SHORT"}, async function (obj) {
            setState(loadID, 100);
            count = 100 / step;
          });
          
          // kurze Tasterbetätigung zum Ausschalten
          on({id: triggerID+"."+channelDown+".PRESS_SHORT"}, async function (obj) {
            setState(loadID, 0);
            count = 0;
          });
          
          // lange Tasterbetätigung zum Hochdimmen
          on({id: triggerID+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
            IntervalId = setInterval(function(){
              count++;
              log((count * step).toString());
              setState(loadID, count * step);
              if(count * step > 99) clearInterval(IntervalId);
            }, speed * 1000);
          });
          on({id: triggerID+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
            clearInterval(IntervalId); 
          });
          
          // lange Tasterbetätigung zum Runterdimmen
          on({id: triggerID+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
            IntervalId = setInterval(function(){
              count--;
              log((count * step).toString());
              setState(loadID, count * step);
              if(count * step < 1) clearInterval(IntervalId);
            }, speed * 1000);
          });
          on({id: triggerID+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
            clearInterval(IntervalId); 
          });
          

          Das Skript funktioniert im Prinzip auch für Rollos, allerdings fehlt da noch eine Funktion, um das Rollo bei einem kurzen Tastendruck wieder an der gewünschten Position durch einen erneuten kurzen Tastendruck stoppen zu können. Zudem muss man den Wert für "speed" und "step" an die Fahrzeit des Rollos anpassen. Bei meinen Rollos von Ikea hat sich z.B. ein Wert von 0,3 Sekunden mit einer Schrittweite von 1 als ganz gut erwiesen.

          ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

          D 1 Antwort Letzte Antwort
          0
          • D dtp

            So, hier dann mal mein Skript zum Ein- und Ausschalten sowie Hoch- und Runterdimmen einer Tradfri-Leuchte mit einem HomeMatic-Taster.

            var triggerID = "hm-rpc.1.00019F299738F8"; // ID des auslösenden Tasters
            var channelUp = 1; // Kanal des auslösenden Tasters zum Hochschalten
            var channelDown = 2; // Kanal des auslösenden Tasters zum Runterschalten
            var loadID = "tradfri.0.L-65547.lightbulb.brightness"; // Datenpunkt des zu steuernden Verbrauchers
            
            var step = 5; // Schrittweite beim Dimmen in Prozent
            var speed = 0.5; // Dauer einen einzelnen Dimmschrittes in Sekunden
            var count = 0; // Zähler (sollte immer auf 0 initialisiert werden)
            var IntervalId;
            
            // kurze Tasterbetätigung zum Einschalten
            on({id: triggerID+"."+channelUp+".PRESS_SHORT"}, async function (obj) {
              setState(loadID, 100);
              count = 100 / step;
            });
            
            // kurze Tasterbetätigung zum Ausschalten
            on({id: triggerID+"."+channelDown+".PRESS_SHORT"}, async function (obj) {
              setState(loadID, 0);
              count = 0;
            });
            
            // lange Tasterbetätigung zum Hochdimmen
            on({id: triggerID+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
              IntervalId = setInterval(function(){
                count++;
                log((count * step).toString());
                setState(loadID, count * step);
                if(count * step > 99) clearInterval(IntervalId);
              }, speed * 1000);
            });
            on({id: triggerID+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
              clearInterval(IntervalId); 
            });
            
            // lange Tasterbetätigung zum Runterdimmen
            on({id: triggerID+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
              IntervalId = setInterval(function(){
                count--;
                log((count * step).toString());
                setState(loadID, count * step);
                if(count * step < 1) clearInterval(IntervalId);
              }, speed * 1000);
            });
            on({id: triggerID+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
              clearInterval(IntervalId); 
            });
            

            Das Skript funktioniert im Prinzip auch für Rollos, allerdings fehlt da noch eine Funktion, um das Rollo bei einem kurzen Tastendruck wieder an der gewünschten Position durch einen erneuten kurzen Tastendruck stoppen zu können. Zudem muss man den Wert für "speed" und "step" an die Fahrzeit des Rollos anpassen. Bei meinen Rollos von Ikea hat sich z.B. ein Wert von 0,3 Sekunden mit einer Schrittweite von 1 als ganz gut erwiesen.

            D Offline
            D Offline
            dtp
            schrieb am zuletzt editiert von dtp
            #14

            Und nun habe ich auch eine Lösung für die Rollos gefunden. Das folgende Skript steuert mit einem HMIP-Wandtaster zwei Rollos gleichzeitig.

            var triggerID = 'hm-rpc.1.000B5D8995CA16'; // ID des auslösenden Tasters
            var channelUp = 5; // Kanal des auslösenden Tasters zum Hochfahren
            var channelDown = 6; // Kanal des auslösenden Tasters zum Runterfahren
            var loadID1 = "tradfri.0.B-65540"; // ID eines ersten zu steuernden Rollos
            var loadID2 = "tradfri.0.B-65544"; // ID eines zweiten zu steuernden Rollos
            
            var step = 1; // Schrittweite für das Hoch- und Runterfahren in Prozent
            var speed = 0.3; // Dauer eines einzelnen Schritts in Sekunden
            var count = 0; // Zähler (sollte immer auf 0 initialisiert werden)
            var IntervalId;
            
            // kurze Tasterbetätigung zum Hochfahren und Stoppen im Wechsel
            on({id: triggerID+"."+channelUp+".PRESS_SHORT", change: "eq", val: true}, async function (obj) {
              setState(loadID1+".blind.position", 100); setState(loadID2+".blind.position", 100);
              count = 100 / step;
              setState(triggerID+"."+channelUp+".PRESS_SHORT", false);
            });
            on({id: triggerID+"."+channelUp+".PRESS_SHORT", change: "ne", val: true}, async function (obj) {
              setState(loadID1+".blind.stop", true); setState(loadID2+".blind.stop", true); 
              count = getState(loadID1+".blind.position").val / step;
            });
            
            // kurze Tasterbetätigung zum Runterfahren und Stoppen im Wechsel
            on({id: triggerID+"."+channelDown+".PRESS_SHORT", change: "eq", val: true}, async function (obj) {
              setState(loadID1+".blind.position", 0); setState(loadID2+".blind.position", 0);
              count = 0;
              setState(triggerID+"."+channelDown+".PRESS_SHORT", false);
            });
            on({id: triggerID+"."+channelDown+".PRESS_SHORT", change: "ne", val: true}, async function (obj) {
              setState(loadID1+".blind.stop", true); setState(loadID2+".blind.stop", true); 
              count = getState(loadID1+".blind.position").val / step;
            });
            
            // lange Tasterbetätigung zum Hochfahren
            on({id: triggerID+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
              IntervalId = setInterval(function(){
                count++;
                log((count * step).toString());
                setState(loadID1+".blind.position", count * step); 
                setState(loadID2+".blind.position", count * step);
                if(count * step > 99) clearInterval(IntervalId);
              }, speed * 1000);
            });
            on({id: triggerID+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
              clearInterval(IntervalId);
            });
            
            // lange Tasterbetätigung zum Runterfahren
            on({id: triggerID+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
              IntervalId = setInterval(function(){
                count--;
                log((count * step).toString());
                setState(loadID1+".blind.position", count * step); 
                setState(loadID2+".blind.position", count * step);
                if(count * step < 1) clearInterval(IntervalId);
              }, speed * 1000);
            });
            on({id: triggerID+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
              clearInterval(IntervalId); 
            });
            

            Dabei ist es folgendermaßen über die zwei Tasterkanäle des HMIP-Wandtasters gelöst:

            • Eine kurze Betätigung von Taste 1 fährt das Rollo hoch. Drückt man Taste 1 noch mal kurz, wird das Rollo gestoppt.
            • Eine kurze Betätigung von Taste 2 fährt das Rollo runter. Drückt man Taste 2 noch mal kurz, wird das Rollo gestoppt.
            • Eine lange Betätigung von Taste 1 fährt das Rollo so lange hoch bis man Taste 1 wieder loslässt.
            • Eine lange Betätigung von Taste 2 fährt das Rollo so lange runter bis man Taste 2 wieder loslässt.

            Zur richtigen Einstellung von "speed" misst man einfach die Dauer, die das Rollo für eine vollständige Fahrt benötigt und teilt die gemessene Zeit dann durch 100/"step". Beispiel: braucht das Rollo 30 Sekunden für eine vollständige Fahrt und hat man "step" = 1 gesetzt, so ergibt sich für "speed" ein Wert von 0.3. Ich empfehle, die Schrittweite

            ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

            D 1 Antwort Letzte Antwort
            0
            • D dtp

              Und nun habe ich auch eine Lösung für die Rollos gefunden. Das folgende Skript steuert mit einem HMIP-Wandtaster zwei Rollos gleichzeitig.

              var triggerID = 'hm-rpc.1.000B5D8995CA16'; // ID des auslösenden Tasters
              var channelUp = 5; // Kanal des auslösenden Tasters zum Hochfahren
              var channelDown = 6; // Kanal des auslösenden Tasters zum Runterfahren
              var loadID1 = "tradfri.0.B-65540"; // ID eines ersten zu steuernden Rollos
              var loadID2 = "tradfri.0.B-65544"; // ID eines zweiten zu steuernden Rollos
              
              var step = 1; // Schrittweite für das Hoch- und Runterfahren in Prozent
              var speed = 0.3; // Dauer eines einzelnen Schritts in Sekunden
              var count = 0; // Zähler (sollte immer auf 0 initialisiert werden)
              var IntervalId;
              
              // kurze Tasterbetätigung zum Hochfahren und Stoppen im Wechsel
              on({id: triggerID+"."+channelUp+".PRESS_SHORT", change: "eq", val: true}, async function (obj) {
                setState(loadID1+".blind.position", 100); setState(loadID2+".blind.position", 100);
                count = 100 / step;
                setState(triggerID+"."+channelUp+".PRESS_SHORT", false);
              });
              on({id: triggerID+"."+channelUp+".PRESS_SHORT", change: "ne", val: true}, async function (obj) {
                setState(loadID1+".blind.stop", true); setState(loadID2+".blind.stop", true); 
                count = getState(loadID1+".blind.position").val / step;
              });
              
              // kurze Tasterbetätigung zum Runterfahren und Stoppen im Wechsel
              on({id: triggerID+"."+channelDown+".PRESS_SHORT", change: "eq", val: true}, async function (obj) {
                setState(loadID1+".blind.position", 0); setState(loadID2+".blind.position", 0);
                count = 0;
                setState(triggerID+"."+channelDown+".PRESS_SHORT", false);
              });
              on({id: triggerID+"."+channelDown+".PRESS_SHORT", change: "ne", val: true}, async function (obj) {
                setState(loadID1+".blind.stop", true); setState(loadID2+".blind.stop", true); 
                count = getState(loadID1+".blind.position").val / step;
              });
              
              // lange Tasterbetätigung zum Hochfahren
              on({id: triggerID+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
                IntervalId = setInterval(function(){
                  count++;
                  log((count * step).toString());
                  setState(loadID1+".blind.position", count * step); 
                  setState(loadID2+".blind.position", count * step);
                  if(count * step > 99) clearInterval(IntervalId);
                }, speed * 1000);
              });
              on({id: triggerID+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
                clearInterval(IntervalId);
              });
              
              // lange Tasterbetätigung zum Runterfahren
              on({id: triggerID+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
                IntervalId = setInterval(function(){
                  count--;
                  log((count * step).toString());
                  setState(loadID1+".blind.position", count * step); 
                  setState(loadID2+".blind.position", count * step);
                  if(count * step < 1) clearInterval(IntervalId);
                }, speed * 1000);
              });
              on({id: triggerID+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
                clearInterval(IntervalId); 
              });
              

              Dabei ist es folgendermaßen über die zwei Tasterkanäle des HMIP-Wandtasters gelöst:

              • Eine kurze Betätigung von Taste 1 fährt das Rollo hoch. Drückt man Taste 1 noch mal kurz, wird das Rollo gestoppt.
              • Eine kurze Betätigung von Taste 2 fährt das Rollo runter. Drückt man Taste 2 noch mal kurz, wird das Rollo gestoppt.
              • Eine lange Betätigung von Taste 1 fährt das Rollo so lange hoch bis man Taste 1 wieder loslässt.
              • Eine lange Betätigung von Taste 2 fährt das Rollo so lange runter bis man Taste 2 wieder loslässt.

              Zur richtigen Einstellung von "speed" misst man einfach die Dauer, die das Rollo für eine vollständige Fahrt benötigt und teilt die gemessene Zeit dann durch 100/"step". Beispiel: braucht das Rollo 30 Sekunden für eine vollständige Fahrt und hat man "step" = 1 gesetzt, so ergibt sich für "speed" ein Wert von 0.3. Ich empfehle, die Schrittweite

              D Offline
              D Offline
              dtp
              schrieb am zuletzt editiert von
              #15

              Hallo,

              ich musste feststellen, dass die Zeile

              setState(triggerID+"."+channelUp+".PRESS_SHORT", false);
              

              zu einer Fehlermeldung führte:

              2023-01-20_19h40_04.jpg

              Das Skript funktioniert aber, weil der Datenpunkt trotzdem mit dem Wert "false" beschrieben wird. Er kann halt nur nicht an den Taster gesendet werden. Jetzt meine Frage. Kann man diese Fehlermeldung unterdrücken durch einen Zusatzparameter?

              Wenn nicht, dann muss ich wohl mit einer Zusatzvariablen arbeiten.

              ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

              paul53P 1 Antwort Letzte Antwort
              0
              • D dtp

                Hallo,

                ich musste feststellen, dass die Zeile

                setState(triggerID+"."+channelUp+".PRESS_SHORT", false);
                

                zu einer Fehlermeldung führte:

                2023-01-20_19h40_04.jpg

                Das Skript funktioniert aber, weil der Datenpunkt trotzdem mit dem Wert "false" beschrieben wird. Er kann halt nur nicht an den Taster gesendet werden. Jetzt meine Frage. Kann man diese Fehlermeldung unterdrücken durch einen Zusatzparameter?

                Wenn nicht, dann muss ich wohl mit einer Zusatzvariablen arbeiten.

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #16

                @dtp sagte: Kann man diese Fehlermeldung unterdrücken durch einen Zusatzparameter?

                Lass setState(...PRESS_SHORT, false) weg, denn HomeMatic-Taster haben immer den Wert true und sind nicht umsonst "read only". Bei Tastenbetätigung wird nur der Zeitstempel aktualisiert.

                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

                D 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @dtp sagte: Kann man diese Fehlermeldung unterdrücken durch einen Zusatzparameter?

                  Lass setState(...PRESS_SHORT, false) weg, denn HomeMatic-Taster haben immer den Wert true und sind nicht umsonst "read only". Bei Tastenbetätigung wird nur der Zeitstempel aktualisiert.

                  D Offline
                  D Offline
                  dtp
                  schrieb am zuletzt editiert von dtp
                  #17

                  @paul53 sagte in Ikea Lampen und Rollos mit HomeMatic Wandtaster steuern:

                  Lass setState(...PRESS_SHORT, false) weg

                  Das geht leider nicht so einfach, weil ich dann nicht mit einem kurzen Tastendruck zwischen einen Fahr- und Stoppbefehl toggeln kann. Aber ich habe es jetzt mit einer Hilfsvariablen gelöst.

                  //Skript zum Steuern eines nicht HM-Kompatiblen Beschattungsgeräts mittels HM-Tasterbetätigung
                  //Autor: dtp, Version: 1.0 
                  var triggerId = 'hm-rpc.1.000B5D8995CA16'; // ID des auslösenden Tasters
                  var channelUp = 5; // Kanal des auslösenden Tasters zum Hochfahren
                  var channelDown = 6; // Kanal des auslösenden Tasters zum Runterfahren
                  var blindsIdList = ['tradfri.0.B-65540','tradfri.0.B-65544']; // ID-Liste der zu steuernden Rollos
                  
                  var step = 1; // Schrittweite für das Hoch- und Runterfahren in Prozent
                  var speed = 0.3; // Dauer eines einzelnen Schritts in Sekunden
                  
                  var auxTriggerId = 'javascript.0.variables.blindsAuxLivingroom'; // Hilfsvariable für die kurze Tasterbetätigung
                  var auxTriggerName = 'Hilfsvariable Wohnzimmer Wandtaster Rollos'; // Name der Hilfsvariablen 
                  
                  //weitere zu deklariende Variablen
                  var IntervalId; var i; var count = 1;
                  
                  // Hilfsvariable für Taster anlegen 
                  if(!existsState(auxTriggerId)){
                    createState(auxTriggerId, true, {name: auxTriggerName,  type: 'boolean', role: 'value'}, function () {}); 
                  } else{setState(auxTriggerId, true);}
                  
                  // kurze Tasterbetätigung zum Hochfahren und Stoppen im Wechsel
                  on({id: triggerId+"."+channelUp+".PRESS_SHORT"}, async function (obj) {
                    if(getState(auxTriggerId).val){
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", 100);
                      count = 100 / step;
                      //log('go up');
                      setState(auxTriggerId, false);
                    }
                    else{
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.stop", true);
                      count = getState(blindsIdList[1]+".blind.position").val / step;
                      //log('stopp');
                      setState(auxTriggerId, true);
                    }
                  });
                  
                  // kurze Tasterbetätigung zum Runterfahren und Stoppen im Wechsel
                  on({id: triggerId+"."+channelDown+".PRESS_SHORT"}, async function (obj) {
                    if(getState(auxTriggerId).val){
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", 0);
                      count = 0;
                      //log('go down');
                      setState(auxTriggerId, false);
                    }
                    else{
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.stop", true);
                      count = getState(blindsIdList[1]+".blind.position").val / step;
                      //log('stopp');
                      setState(auxTriggerId, true);
                    }
                  });
                  
                  // lange Tasterbetätigung zum Hochfahren
                  on({id: triggerId+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
                    IntervalId = setInterval(function(){
                      count++;
                      //log((count * step).toString());
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", count * step);
                      if(count * step > 99) clearInterval(IntervalId);
                    }, speed * 1000);
                  });
                  on({id: triggerId+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
                    clearInterval(IntervalId);
                  });
                  
                  // lange Tasterbetätigung zum Runterfahren
                  on({id: triggerId+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
                    IntervalId = setInterval(function(){
                      count--;
                      //log((count * step).toString());
                      for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", count * step);
                      if(count * step < 1) clearInterval(IntervalId);
                    }, speed * 1000);
                  });
                  on({id: triggerId+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
                    clearInterval(IntervalId); 
                  });
                  

                  Nicht ganz so schön ist, dass bei langem Tastendruck die Rollos gelegentlich etwas ruckeln, wenn mehrere quasi als Gruppe angesteuert werden sollen. Mit einem einzigen Rollo läuft es dagegen smooth.

                  ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

                  D 1 Antwort Letzte Antwort
                  0
                  • D dtp

                    @paul53 sagte in Ikea Lampen und Rollos mit HomeMatic Wandtaster steuern:

                    Lass setState(...PRESS_SHORT, false) weg

                    Das geht leider nicht so einfach, weil ich dann nicht mit einem kurzen Tastendruck zwischen einen Fahr- und Stoppbefehl toggeln kann. Aber ich habe es jetzt mit einer Hilfsvariablen gelöst.

                    //Skript zum Steuern eines nicht HM-Kompatiblen Beschattungsgeräts mittels HM-Tasterbetätigung
                    //Autor: dtp, Version: 1.0 
                    var triggerId = 'hm-rpc.1.000B5D8995CA16'; // ID des auslösenden Tasters
                    var channelUp = 5; // Kanal des auslösenden Tasters zum Hochfahren
                    var channelDown = 6; // Kanal des auslösenden Tasters zum Runterfahren
                    var blindsIdList = ['tradfri.0.B-65540','tradfri.0.B-65544']; // ID-Liste der zu steuernden Rollos
                    
                    var step = 1; // Schrittweite für das Hoch- und Runterfahren in Prozent
                    var speed = 0.3; // Dauer eines einzelnen Schritts in Sekunden
                    
                    var auxTriggerId = 'javascript.0.variables.blindsAuxLivingroom'; // Hilfsvariable für die kurze Tasterbetätigung
                    var auxTriggerName = 'Hilfsvariable Wohnzimmer Wandtaster Rollos'; // Name der Hilfsvariablen 
                    
                    //weitere zu deklariende Variablen
                    var IntervalId; var i; var count = 1;
                    
                    // Hilfsvariable für Taster anlegen 
                    if(!existsState(auxTriggerId)){
                      createState(auxTriggerId, true, {name: auxTriggerName,  type: 'boolean', role: 'value'}, function () {}); 
                    } else{setState(auxTriggerId, true);}
                    
                    // kurze Tasterbetätigung zum Hochfahren und Stoppen im Wechsel
                    on({id: triggerId+"."+channelUp+".PRESS_SHORT"}, async function (obj) {
                      if(getState(auxTriggerId).val){
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", 100);
                        count = 100 / step;
                        //log('go up');
                        setState(auxTriggerId, false);
                      }
                      else{
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.stop", true);
                        count = getState(blindsIdList[1]+".blind.position").val / step;
                        //log('stopp');
                        setState(auxTriggerId, true);
                      }
                    });
                    
                    // kurze Tasterbetätigung zum Runterfahren und Stoppen im Wechsel
                    on({id: triggerId+"."+channelDown+".PRESS_SHORT"}, async function (obj) {
                      if(getState(auxTriggerId).val){
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", 0);
                        count = 0;
                        //log('go down');
                        setState(auxTriggerId, false);
                      }
                      else{
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.stop", true);
                        count = getState(blindsIdList[1]+".blind.position").val / step;
                        //log('stopp');
                        setState(auxTriggerId, true);
                      }
                    });
                    
                    // lange Tasterbetätigung zum Hochfahren
                    on({id: triggerId+"."+channelUp+".PRESS_LONG_START"}, async function (obj) {
                      IntervalId = setInterval(function(){
                        count++;
                        //log((count * step).toString());
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", count * step);
                        if(count * step > 99) clearInterval(IntervalId);
                      }, speed * 1000);
                    });
                    on({id: triggerId+"."+channelUp+".PRESS_LONG_RELEASE"}, async function (obj) {
                      clearInterval(IntervalId);
                    });
                    
                    // lange Tasterbetätigung zum Runterfahren
                    on({id: triggerId+"."+channelDown+".PRESS_LONG_START"}, async function (obj) {
                      IntervalId = setInterval(function(){
                        count--;
                        //log((count * step).toString());
                        for(i = 0; i < blindsIdList.length; i++) setState(blindsIdList[i]+".blind.position", count * step);
                        if(count * step < 1) clearInterval(IntervalId);
                      }, speed * 1000);
                    });
                    on({id: triggerId+"."+channelDown+".PRESS_LONG_RELEASE"}, async function (obj) {
                      clearInterval(IntervalId); 
                    });
                    

                    Nicht ganz so schön ist, dass bei langem Tastendruck die Rollos gelegentlich etwas ruckeln, wenn mehrere quasi als Gruppe angesteuert werden sollen. Mit einem einzigen Rollo läuft es dagegen smooth.

                    D Offline
                    D Offline
                    dtp
                    schrieb am zuletzt editiert von
                    #18

                    Um doppeltes Schreiben zu vermeiden, habe ich im HomeMatic-Forum einen kleinen Thread zu dem Projekt gestartet. Alles weitere dann dort (klick!)

                    ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

                    D 1 Antwort Letzte Antwort
                    0
                    • D dtp

                      Um doppeltes Schreiben zu vermeiden, habe ich im HomeMatic-Forum einen kleinen Thread zu dem Projekt gestartet. Alles weitere dann dort (klick!)

                      D Offline
                      D Offline
                      dtp
                      schrieb am zuletzt editiert von
                      #19

                      Jetzt ist mir in Verbindung mit den Skripten noch ein kleines Problem aufgefallen. Starte ich die entsprechende Instanz des hm-rpc-Adapters neu, dann werden alle Skripte getriggert. Sprich, die Leuchten gehen an und die Rollos fahren runter. Wie kann ich das vermeiden?

                      ioBroker im Docker-Container auf Synology DiskStation DS718+, HomeMatic IP über CCU3, IKEA Dirigera inkl. Matter, Apple Homekit, Amazon Alexa.

                      1 Antwort Letzte Antwort
                      0

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      606

                      Online

                      32.9k

                      Benutzer

                      83.0k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe