Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Skripten / Logik
  4. JavaScript
  5. Datenpunkte triggern sich gegenseitig

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    857

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Datenpunkte triggern sich gegenseitig

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 3 Kommentatoren 478 Aufrufe 1 Watching
  • Ä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.
  • Z Offline
    Z Offline
    Zeebo
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen!

    Ich habe folgendes Problem: Ich benötige insgesamt 7 Datenpunkte: jeweils einen für einen der drei RGB-Kanäle mit einem Wertebereich von 0-255, jeweils einen der frei RGB-Kanäle mit dem prozentualen Wert von 0-100 und einmal den vollständigen RGB-Wert im HEX-Format. Beispiel: Rot: 255, 100%; Grün: 25, 9.8%; Blau: 33, 13%; RGB: #FF1921
    Ich habe nun ein Skript erstellt, dass diese 7 Datenpunkte überwacht und bei Aktualisierung umrechnet und abhängige Datenpunkte aktualisiert. Ändere ich z.B. Grün auf 100% wird der grüne RGB-Wert auf 255 und der HEX-Wert auf FFFF21 gesetzt. Bei Änderungen am HEX-Wert ebenfalls. Allerdings habe ich das Problem, dass durch die Änderungen der anderen Datenpunkte diese ebenfalls triggern und somit findet das kein Ende. Eine Änderung löst 2 Trigger aus, diese zwei wieder jeweils 2 und so weiter. Wie erreiche ich es nun, dass bei einer Änderung durch das Skript der Trigger feuert?

    ioBroker auf Ubuntu 16.04.5 LTS (VM auf ESXi 6.5 Hypervisor) • CCU2 • HomeMatic • Alexa • Harmony Hub

    AsgothianA paul53P 2 Antworten Letzte Antwort
    0
    • Z Zeebo

      Hallo zusammen!

      Ich habe folgendes Problem: Ich benötige insgesamt 7 Datenpunkte: jeweils einen für einen der drei RGB-Kanäle mit einem Wertebereich von 0-255, jeweils einen der frei RGB-Kanäle mit dem prozentualen Wert von 0-100 und einmal den vollständigen RGB-Wert im HEX-Format. Beispiel: Rot: 255, 100%; Grün: 25, 9.8%; Blau: 33, 13%; RGB: #FF1921
      Ich habe nun ein Skript erstellt, dass diese 7 Datenpunkte überwacht und bei Aktualisierung umrechnet und abhängige Datenpunkte aktualisiert. Ändere ich z.B. Grün auf 100% wird der grüne RGB-Wert auf 255 und der HEX-Wert auf FFFF21 gesetzt. Bei Änderungen am HEX-Wert ebenfalls. Allerdings habe ich das Problem, dass durch die Änderungen der anderen Datenpunkte diese ebenfalls triggern und somit findet das kein Ende. Eine Änderung löst 2 Trigger aus, diese zwei wieder jeweils 2 und so weiter. Wie erreiche ich es nun, dass bei einer Änderung durch das Skript der Trigger feuert?

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      @Zeebo
      Das ist ganz einfach. Du triggers auf Wertänderungen „mit acknowledge“, und setzt die Updates ohne acknowledge, wenn deine scripte die Werte umrechnen.

      A.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      Z 1 Antwort Letzte Antwort
      0
      • AsgothianA Asgothian

        @Zeebo
        Das ist ganz einfach. Du triggers auf Wertänderungen „mit acknowledge“, und setzt die Updates ohne acknowledge, wenn deine scripte die Werte umrechnen.

        A.

        Z Offline
        Z Offline
        Zeebo
        schrieb am zuletzt editiert von
        #3

        @Asgothian
        Verstehe ich jetzt nicht ganz.
        Hier mal der Code:

        var r=0, g=0, b=0;
        var rp=0, gp=0, bp=0;
        var hex = "#000000";
        var dp_r = "javascript.0.tpm2net.rgb.r";
        var dp_g = "javascript.0.tpm2net.rgb.g";
        var dp_b = "javascript.0.tpm2net.rgb.b";
        var dp_rp = "javascript.0.tpm2net.rgb.rp";
        var dp_gp = "javascript.0.tpm2net.rgb.gp";
        var dp_bp = "javascript.0.tpm2net.rgb.bp";
        var dp_hex = "javascript.0.tpm2net.rgb.rgb";
        
        on({id: dp_r, change: "ne"}, function (obj) {
           console.log(1);
           r = getState(dp_r).val
           rp = Math.round((100/255)*r);
           setHex();
           setState(dp_rp, rp, false);
        });
        
        on({id: dp_rp, change: "ne"}, function (obj) {
           console.log(2);
           rp = getState(dp_rp).val
           r = Math.round((255/100)*rp);
           setHex();
           setState(dp_r, r, false);
        });
        
        on({id: dp_g, change: "ne"}, function (obj) {
           console.log(3);
           g = getState(dp_g).val
           gp = Math.round((100/255)*g);
           setHex();
           setState(dp_gp, gp, false);
        });
        
        on({id: dp_gp, change: "ne"}, function (obj) {
           console.log(4);
           gp = getState(dp_gp).val
           g = Math.round((255/100)*gp);
           setHex();
           setState(dp_g, g, false);
        });
        
        on({id: dp_b, change: "ne"}, function (obj) {
           console.log(5);
           b = getState(dp_b).val
           bp = Math.round((100/255)*b);
           setHex();
           setState(dp_bp, bp, false);
        });
        
        on({id: dp_bp, change: "ne"}, function (obj) {
           console.log(6);
           bp = getState(dp_bp).val
           b = Math.round((255/100)*bp);
           setHex();
           setState(dp_b, b, false);
        });
        
        on({id: dp_hex, change: "ne"}, function (obj) {
           console.log(7);
           hex = getState(dp_hex).val
           var rgb = hexToRgb(hex);
           r = rgb.r;
           g = rgb.g;
           b = rgb.b;
           console.log("ROT "+r)
           rp = Math.round((100/255)*r);
           gp = Math.round((100/255)*g);
           bp = Math.round((100/255)*b);
           setState(dp_r, r, false);
           setState(dp_g, g, false);
           setState(dp_b, b, false);
           /*
           setState(dp_rp, rp, false);
           setState(dp_gp, gp, false);
           setState(dp_bp, bp, false);
           */
        });
        
        function setHex() {
           hex = rgbToHex(r, g, b);
           setState(dp_hex, hex, false);
        }
        


        Wenn ich zb. den Datenpunkt dp_r ändere, wird u.a. mit setHex() der Hex-Wert aktualisiert, dadurch wird dann dp_hex getriggert, in dem wieder die drei States gesetzt werden. Das soll ja nicht.
        Das mit dem ACK habe ich wohl noch nicht ganz verstanden (auch nicht anhand der Doku)

        ioBroker auf Ubuntu 16.04.5 LTS (VM auf ESXi 6.5 Hypervisor) • CCU2 • HomeMatic • Alexa • Harmony Hub

        1 Antwort Letzte Antwort
        0
        • Z Zeebo

          Hallo zusammen!

          Ich habe folgendes Problem: Ich benötige insgesamt 7 Datenpunkte: jeweils einen für einen der drei RGB-Kanäle mit einem Wertebereich von 0-255, jeweils einen der frei RGB-Kanäle mit dem prozentualen Wert von 0-100 und einmal den vollständigen RGB-Wert im HEX-Format. Beispiel: Rot: 255, 100%; Grün: 25, 9.8%; Blau: 33, 13%; RGB: #FF1921
          Ich habe nun ein Skript erstellt, dass diese 7 Datenpunkte überwacht und bei Aktualisierung umrechnet und abhängige Datenpunkte aktualisiert. Ändere ich z.B. Grün auf 100% wird der grüne RGB-Wert auf 255 und der HEX-Wert auf FFFF21 gesetzt. Bei Änderungen am HEX-Wert ebenfalls. Allerdings habe ich das Problem, dass durch die Änderungen der anderen Datenpunkte diese ebenfalls triggern und somit findet das kein Ende. Eine Änderung löst 2 Trigger aus, diese zwei wieder jeweils 2 und so weiter. Wie erreiche ich es nun, dass bei einer Änderung durch das Skript der Trigger feuert?

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

          @Zeebo sagte:

          durch die Änderungen der anderen Datenpunkte diese ebenfalls triggern und somit findet das kein Ende.

          Das kann man mit fromNe in jedem Trigger verhindern. Hier für den ersten Trigger:

          const js = 'system.adapter.javascript.0';
          
          on({id: dp_r, change: "ne", fromNe: js}, function (obj) {
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          Antworten
          • In einem neuen Thema antworten
          Anmelden zum Antworten
          • Älteste zuerst
          • Neuste zuerst
          • Meiste Stimmen


          Support us

          ioBroker
          Community Adapters
          Donate

          676

          Online

          32.6k

          Benutzer

          82.1k

          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