Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Hilfe Umstellen CCU2 Programm zum ioBroker Skript

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Hilfe Umstellen CCU2 Programm zum ioBroker Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • Z
      Zippolighter last edited by

      Hallo,

      vorweg erstmal. Bin blutiger JavaScript Anfänger und dachte, das ich mit vorhandenen Beispielen es schaffe einen Teil meiner CCU2 Programme als ioBroker Scripte umzustellen.

      Da kann ich erstmal sagen bin sowas von gescheitert.

      Also hoffe ich das ich mit Eurer Hilfe es exemplarisch an einem Programm hinbekomme um dementsprechend zu lernen.

      Mein Programm Abwesend Kurz:

      Wenn die CCU2 Variable Abwesend kurz auf true gesetzt wird oder via Fernbedienung mit Tastendruck kurz die Wenn Funktion aktiv dann werden etliche Komponenten ausgeschaltet.

      1304_screenshot_69.jpg

      Mein erster Programm Ansatz war:

      /* Programm Abwesend Kurz
         Ablösen des CCU2 Programms
      */
      
      if ("hm-rega.0.2330" === true /*Abwesenheit kurz*/ && "hm-rega.0.950"/*Anwesenheit*/ === true)
      
          setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer
          setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");
      
      

      Es ist mein ursprünliches Beispiel, habe verschiedene Sachen probiert, kam dann aber in eine endlosschleife etc.

      Meine Probleme im Einzelnen.

      Im CCU2 Programm sind zum Auslösen zwei Und Verknüpfungen. Die erste hatte ich versucht im Script mit dem if abzubilden, was nicht funktioniert. Wie ich die Oder Verknüpfung integriere weiß ich gar nicht.

      Wie ich States setze klappt schon ganz gut, auch verzögert. Allerdings stelle ich mir die Frage ob ich das verändern der States nicht irgendwie globalisieren kann, da ich es in mehreren Programmen benötige.

      Also wie gesagt, blutiger Anfänger der lernen möchte. Ich bin dankbar für jeden Vorschlag wie man es richtig macht oder wo ich noch was nachlesen kann. Auch ein macht keinen Sinn dafür fehlen dir die Voraussetzungen, also mache es besser so, ist hilfreich.

      Nicht falsch verstehen, Ihr sollt mir nicht die Programme schreiben, dann lerne ich es nicht. Es wäre aber toll wenn Ihr mir an direkten Fragestellungen mit Beispielen und vielleicht kurzen Erklärungen auf diesem langen Weg helfen könntet.

      Schonmal ganz herzlichen Dank

      Gruß Zippolighter

      1 Reply Last reply Reply Quote 0
      • Jey Cee
        Jey Cee Developer last edited by

        Also dein Beispiel sieht richtig aus, was aber fehlt ist schlichtweg eine subscription auf dein Objekt damit das programm ausgeführt wird.

        Code: on({id}, function(){dein Beispiel})

        Hoffe das hilft. Bei JS allgemein hilft w3schools sehr gut.

        Gesendet von meinem Jolla mit Tapatalk

        1 Reply Last reply Reply Quote 0
        • Z
          Zippolighter last edited by

          Bin ein bischen weiter.

          So klappt es mit dem ersten "Wenn" Wert

          /* Programm Abwesend Kurz
             Ablösen des CCU2 Programms
          */
          
          var idAbwesendKurz = 'hm-rega.0.2330',
          
          // if (getState("hm-rega.0.2330.STATE" === true /*Abwesenheit kurz*/ && "hm-rega.0.950"/*Anwesenheit*/ === true)
          on({
              id: idAbwesendKurz,
              change: 'ne',
              val: true
          }, function (obj) {
              setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer
              setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");
          
          });
          
          

          Allerdings krieg ich den zweiten "Wenn" Wert (das prüfen ob Anwesend auf true ist), nicht hin.

          Habe es so versucht

          /* Programm Abwesend Kurz
             Ablösen des CCU2 Programms
          */
          
          var idAbwesendKurz = 'hm-rega.0.2330',
              idAbwesend = 'hm-rega.0.950'; 
          
          // if (getState("hm-rega.0.2330.STATE" === true /*Abwesenheit kurz*/ && "hm-rega.0.950"/*Anwesenheit*/ === true)
          on({
              id: idAbwesendKurz,
              change: 'ne',
              val: true}
              &&
              {
              id: idAbwesend,
              change: 'eq',
              ack: true
          }, function (obj) {
              setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer
              setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");
          
          });
          
          

          Bitte nochmal einen Tipp, wie ich das prüfen realisiere.

          Danke Gruß Zippolighter

          1 Reply Last reply Reply Quote 0
          • P
            pix last edited by

            Hallo Zippolighter,

            Jey Cee hat es schon richtig erklärt: Die subscription (on()) ist der Teil, der auf die Änderung einer Variable wartet. Wenn diese Änderung eintritt und der neue Wert ist wie gewünscht, kann man auf eine weitere Variable/weiteres Objekt prüfen. Damit der aktuellste Stand dieses zweiten Objektes verwendet wird, fragt man ihn innerhalb der subscription ab.

            Der Dann-Bereich beider Abfragen ist hier identisch. Also brauchst du das nur einmal zu skripten. Du packst den Code in eine extra Funktion, die dann von beiden subscriptions aufgerufen wird.

            // Abfrage der Abwesenheit Kurz:
            var idAbwesendKurzVariable = 'hm-rega.0.HIER DIE ID DER VARIABLE ABWESENHEIT KURZ'; // nicht die ID des Tasters der Fernbedienung, sondern der Variable
            
            // lange, ausführliche Schreibweise
            on({
                id: idAbwesendKurzVariable, // Datenpunkt der Überwachung
                change: 'ne' // auf Änderung
            }, function (obj) {
                // den neuen Wert der Änderung checken
                if (obj.state.val === true) { // wenn neuer Wert true
                    // aktuelle Abfrage der zweiten Variable - also nur prüfen
                    var anwesenheit = getState("hm-rega.0.950"/*Anwesenheit*/).val; // zur besseren Übersicht in eine lokale Variable geschrieben
                    if (anwesenheit === true) { // wenn Anwesenheit auch wahr ist
                        starteAktion(); // Funktion aufrufen
                    }
                }
            });
            
            var idAbwesendKurzTaster = "hm-rega.0.2330.STATE" /*Abwesenheit kurz Taster*/; // STATE muss mit rein beim Taster, ist wohl eher ein hm-rpc.0.***.STATE Datenpunkt
            
            // zweite subscription auf die Fernbedienung in kurzer Schreibweise (change: 'ne' ist Standard, es kann "===true" weggelassen werden und einzeilige Anweisungen nach if brauchen keine geschweiften Klammern)
            on(idAbwesendKurzTaster, function (obj) {
                if (obj.state.val && getState(idAbwesendKurzVariable).val) starteAktion(); 
            });
            
            // Ausführung
            function starteAktion () {
                setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer
                setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");
                // weitere Aktionen einfügen
            }
            
            

            Der Taster der Fernbedienung sollte eigentlich ein RPC-Datenpunkt sein, kein REGA.

            In deinem Screenshot des CCU Programms wird in der oberen Wenn-Bedingung die Variable "Anwesenheit" geprüft, ind er unteren "wenn-Bedingung" die Variable "Abwesenheit-kurz". Wenn das so korrekt ist, ist das obige Skript 1:1 übersetzt.

            Gib mal Feedback 8-)

            Gruß

            Pix

            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              Für jeden Auslöser wird eine on(…) benötigt. Nur prüfen wird durch getState(id).val ersetzt.

              /* Programm Abwesend Kurz
                 Ablösen des CCU2 Programms
              */
              
              var idAbwesendKurz = 'hm-rega.0.2330',
                  idAnwesend = 'hm-rega.0.950',
                  idFB = "hm-rpc.0.MEQ0670647.2.PRESS_SHORT";  // Fernbedienung
              
              function allesaus() {
                  setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer
                  setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");
                  ...
              }
              
              on(idAbwesendKurz, function (dp) {  // Auslösen bei Änderung
                  if(dp.state.val && getState(idAnwesend).val) allesaus();
              });
              
              // Toggeln der SV mit Fernbedienung
              on({id: idFB,val: true}, function () {
                  if(getState(idAbwesendKurz).val) setState(idAbwesendKurz, false);
                  else setState(idAbwesendKurz, true);
              });
              
              
              1 Reply Last reply Reply Quote 0
              • Z
                Zippolighter last edited by

                Erstmal danke an Jey Cee, Pix und Paul53. Super mit den Beispielen komme ich schonmal ein ganzes Stück weiter

                Hatte mit der Erklärung von Jey Cee soweit weiter gemacht das ich bei einer if Variante war, die aber nicht funktioniert hat.

                Habe dann Pix Vorschlag umgesetzt, muss mir das von Paul53 noch genauer anschauen.

                Pix, hast natürlich recht, die Fernbedienung ist ein RPC Element (Ich muss auf Anwesend Kurz prüfen, da ich mit der Taste Short eine Toogle Funktion zwischen An und Aus realisiert habe). Allerdings verstehe ich gerade noch nicht den Punkt mit STATE, da ich ja PRESS_SHORT verwenden muss (denke ich zumindest, ansonsten Scheiss mich zusammen. Hihi)

                Erster Teil Funktioniert und auch die Funktion starteAktion. Zweite Subscription funktioniert nicht (denke weil ich da was falsches eingegeben habe, werde ich noch weiter probieren)

                ` > /* Programm Abwesend Kurz

                Ablösen des CCU2 Programms

                Mit Hilfe von Jey Cee, Pix und Paul53

                */

                // Abfrage der Abwesenheit Kurz:

                var idAbwesendKurzVariable = 'hm-rega.0.2330'; // System Variable CCU2 Abwesend Kurz

                // lange, ausführliche Schreibweise

                on({

                id: idAbwesendKurzVariable, // Datenpunkt der Überwachung

                change: 'ne' // auf Änderung

                }, function (obj) {

                // den neuen Wert der Änderung checken

                if (obj.state.val === true) { // wenn neuer Wert true

                // aktuelle Abfrage der zweiten Variable - also nur prüfen

                var anwesenheit = getState("hm-rega.0.950"/Anwesenheit/).val; // zur besseren Übersicht in eine lokale Variable geschrieben

                if (anwesenheit === true) { // wenn Anwesenheit auch wahr ist

                starteAktion(); // Funktion aufrufen

                }

                }

                });

                var idAbwesendKurzTaster = "hm-rpc.0.MEQ0670647.2.PRESS_SHORT" /Funk-Fernbedienung mit D. Abw.KurzAn/Aus:2.PRESS_SHORT/ /Abwesenheit kurz Taster/; // STATE muss mit rein beim Taster, ist wohl eher ein hm-rpc.0.***.STATE Datenpunkt

                // zweite subscription auf die Fernbedienung in kurzer Schreibweise (change: 'ne' ist Standard, es kann "===true" weggelassen werden und einzeilige Anweisungen nach if brauchen keine geschweiften Klammern)

                on(idAbwesendKurzTaster, function (obj) {

                if (obj.state.val && getState(idAbwesendKurzVariable).val) starteAktion();

                });

                // Ausführung

                function starteAktion () {

                setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer

                setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20");

                // weitere Aktionen einfügen

                } `

                nochmals danke

                Gruß Zippolighter

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                1.0k
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                4
                6
                1417
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo