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.
  • D dtp

    @homoran Alles klar. Verstanden. Aber kann ich jetzt, nachdem ich @paul53s Skript ausgeführt habe, direkt den Datenpunkt als Trigger mit

    on("hm-rpc.1.00019F299738F8.1.PRESS_SHORT", function (obj){...}
    

    verwenden, oder geht das so nicht? Irgendwie habe ich da noch ein Verständnisproblem.

    HomoranH Nicht stören
    HomoranH Nicht stören
    Homoran
    Global Moderator Administrators
    schrieb am zuletzt editiert von
    #8

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

    @homoran Alles klar. Verstanden. Aber kann ich jetzt, nachdem ich @paul53s Skript ausgeführt habe, direkt den Datenpunkt als Trigger mit

    on("hm-rpc.1.00019F299738F8.1.PRESS_SHORT", function (obj){...}
    

    verwenden, oder geht das so nicht? Irgendwie habe ich da noch ein Verständnisproblem.

    ich kann doch immer noch kein js :-(

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

    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 -

    CodierknechtC 1 Antwort Letzte Antwort
    0
    • HomoranH Homoran

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

      @homoran Alles klar. Verstanden. Aber kann ich jetzt, nachdem ich @paul53s Skript ausgeführt habe, direkt den Datenpunkt als Trigger mit

      on("hm-rpc.1.00019F299738F8.1.PRESS_SHORT", function (obj){...}
      

      verwenden, oder geht das so nicht? Irgendwie habe ich da noch ein Verständnisproblem.

      ich kann doch immer noch kein js :-(

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

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

      @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) {
      }
      

      "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

      1 Antwort Letzte Antwort
      0
      • 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

                          601

                          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