Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Ansage "Wäsche ist fertig" HILFE

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Ansage "Wäsche ist fertig" HILFE

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

      Hallo zusammen,

      ich muß mal wieder lauthals "HILFE" rufen.

      Ich versuche gerade die Scripte aus CCU.IO zu importieren und….... versage kläglich. :roll:

      Ein Script das bis dato wunderbar funktioniert hat, ist ein Script das mir ansagt wann die Wäsche fertig ist (Waschmaschine steht in anderem Stockwerk. Frau war begeistert 😉 ). Gelöst mit einem Zwischenstecker mit Leistungsmessung.

      Erstellt wurde es mit dem Scripteditor.

      Hier die "angepasste" Version:
      ` > // Force Variablen

      setObject(Wasch, true);

      // Timeout Variablen

      var loop_2 = 0;

      var loop_2_delay;

      // Variablen

      function loop_2_loop(data) {

      if (loop_2 < 2) {

      loop_2++;

      codebox_0(data);

      loop_2_delay = setTimeout(function() {

      loop_2_loop(data)}, 30000);

      }

      }

      function loop_2_in1(data) { loop_2 = 0;clearTimeout(loop_2_delay);

      loop_2_loop(data);

      }

      function loop_2_in2(data) { clearInterval(loop_2_delay);

      loop_2 = 2;

      }

      // CCU.IO Objekte

      var Wasch = true;

      //setObject("Wasch"), {Name: "var_Waschmaschine",TypeName: "VARDP",_persistent: true});

      // Trigger

      var Daten="hm-rpc.0.LEQ0529875.2.POWER";

      var Power = getState(Daten);

      subscribe({id:(getState(Power).val),valLt: 2}, function(data) {codebox_12(data);});

      subscribe({id: (getState(Power).val),valLt: 1}, function(data) {codebox_12(data);});

      subscribe({id: (getState(Power).val),valGt: 4}, function(data) {codebox_9(data);});

      //Bedingungsabfrage_Leistungsdaten

      function codebox_0(data) {

      var input_1_out = getState("hm-rpc.0.LEQ0529875.2.POWER"/Waschmaschine-Daten.POWER/).val;

      var string_2_out = "2";

      var input_13_out = getState("hm-rpc.0.LEQ0529875.2.CURRENT"/Waschmaschine-Daten.CURRENT/).val;

      var string_14_out = "40";

      var wenn_3_out=true;

      var wenn_16_out = true;

      var und_15_out = true;

      if (input_1_out < string_2_out) {

      wenn_3_out = true;

      } else {

      wenn_3_out = false;

      } if (input_13_out < string_14_out) {

      wenn_16_out = true;

      } else {

      wenn_16_out = false;

      } if (wenn_3_out === true && wenn_16_out === true) {

      und_15_out = true;

      } else {

      und_15_out = false;

      } if (und_15_out === true) {

      codebox_1(data);

      }

      }

      //Sprachausgabe

      function codebox_1(data) {

      var string_4_out = "Die Waesche ist fertig.";

      setState("sayit.0.tts.text"/Text to speech/, string_4_out);

      }

      //Abfrage_Bedingung_Abbruch

      function codebox_3(data) {

      var input_7_out = getState(Wasch);

      var true_8_out = true;

      var wenn_6_out = true;

      if (input_7_out == true_8_out) {

      wenn_6_out=true;

      } else {

      setState(wenn_6_out, false);

      } if (wenn_6_out === true) {loop_2_in2(data);}}

      //Abfrage_Variable_unwahr

      function codebox_5(data) {

      Log("Codebox_5");

      var input_18_out = getState(Wasch);

      Log("Varable Wasch: "+Wasch);

      var true_19_out = true;

      var wenn_17_out = false;

      if (input_18_out != true_19_out) {

      wenn_17_out = true;

      } else {

      wenn_17_out = false;

      }

      codebox_3(data);

      if (wenn_17_out === true) {loop_2_in1(data);}

      }

      //Trigger_Variable_unwahr_setzen

      function codebox_9(data) {

      var false_27_out = false;

      setState(Wasch, false_27_out);

      }

      //Trigger_Variable_wahr_setzen

      function codebox_12(data) {

      var true_31_out = true;

      setState(Wasch, true_31_out);

      } `

      Ziemlich wirr. Ich weiß…...

      Das folgende Script hab ich versucht selbst zu erstellen. Hat auch teilweise funktioniert. Hab dann aber so lange dran rum experimentiert bis gar nichts mehr ging...

      var varWatt ='hm-rpc.0.LEQ0529875.2.POWER';
      var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT';
      var ccuvar_1 ="hm-rega.0.9531";
      var ccuvar_2 = "hm-rega.0.11273";
      var varWaschmaschine =getState(ccuvar_2).val;
      
      {
      subscribe ({id: varWatt, change: "lt"}, Ausgabe);
      //subscribe ({id: varWatt, change: "any"}, Steuerung);
      
      }
      function Ausgabe()
      {  
       var varWaschmaschine =getState(ccuvar_2).val;
       var Leistung =getState(varWatt).val;
       var strom=getState(varAmpere).val;
       var varAnzeige=getState(ccuvar_1).val;
          if (varWaschmaschine===true)
             if(Leistung<1)
                 if(strom<40)
                      setState("sayit.0.tts.text", "Die Wäsche ist fertig!")
                      setState("hm-rega.0.11273", "0");
      }
      function Steuerung()
      {
        var varWaschmaschine =getState(ccuvar_2).val;
        var Leistung=getState(varWatt).val;
        var strom=getState(varAmpere).val;
        var varAnzeige=getState(ccuvar_1).val;
      
          if(Leistung>1)
              if(strom>40)
                  setState("hm-rega.0.11273", "1")
                  setState("hm-rega.0.9531", "1")
                  setState("hm-rega.0.11330", true);
      }
      

      Kann mir einer sagen was ich zum :evil: verkehrt mache?

      Danke und Gruß

      Dragonius

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

        1. Bei der verschachtelten if-Abfrage fehlen geschweifte Klammern. Besser man verwendet eine UND-Verknüpfung.

        2. if (varWaschmaschine===true) erwartet einen boolean Wert. setState("hm-rega.0.11273", "0"); achreibt aber einen String !

        Vielleicht funktioniert es so ?

        var varWatt ='hm-rpc.0.LEQ0529875.2.POWER';
        var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT';
        var ccuvar_1 = "hm-rega.0.9531";
        var ccuvar_2 = "hm-rega.0.11273";
        // var varWaschmaschine =getState(ccuvar_2).val;
        
        subscribe ({id: varWatt, change: "lt"}, Ausgabe);
        //subscribe ({id: varWatt, change: "any"}, Steuerung);
        
        function Ausgabe()
        { 
        	var varWaschmaschine = getState(ccuvar_2).val;
        	var Leistung  = getState(varWatt).val;
        	var strom = getState(varAmpere).val;
        	var varAnzeige = getState(ccuvar_1).val;
        	if (varWaschmaschine && Leistung < 1 && strom < 40)
        	{
        		setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
        		setState(ccuvar_2, false);
        	}
        }
        
        1 Reply Last reply Reply Quote 0
        • D
          Dragonius last edited by

          Danke für die Hilfe. Hat nicht ganz auf Anhieb geklappt. Die "Und" Dedingung wollte er so nicht fressen.

          Hier das Script, dass jetzt fehlerfrei und so wie es soll läuft:

          var varWatt ='hm-rpc.0.LEQ0529875.2.POWER';
          var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT';
          var ccuvar_1 = "hm-rega.0.9531";
          var ccuvar_2 = "hm-rega.0.11273";
          
          subscribe ({id: varWatt, change: "lt"}, Ausgabe);
          subscribe ({id: varAmpere, change: "lt"}, Ausgabe);
          subscribe ({id: varWatt, change: "any"}, Steuerung);
          
          function Ausgabe()  // Abfrage der Energiedaten und Sprachausgabe
          {
             var varWaschmaschine = getState(ccuvar_2).val;
             var Leistung  = getState(varWatt).val;
             var strom = getState(varAmpere).val;
          {   
             if (Leistung < 1)
                  if (strom < 40)
                     setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
                     setState(ccuvar_2, 0);
                     setState(ccuvar_1, false);
          }}
          
          function Steuerung()  // Zum setzen der Anzeige
          {
              var varWaschmaschine =getState(ccuvar_2).val;
              var Leistung=getState(varWatt).val;
              var strom=getState(varAmpere).val;
          
                if(Leistung > 1)
                    if(strom>40)
                        setState(ccuvar_2, 1);
                        setState(ccuvar_1, true);
          }
          

          Gruß

          Dragonius

          1 Reply Last reply Reply Quote 0
          • J
            jack77 last edited by

            Hi,

            kann mir einer sagen wie ich die Ansage über ein Sonos herausgeben kann?

            1 Reply Last reply Reply Quote 0
            • D
              dwm last edited by

              Du brauchst den Sonos Adapter und den text-to-speech adapter, entsprechend konfiguriert.

              Im Script unten erfolgt dann die Ausgabe mit der Zeile

              setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
              

              Nach einem schnellen Blick …

              Ich glaub ja nicht, dass das Script so 100% funktioniert.

              Diese komische geschweifte Klammer in function Ausgabe() macht ... nix.

              EINRÜCKUNGEN sagen der if Abfrage auch NIX.

              das heisst bei Aufruf von "Ausgabe" werden die CCU-Variablen IMMER 0 bzw. false.

              Genau so wird bei der function Steuerung die ccuvar_1 IMMER auf true gesetzt, die ist AUSSERHALB der if Abfragen - es ist wie gesagt EGAL, wie weit die eingerückt ist.

              Siehe z.B. ... https://developer.mozilla.org/de/docs/W ... behandlung

              Wenn Du also willst, dass z.B. in function Ausgabe die ccu-Variablen nur auf 0 bzw. false gehen, wenn die Wäsche fertig ist, muss das heissen ...

              function Ausgabe()  // Abfrage der Energiedaten und Sprachausgabe
              {
                 var varWaschmaschine = getState(ccuvar_2).val;
                 var Leistung  = getState(varWatt).val;
                 var strom = getState(varAmpere).val;
              
                 if (Leistung < 1)
                      if (strom < 40)
                      {
                         setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
                         setState(ccuvar_2, 0);
                         setState(ccuvar_1, false);
                      }
              }
              
              function Steuerung()  // Zum setzen der Anzeige
              {
                  var varWaschmaschine =getState(ccuvar_2).val;
                  var Leistung=getState(varWatt).val;
                  var strom=getState(varAmpere).val;
              
                    if(Leistung > 1)
                        if(strom>40)
                        {
                            setState(ccuvar_2, 1);
                            setState(ccuvar_1, true);
                        }
              }
              
              

              Übrigens fragst Du in beiden Funktionen die varWaschmaschine zwar ab, aber machst nichts damit…

              Gibt es eigentlich einen Grund, den Strom und die Leistung abzufragen? Naiv hätte ich gesagt, P=U x I ... und wir haben doch recht konstant U = 230V...

              CU

              Werner

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

                Hallo,

                Werner hat recht, die letzte gepostete Version des Skriptes kann so nicht fehlerfrei laufen. Da muss doch auch der Editor im Javascript Adapter meckern (auf die Symbole am linken Rand achten!)

                Ich denke vielleicht so:

                ! ````
                var varWatt ='hm-rpc.0.LEQ0529875.2.POWER';
                var varAmpere = 'hm-rpc.0.LEQ0529875.2.CURRENT';
                var ccuvar_1 = "hm-rega.0.9531";
                var ccuvar_2 = "hm-rega.0.11273";
                ! on({
                id: varWatt,
                change: "lt"
                }, Ausgabe);
                ! on({
                id: varAmpere,
                change: "lt"
                }, Ausgabe);
                ! on({
                id: varWatt,
                change: "any"
                }, function(obj) {
                // var varWaschmaschine = getState(ccuvar_2).val; // wozu wurde dieser State abgefragt?
                var Leistung = obj.state.val;
                var strom=getState(varAmpere).val;
                if (Leistung > 1 && strom > 40) {
                setState(ccuvar_2, 1);
                setState(ccuvar_1, true);
                }
                });
                ! function Ausgabe() { // Abfrage der Energiedaten und Sprachausgabe
                var varWaschmaschine = getState(ccuvar_2).val;
                var Leistung = getState(varWatt).val;
                var strom = getState(varAmpere).val;
                if (Leistung < 1 && strom < 40) {
                setState("sayit.0.tts.text", "Die Wäsche ist fertig!");
                setState(ccuvar_2, 0);
                setState(ccuvar_1, false);
                }
                }

                ! ````

                Gruß

                Pix

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

                  Hallo Dragonius,

                  so sieht es bei mir aus, Ausgabe über Lautsprecher und Telegram
                  1162_image_2.png

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

                    Mein Code sieht so aus. Einfach und funktioniert super. besonders beim Trockner, weil der am Ende noch auflockert.

                    Das valLt und oldValGe sind echt gute Funktionen.

                    Gruß

                    var timer = null;
                    
                    // Einschaltverzögerung   
                    on({id: "hm-rpc.0.LEQ1314518.2.POWER", valLt: 1.1, oldValGe: 100}, function() {
                        timer = setTimeout(meldung, 120000);  // in ms
                        log("Einschaltverzögerung ausgelöst");
                    });
                    // Timer löschen
                    on({id: "hm-rpc.0.LEQ1314518.2.POWER", valGe: 100, oldValLt: 5}, function() {
                        if(timer) clearTimeout(timer);
                        log("Timer löschen");
                    });
                    
                    // Anweisung
                    function meldung() {
                        log("Trockner fertig");
                        //Sayit
                        setState("sayit.0.tts.text", "de;40;" + 'Der Trockner ist fertig');
                        //Push schicken
                        sendTo("telegram.0", "send", {
                            text: 'Trockner',
                       });
                    }
                    
                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    444
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

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