Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. Widget zum setzen mehrerer States

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Widget zum setzen mehrerer States

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

      Ändere mal deine setState-Statements auf

      if (feuchtesensor1 === true) {
          setState(feuchtesensor1, false, false);
      }
      if (feuchtesensor2 === true) {
          setState(feuchtesensor2, false, false);
      }
      if (feuchtesensor3 === true) {
          setState(feuchtesensor3, false, false);
      }
      if (feuchtesensor4 === true) {
          setState(feuchtesensor4, false, false);
      }
      if (feuchtesensor5 === true) {
          setState(feuchtesensor5, false, false);
      }
      

      Die Werte werden nur an die CCU übertragen, wenn ACK == false

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

        Schönes Projekt. Kannst du die Hardware (Akku?) und Software hier vorstellen (vielleicht in einem neuen Thread, wenn das aktuelle Problem gelöst ist).

        Ich möchte auch in Zukunft WeMos D1 Minis einsetzen.

        Gruß

        Pix

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

          Hi Pix!

          Ja, kein Problem kann ich machen! laufen alle mit Akku 18650!

          @nobody oder @Pix

          Leider klappt das mit dem zurücksetzen auf VIS mit dem Vorschlag von nobody nicht!

          Ich hab jetzt das Skript mal so abgeändert aber ohne Erfolg

          createState("Bodenfeuchtesensor", false, {
                            read: true, 
                            write: true, 
                            desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                            type: "boolean", 
                            def: false
          });
          
          on("javascript.0.Bodenfeuchtesensor", function(dp) {
              if(dp.state.val) { 
                  setState(dp.id, false);
          if ('hm-rega.0.28658' == "true") {
              setState('hm-rega.0.28658', false, false);
          }
          if ('hm-rega.0.28660' == "true") {
              setState('hm-rega.0.28660', false, false);
          }
          if ('hm-rega.0.28662' == "true") {
              setState('hm-rega.0.28662', false, false);
          }
          if ('hm-rega.0.28664' == "true") {
              setState('hm-rega.0.28664', false, false);
          }
          if ('hm-rega.0.28666' == "true") {
              setState('hm-rega.0.28666', false, false);
          }
              }
          });
          
          
          1 Reply Last reply Reply Quote 0
          • N
            nobody last edited by

            klar,

            im ersten Skript von dir wurden ja die Werte auch noch geholt und in Variablen geschrieben.

            'hm-rega.0.28662' == "true" ist immer false also wird nie was ausgeführt 😉

            du musst die Werte schon mit getState holen um sie zu vergleichen oder du lässt die Abfrage gleich weg und überschreibst einfach alles. Dabei dürfte in diesem Fall auch nichts kaputt gehen.

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

              Ist das so besser?

              createState("Bodenfeuchtesensor", false, {
                                read: true, 
                                write: true, 
                                desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                                type: "boolean", 
                                def: false
              });
              
              var idSensor1 = "hm-rega.0.28658";
              var idSensor2 = "hm-rega.0.28660";
              var idSensor3 = "hm-rega.0.28662";
              var idSensor4 = "hm-rega.0.28664";
              var idSensor5 = "hm-rega.0.28666";
              
              var feuchtesensor1 = getState(idSensor1).val;
              var feuchtesensor2 = getState(idSensor2).val;
              var feuchtesensor3 = getState(idSensor3).val;
              var feuchtesensor4 = getState(idSensor4).val;
              var feuchtesensor5 = getState(idSensor5).val;
              
              on("javascript.0.Bodenfeuchtesensor", function(dp) {
                  if(dp.state.val) { 
                      setState(dp.id, false);
              
              if (feuchtesensor1 === true) {
                  setState(feuchtesensor1, false, false);
              }
              if (feuchtesensor2 === true) {
                  setState(feuchtesensor2, false, false);
              }
              if (feuchtesensor3 === true) {
                  setState(feuchtesensor3, false, false);
              }
              if (feuchtesensor4 === true) {
                  setState(feuchtesensor4, false, false);
              }
              if (feuchtesensor5 === true) {
                  setState(feuchtesensor5, false, false);
              }
                  }
              });
              
              
              1 Reply Last reply Reply Quote 0
              • N
                nobody last edited by

                geht das denn jetzt?

                Der Operator === prüft auch den Datentypen. Dies klappt nur, wenn dieser bei der Übertragung von der CCU auch als Boolean übertragen wird.

                Wenn du die Werte für die ids außerhalb des on-Statements holst, erfolgt dies einmal zum Start des Javascript-Adapters und danach nie wieder. Somit ergibt dies keinen Sinn.

                Versuche mal einfach das:

                createState("Bodenfeuchtesensor", false, {
                                  read: true, 
                                  write: true, 
                                  desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                                  type: "boolean", 
                                  def: false
                });
                
                var idSensor1 = "hm-rega.0.28658";
                var idSensor2 = "hm-rega.0.28660";
                var idSensor3 = "hm-rega.0.28662";
                var idSensor4 = "hm-rega.0.28664";
                var idSensor5 = "hm-rega.0.28666";
                
                on("javascript.0.Bodenfeuchtesensor", function(dp) {
                    if(dp.state.val) { 
                       setState(dp.id, false);
                       setState(idSensor1 , false, false);
                       setState(idSensor2 , false, false);
                       setState(idSensor3 , false, false);
                       setState(idSensor4 , false, false);
                       setState(idSensor5 , false, false);
                    }
                });
                
                
                1 Reply Last reply Reply Quote 0
                • P
                  PrinzEisenherz1 last edited by

                  Nö, klappt leider nicht!

                  Hab es auch ohne if-Abfrage probiert. Auch kein Erfolg

                  createState("Bodenfeuchtesensor", false, {
                                    read: true, 
                                    write: true, 
                                    desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                                    type: "boolean", 
                                    def: false
                  });
                  
                  var idSensor1 = "hm-rega.0.28658";
                  var idSensor2 = "hm-rega.0.28660";
                  var idSensor3 = "hm-rega.0.28662";
                  var idSensor4 = "hm-rega.0.28664";
                  var idSensor5 = "hm-rega.0.28666";
                  
                  var feuchtesensor1 = getState(idSensor1).val;
                  var feuchtesensor2 = getState(idSensor2).val;
                  var feuchtesensor3 = getState(idSensor3).val;
                  var feuchtesensor4 = getState(idSensor4).val;
                  var feuchtesensor5 = getState(idSensor5).val;
                  
                  on("javascript.0.Bodenfeuchtesensor", function(dp) {
                      if(dp.state.val) { 
                          setState(dp.id, false);
                      setState(feuchtesensor1, false, false);
                      setState(feuchtesensor2, false, false);
                      setState(feuchtesensor3, false, false);
                      setState(feuchtesensor4, false, false);
                      setState(feuchtesensor5, false, false);
                      }
                  });
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • P
                    pix last edited by

                    Die Variablen feuchtesensor1-5 werden nur beim Skriptstart mit den Werten gefüllt. Sie sollen aber bei Tastendruck (bzw Bodenfeuchtesensor ist wahr) abgefragt werden.

                    Dazu einige Abkürzungen und bei CreateState ist def dazu da, den Default-Wert zu setzen, dann kannst du ihn vor der geschweifetn Klammer weglassen.

                    createState("Bodenfeuchtesensor", {
                                      read: true, 
                                      write: true, 
                                      desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                                      type: "boolean", 
                                      def: false
                    });
                    
                    var idSensor1 = "hm-rega.0.28658";
                    var idSensor2 = "hm-rega.0.28660";
                    var idSensor3 = "hm-rega.0.28662";
                    var idSensor4 = "hm-rega.0.28664";
                    var idSensor5 = "hm-rega.0.28666";
                    
                    on("javascript.0.Bodenfeuchtesensor", function(dp) {
                    
                        var feuchtesensor1 = getState(idSensor1).val;
                        var feuchtesensor2 = getState(idSensor2).val;
                        var feuchtesensor3 = getState(idSensor3).val;
                        var feuchtesensor4 = getState(idSensor4).val;
                        var feuchtesensor5 = getState(idSensor5).val;
                    
                        if(dp.state.val) { 
                            setState(dp.id, false);
                            if (feuchtesensor1) setState(feuchtesensor1, false, false);
                            if (feuchtesensor2) setState(feuchtesensor2, false, false);
                            if (feuchtesensor3) setState(feuchtesensor3, false, false);
                            if (feuchtesensor4) setState(feuchtesensor4, false, false);
                            if (feuchtesensor5) setState(feuchtesensor5, false, false);
                        }
                    });
                    
                    

                    Gruß

                    Pix

                    1 Reply Last reply Reply Quote 0
                    • N
                      nobody last edited by

                      @PrinzEisenherz1:

                      var idSensor1 = "hm-rega.0.28658";
                      var idSensor2 = "hm-rega.0.28660";
                      var idSensor3 = "hm-rega.0.28662";
                      var idSensor4 = "hm-rega.0.28664";
                      var idSensor5 = "hm-rega.0.28666";
                      
                      var feuchtesensor1 = getState(idSensor1).val;
                      var feuchtesensor2 = getState(idSensor2).val;
                      var feuchtesensor3 = getState(idSensor3).val;
                      var feuchtesensor4 = getState(idSensor4).val;
                      var feuchtesensor5 = getState(idSensor5).val;
                      
                      ...
                          setState(feuchtesensor1, false, false);
                          setState(feuchtesensor2, false, false);
                          setState(feuchtesensor3, false, false);
                          setState(feuchtesensor4, false, false);
                          setState(feuchtesensor5, false, false);
                      
                      ```` `  
                      

                      setState(feuchtesensor2, false, false); kann auch nicht klappen weil feuchtesensor2 == true ist und nicht die id enthält.

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

                        Au man :oops: :oops: :oops: :oops:
                        @nobody:

                        setState(feuchtesensor2, false, false); kann auch nicht klappen weil feuchtesensor2 == true ist und nicht die id enthält. `

                        createState("Bodenfeuchtesensor", {
                                          read: true, 
                                          write: true, 
                                          desc: "Zurücksetzen der Bodenfeuchtesensoren", 
                                          type: "boolean", 
                                          def: false
                        });
                        
                        var idSensor1 = "hm-rega.0.28658";
                        var idSensor2 = "hm-rega.0.28660";
                        var idSensor3 = "hm-rega.0.28662";
                        var idSensor4 = "hm-rega.0.28664";
                        var idSensor5 = "hm-rega.0.28666";
                        
                        on("javascript.0.Bodenfeuchtesensor", function(dp) {
                        
                            var feuchtesensor1 = getState(idSensor1).val;
                            var feuchtesensor2 = getState(idSensor2).val;
                            var feuchtesensor3 = getState(idSensor3).val;
                            var feuchtesensor4 = getState(idSensor4).val;
                            var feuchtesensor5 = getState(idSensor5).val;
                        
                            if(dp.state.val) { 
                                setState(dp.id, false);
                        
                                if (feuchtesensor1) setState(idSensor1, false, false);
                                if (feuchtesensor2) setState(idSensor2, false, false);
                                if (feuchtesensor3) setState(idSensor3, false, false);
                                if (feuchtesensor4) setState(idSensor4, false, false);
                                if (feuchtesensor5) setState(idSensor5, false, false);
                            }
                        });
                        

                        :lol:

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

                          Perfekt!

                          Jetzt geht es. Tausend Dank euch beiden!

                          Einen schönen noch euch beiden.

                          Gruß

                          Johnny

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          649
                          Online

                          32.0k
                          Users

                          80.5k
                          Topics

                          1.3m
                          Posts

                          3
                          12
                          1087
                          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