Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Script in einem Widget mit HTTP GET Befehl

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Script in einem Widget mit HTTP GET Befehl

    This topic has been deleted. Only users with topic management privileges can see it.
    • hg6806
      hg6806 Most Active last edited by

      Hat leider noch nicht geklappt.

      Bin wie folgt vorgegangen.

      Habe ein neues Javascript erstellt (nicht im Widget) sondern unter Admin, Scripte

      Dort Enginetyp Javascript/js ausgewählt.

      Script ganz rechts gestartet.

      Widget mit dem Script ID erstellt.

      Beim Klicken passiert nichts. Das Script geht danach wieder auf Deaktiviert.

      Zudem meldet der Script Editor in der Zeile 13: "Don't make functions with a loop. Missing semicolon.

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

        @hg6806:

        Widget mit dem Script ID erstellt.

        Beim Klicken passiert nichts. Das Script geht danach wieder auf Deaktiviert. `

        Hi, bin jetzt leider nicht mehr am Rechner. Aber du darfst nicht als ID das Script benutzen. Du musst dort den Datenpunkt den du mit createState erstellt hast eintragen.

        1 Reply Last reply Reply Quote 0
        • hg6806
          hg6806 Most Active last edited by

          OK, mit dem kreierten Datenpunkt wird der Befehl immerhin schon 1x ausgeführt statt 2x.

          Habe nach wie vor noch die Fehlermeldung, die ich oben schon genannte hatte und jetzt folgende im Log:

          ReferenceError: Datenpunkt_VIS is not defined at send (script.js.Lautstärke_hoch:15:19) at Object. (script.js.Lautstärke_hoch:22:7) at Object.subs.callback

          (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:1324:48) at /opt/iobroker/node_modules/iobroker.javascript/javascript.js:584:48 at getObjectEnums

          (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:3185:45) at checkPatterns (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:580:17) at Object.utils.adapter.stateChange

          (/opt/iobroker/node_modules/iobroker.javascript/javascript.js:252:17) at Object.that.states.States.change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:2226:37) at Socket.

          (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInMemClient.js:45:30) at Socket.Emitter.emit (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)

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

            Hi,

            Bin komme leider noch nicht an den PC, aber bei:

             setState ('Datenpunkt_VIS', false)
            

            Muss natürlich auch dein erstellter Datenpunkt eingetragen werden.

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

              Besser wäre dann aber vermutlich diese Schreibweise….

              var befehl = ""; //hier deine url eingeben
              var request = require('request');
              var counter = 2; //hier die Anzahl der Wiederholungen einstellen
              var idWidget = ""; //hier die ID deine erstellen Datenpunktes eintragen
              createState('Datenpunkt_VIS', false);
              
              function send(){
              
                 for(var i = 0; i < counter; i++){
                    request(befehl, function(error, response){
                        if(err){
                         log(error, 'error');
                        }
                    })
                    if(i+1 === counter){
                       setState(idWidget, false)
                    }
                 }
              }
              
              on(idWidget, function(obj){
                 if(obj.newState.val){
                    send();
                 }
              });
              
              

              Dann brauchst du nur oben am Skript Anfang die Eintragungen zu tätigen.

              1 Reply Last reply Reply Quote 0
              • hg6806
                hg6806 Most Active last edited by

                Das Script sieht nun wie folgt aus:

                var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben
                var request = require('request');
                var counter = 2; //hier die Anzahl der Wiederholungen einstellen
                var idWidget = "w00205"; //hier die ID deine erstellen Datenpunktes eintragen
                createState('Lautstärke_mehrfach_erhoehen', false);
                
                function send(){
                
                   for(var i = 0; i < counter; i++){
                      request(befehl, function(error, response){
                          if(err){
                           log(error, 'error');
                          }
                      })
                      if(i+1 === counter){
                         setState(idWidget, false)
                      }
                   }
                }
                
                on(idWidget, function(obj){
                   if(obj.newState.val){
                      send();
                   }
                });
                
                

                Wenn ich auf das Widget klicke passiert nichts, aber auch im Log keine Fehlermeldung.

                Aber noch immer die Warnings: "Don't make funktions with a loop" und "missing semikolon

                War das mit der Widget ID ok?

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

                  Schau mal in dem Skript oben rechts steht ID einfügen. Dort suchst du den Datenpunkt den du erstellt hast. Den findest du unter deiner JavaScript Instanz. Der sollte bei dir vermutlich sowas wie "javascript.0.Lautstärke_mehrfach_erhöhen" sein.

                  Da klickst du dann auf einfügen.

                  1 Reply Last reply Reply Quote 0
                  • hg6806
                    hg6806 Most Active last edited by

                    Passiert wieder nichts, keine Fehlermeldung im Log, außer dem Warning im Script.

                    var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben
                    var request = require('request');
                    var counter = 2; //hier die Anzahl der Wiederholungen einstellen
                    var idWidget = "javascript.0.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen
                    createState('Lautstaerke_mehrfach_erhoehen', false);
                    
                    function send(){
                    
                       for(var i = 0; i < counter; i++){
                          request(befehl, function(error, response){
                              if(err){
                               log(error, 'error');
                              }
                          })
                          if(i+1 === counter){
                             setState(idWidget, false)
                          }
                       }
                    }
                    
                    on(idWidget, function(obj){
                       if(obj.newState.val){
                          send();
                       }
                    });
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • blauholsten
                      blauholsten Developer last edited by

                      @hg6806:

                      Passiert wieder nichts, keine Fehlermeldung im Log, außer dem Warning im Script.

                      var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben
                      var request = require('request');
                      var counter = 2; //hier die Anzahl der Wiederholungen einstellen
                      var idWidget = "javascript.0.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen
                      createState('Lautstaerke_mehrfach_erhoehen', false);
                      
                      function send(){
                         
                         for(var i = 0; i < counter; i++){
                            request(befehl, function(error, response){
                                if(err){
                                 log(error, 'error');
                                }
                            })
                            if(i+1 === counter){
                               setState(idWidget, false)
                            }
                         }
                      }
                      
                      on(idWidget, function(obj){
                         if(obj.newState.val){
                            send();
                         }
                      });
                      
                      ```` `  
                      

                      Ich probiere es wenn ich zuhause bin.

                      1 Reply Last reply Reply Quote 0
                      • hg6806
                        hg6806 Most Active last edited by

                        OK, danke!

                        Ich nehme übrigens das hqwidgets - on/off und trage bei Objekt ID den Datenpunkt ein unter "javascript.0" und nicht den von scriptEnabled.

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

                          @hg6806:

                          OK, danke!

                          Ich nehme übrigens das hqwidgets - on/off und trage bei Objekt ID den Datenpunkt ein unter "javascript.0" und nicht den von scriptEnabled. `
                          So habe es bei mir kurz ausprobiert. Allerdings ohne request! Bei mir haut das soweit hin. Ich habe den Code nochmal etwas abgeändert und zum testen ob dein Datenpunkt im VIS richtig konfiguriert ist, ein Log eingefügt.

                          Das mit der Meldung dürfte nur eine Warnung sein, lasse mich aber gerne berichtigen!

                          var befehl = "http://192.168.178.20/goform/formiPhoneAppDirect.xml?MVUP"; //hier deine url eingeben
                          var request = require('request');
                          var counter = 2; //hier die Anzahl der Wiederholungen einstellen
                          var idWidget = "javascript.2.Lautstaerke_mehrfach_erhoehen"; //hier die ID deine erstellen Datenpunktes eintragen
                          createState('Lautstaerke_mehrfach_erhoehen', false);
                          
                          function send(){
                             for(var i = 0; i < counter; i++){
                                request.get(befehl).on('error', function(error){
                                    if(error){log(error, 'error');} })
                                if(i+1 === counter){setState(idWidget, false);}
                             }
                          }
                          
                          on(idWidget, function(obj){
                              log("Tastendruck erkannt"); //Nur zum Test ob deine Zuordnung stimmt
                             if(obj.newState.val){
                                send();
                             }
                          });
                          
                          1 Reply Last reply Reply Quote 0
                          • hg6806
                            hg6806 Most Active last edited by

                            Jetzt geht es halbwegs.

                            Sind immer noch 2 Warnings drin.

                            Wenn ich 2 Schleifendurchgänge einstelle, wird nur um 0,5dB erhöht, bei 4 Durchgängen wird um 1dB erhöht. Irgendwas stimmt da mit der Schleife wohl noch nicht. Mir reicht es aber so, ich werde es einfach so einstellen, dass sich pro Tastendruck um 1,5dB erhöht.

                            Danke nochmals!

                            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

                            2
                            14
                            2966
                            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