Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST]Datenpunkt und Funktion(FEHLER???)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [GELÖST]Datenpunkt und Funktion(FEHLER???)

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

      Hi,

      ich habe folgendes Problem.:

      Ich nutze ctrl Button State um meine HM Thermostate in Hand bzw Auto zu versetzten.

      Ich habe mir nach langen hin und her ein Script angelegt um in den Manu-Modus wechseln zu können, denn der Button gibt anscheinend einen String aus.

      Jetzt passiert aber folgendes:

      ich erzeuge Datenpunkte und verknüpfe diese mit den ctrl Buttons, diese sollen dann bei Betätigung eine function ausführen. Soweit so gut…...die Thermostate führen die Aktion auch aus, aber.........wenn ich jetzt einen dieser Button betätige, reagiert das andere Thermostat auch!!!

      Ich habe kaum Programmierkenntnisse aber aus meiner Sicht kann es nicht sein das eine Funktion bzw eine Datenpunkt angesteuert wird der einen komplett einen anderen Namen besitzt!

      Hier das erste Script:

      //Erzeuge Datenpunkte
      createState('thermostat.stube.autostube', "");
      createState('thermostat.stube.manustube', "");
      
      //Funktion für Umschaltung auf "manuell"
      function manstube ()
      {
          //Datenpunkte des Thermostates
          var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val;
          var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val;
      
          if(a)
          {
      
              setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", false);
              setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0"
              log("manuell");
          }
          else
          {
      
              setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0" 
              log("manuell");
          }
      }
      
      //Funktion für Umschaltung auf "automatik"
      function autstube ()
      {
          var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val;
          var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val;
      
          if(b)
          {
      
              setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", false);
              setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true);
              log("automatik");
          }
          else
          {
              setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true);
              log("automatik");
          }
      }
      
      //reagieren auf Betätigung der crtl State Button im VIS
      on({ID: 'javascript.0.thermostat.stube.autostube', "val": "0"}, function()
      {
          autstube();
      });
      
      on({ID: "javascript.0.thermostat.stube.manustube", "val": "1"}, function()
      {
          manstube();
      });
      
      

      ….hier das zweite:

      //Erzeuge Datenpunkte
      createState('thermostat.bad.autobad', "");
      createState('thermostat.bad.manubad', "");
      
      //Funktion für Umschaltung auf "manuell"
      function manbad ()
      {
          //Datenpunkte des Thermostates
          var a = getState("hm-rpc.0.MEQ0447885.4.AUTO_MODE").val;
          var b = getState("hm-rpc.0.MEQ0447885.4.MANU_MODE").val;
      
          if(a)
          {
      
              setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", false);
              setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0);//wichtig ist die "0"
              log("Manuell");
          }
          else
          {
      
              setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0);//wichtig ist die "0" 
              log("Manuell");
          }
      }
      
      //Funktion für Umschaltung auf "automatik"
      function autbad ()
      {
          var a = getState("hm-rpc.0.MEQ0447885.4.AUTO_MODE").val;
          var b = getState("hm-rpc.0.MEQ0447885.4.MANU_MODE").val;
      
          if(b)
          {
      
              setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", false);
              setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true);
              log("Automatik");
          }
          else
          {
              setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true);
              log("Automatik");
          }
      }
      
      //reagieren auf Betätigung der crtl State Button im VIS
      on({ID: 'javascript.0.thermostat.bad.autobad', "val": "0"}, function()
      {
          autbad();
      });
      
      on({ID: "javascript.0.thermostat.bad.manubad", "val": "1"}, function()
      {
          manbad();
      });
      
      

      671_f1.jpg
      671_f.jpg

      übersehe ich was??? Oder habe ich überhaupt keine Ahnung??? :roll:

      1 Reply Last reply Reply Quote 0
      • blauholsten
        blauholsten Developer last edited by

        Kann keiner helfen??? Ich verzweifle noch.

        mir ist absolut nicht klar warum beide Scripte durchlaufen werden! 😢

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

          @blauholsten:

              var a = getState("hm-rpc.0.MEQ0480054.2.AUTO_MODE").val;
              var b = getState("hm-rpc.0.MEQ0480054.2.MANU_MODE").val;
          ```` `  
          

          AUTO_MODE und MANU_MODE können nicht gelesen weden. Zur Abfrage des aktuellen Modus dient CONTROL_MODE (0 = AUTO-MODE, 1 = MANU-MODE, 2 = PARTY-MODE, 3 = BOSST-MODE).
          @blauholsten:

          setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);//wichtig ist die "0"
          ```` `  
          

          An MANU_MODE muss der Sollwert (in °C) übergeben werden.

          1 Reply Last reply Reply Quote 0
          • blauholsten
            blauholsten Developer last edited by

            Hallo paul53,

            das mit dem getState weiss ich, ging aber dennoch. Der Wert war bloß nicht bestätigt.

            Die Funktionalität war komplett gegeben.

            Zur Temperatur:

            Man kann auch jede andere beliebige Zahl eingeben, wichtig ist sie nicht als ""String einzugeben, denn das funktioniert nicht!

            Ich habe die letzten Stunden das Script wie folgt geändert, leider werden die unterschiedlichen "function" trotzdem ausgeführt! ICH VERSTEHE NICHT WARUM!

            createState('thermostate.stube.modus', "");
            createState('thermostate.bad.modus', "");
            
            function stube()
            {
                var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val;
            
                switch(a)
                {
                    case 0:
                        setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", false);
                        setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 0);
                        toLog(zeit + "->" + "Stube Manuell");
                        break;
                    case 1:
                        setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", false);
                        setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true);
                        toLog(zeit + "->" + "Stube Automatik");
                        break;
                }
            
            }
            
            //************************************************************************
            
            function bad()
            {
                var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val;
            
                switch(b)
                {
                    case 0:
                        setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", false);
                        setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 0);
                        toLog(zeit + "->" + "Bad Manuell");
                        break;
                    case 1:
                        setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", false);
                        setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true);
                        toLog(zeit + "->" + "Bad Automatik");
                        break;
                }
            
            }
            on({ID: "javascript.0.thermostate.stube.modus", "val":"0"}, function()
            {
                stube();
            });
            on({ID: "javascript.0.thermostate.stube.modus", "val":"1"}, function()
            {
                stube();
            });
            
            on({ID: "javascript.0.thermostate.bad.modus", "val":"0"}, function()
            {
                bad();
            });
            on({ID: "javascript.0.thermostate.bad.modus", "val":"1"}, function()
            {
                bad();
            });
            
            
            1 Reply Last reply Reply Quote 0
            • paul53
              paul53 last edited by

              Dass beide Thermostaten gleichzeitig reagieren, kann ich in dem Script nicht nachvollziehen.

              Allerdings setzt man immer nur einen Modus: Entweder AUTO oder MANU.

              Bezüglich des Auslösers sollte man die Funktion vereinfachen, denn "Standard" ist "change: ne" (bei Änderung).

                  createState('thermostate.stube.modus', "");
                  createState('thermostate.bad.modus', "");
              
                  function stube()
                  {
                      var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val;
              
                      switch(a)
                      {
                          case 0:
                              setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 20.0);  // Sollwert
                              toLog(zeit + "->" + "Stube Manuell");
                              break;
                          default:
                              setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true);
                              toLog(zeit + "->" + "Stube Automatik");
                      }
                  }
              
                  //************************************************************************
              
                  function bad()
                  {
                      var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val;
              
                      switch(b)
                      {
                          case 0:
                              setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 22.0);   // Sollwert
                              toLog(zeit + "->" + "Bad Manuell");
                              break;
                          default:
                              setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true);
                              toLog(zeit + "->" + "Bad Automatik");
                      }
                  }
              
                  on("javascript.0.thermostate.stube.modus", function() {
                      stube();
                  });
              
                  on("javascript.0.thermostate.bad.modus", function() {
                      bad();
                  });
              
              
              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Hast Du mal die Zeitstempel der beiden JS-Datenpunkte verglichen ?

                1 Reply Last reply Reply Quote 0
                • blauholsten
                  blauholsten Developer last edited by

                  @paul53:

                  Hast Du mal die Zeitstempel der beiden JS-Datenpunkte verglichen ? `

                  leider nein, habe vorhin alles neu gestartet und dann ging es komischerweise!

                  Deine Veränderungen in der Switch-Anweisung machen sinn! Danke hierfür.

                  Aber die Veränderung beim Aufruf (ON) klappt mit der "Standard" Variante nicht. Wenn ich von aussen den Modus wechsle, würde das im VIS nicht mehr passen.

                  Ich habe es jetzt so gelöst, und es funktioniert endlich alles wie es soll!

                  //*****************DATENPUNKTE*ERZEUGEN****************************************
                  createState('thermostate.stube.modus', "");
                  createState('thermostate.bad.modus', "");
                  createState('thermostate.küche.modus', "");
                  
                  //*********************STUBE**************************************************
                      function stube()
                      {
                          var a = getState("hm-rpc.0.MEQ0480054.2.CONTROL_MODE").val;
                  
                          switch(a)
                          {
                              case 0:
                                  setState("hm-rpc.0.MEQ0480054.2.MANU_MODE", 5.0); // Sollwert
                                  toLog(zeit + "->" + "Stube Manuell");
                                  break;
                              default:
                                  setState("hm-rpc.0.MEQ0480054.2.AUTO_MODE", true);
                                  toLog(zeit + "->" + "Stube Automatik");
                          }
                      }
                  //********************BAD*****************************************************
                      function bad()
                      {
                          var b = getState("hm-rpc.0.MEQ0447885.4.CONTROL_MODE").val;
                  
                          switch(b)
                          {
                              case 0:
                                  setState("hm-rpc.0.MEQ0447885.4.MANU_MODE", 5.0); // Sollwert
                                  toLog(zeit + "->" + "Bad Manuell");
                                  break;
                              default:
                                  setState("hm-rpc.0.MEQ0447885.4.AUTO_MODE", true);
                                  toLog(zeit + "->" + "Bad Automatik");
                          }
                      }
                  //********************KÜCHE****************************************************    
                      function kueche()
                      {
                          var c = getState("hm-rpc.0.MEQ0447899.4.CONTROL_MODE").val;
                  
                          switch(c)
                          {
                              case 0:
                                  setState("hm-rpc.0.MEQ0447899.4.MANU_MODE", 5.0); // Sollwert
                                  toLog(zeit + "->" + "Küche Manuell");
                                  break;
                              default:
                                  setState("hm-rpc.0.MEQ0447899.4.AUTO_MODE", true);
                                  toLog(zeit + "->" + "Küche Automatik");
                          }
                      }
                  //********************AUFRUFE**************************************************
                      on({id: "javascript.0.thermostate.stube.modus", "val": "stubem"}, function() 
                      {
                          stube();
                      });
                      on({id: "javascript.0.thermostate.stube.modus", "val": "stubea"}, function() 
                      {
                          stube();
                      });
                      on({id: "javascript.0.thermostate.bad.modus", "val": "badm"}, function() 
                      {
                          bad();
                      });
                      on({id: "javascript.0.thermostate.bad.modus", "val": "bada"}, function() 
                      {
                          bad();
                      });
                      on({id: "javascript.0.thermostate.küche.modus", "val": "küchea"}, function() 
                      {
                          kueche();
                      });
                      on({id: "javascript.0.thermostate.küche.modus", "val": "küchem"}, function() 
                      {
                          kueche();
                      });
                  

                  In dem Script könnte man in den Case Anweisung mit "case 3:" nun noch die Boost-Funktion der Thermostate realisieren.

                  Danke für die Hilfe.

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  705
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

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