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. Hilfe Umstellen CCU2 Programm zum ioBroker Skript

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Hilfe Umstellen CCU2 Programm zum ioBroker Skript

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
6 Beiträge 4 Kommentatoren 1.5k Aufrufe
  • Ä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
    Zippolighter
    schrieb am zuletzt editiert von
    #1

    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 Antwort Letzte Antwort
    0
    • Jey CeeJ Online
      Jey CeeJ Online
      Jey Cee
      Developer
      schrieb am zuletzt editiert von
      #2

      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

      Persönlicher Support
      Spenden -> paypal.me/J3YC33

      1 Antwort Letzte Antwort
      0
      • Z Offline
        Z Offline
        Zippolighter
        schrieb am zuletzt editiert von
        #3

        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 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          pix
          schrieb am zuletzt editiert von
          #4

          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

          ioBroker auf Ubuntu in Proxmox (früher Mac mini (bis OS X 10.12.6 Sierra), VIS via iOS; angeschlossen: Homematic CCU2, Homepilot 1, ConBee II, einige Wemos, Sonos, Unifi CK+Protect, Homekit, Homebridge; KEIN blockly! Github-Profil

          1 Antwort Letzte Antwort
          0
          • paul53P Offline
            paul53P Offline
            paul53
            schrieb am zuletzt editiert von
            #5

            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);
            });
            
            

            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
            • Z Offline
              Z Offline
              Zippolighter
              schrieb am zuletzt editiert von
              #6

              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 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

              804

              Online

              32.4k

              Benutzer

              81.5k

              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