Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. [gelöst]script fehler

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]script fehler

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

      Hallo zusammen,

      ich brauche hier mal wieder Eure Hilfe, habe mich jetzt in der 3 Woche mit scripten beschäftigt.

      Nun versuche ich wertabhängig 0 bis 100 einen Hintergrund von einem Widget (html) farblich anzupassen.

      Ich habe bereits den Adapter installiert und auch wie ich denke die notwendigen Einstellungen getätigt.

      Aus dem Forum hier habe ich mir ein Script geklaut und wollte dies auf meine Bedürfnisse anpassen, doch leider ohne Erfolg.

      Aktuell ist der Stand so das dass script unter Objekte angezeigt wird und auch anscheinend mir "true" aktiv ist.

      Leider ändert sich der Wert nicht den das script an mein Widget zurückgeben soll nicht. Ich habe meine Zisterne aktuell als Testobjekt im Script eingetragen.

      Das widget ändert bereits seine Farbe wenn ich unter Objekte den Wert händisch ändere, also bis dahin passt es anscheinend.

      Anbei mal das Sript was ich verwenden möchte, wo ist hier der Fehler?

      var idFarbe = "javascript.0.VIS.Jalousie";
      var idAktor = "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL";
      
      createState(idFarbe, 'white', {
          def: 'white',
          type: 'string',
          role: 'text'
      });
      
      on(idAktor, function (data) {
          if (data.state.val === 0) setState(idFarbe, 'green');
          else if (data.state.val > 0   && data.state.val <= 50)   setState(idFarbe, 'orange');
          else if (data.state.val > 50 && data.state.val <= 100) setState(idFarbe, 'red');
      });
      

      Vielen Dank schon mal im Voraus für die Hilfe!

      Gruß Jan

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

        Du hast hoffentlich das Skript nicht unter der Gruppe global angelegt ? Wenn ja, dann kopiere den Inhalt in ein Skript unter der Gruppe common und lösche das Skript unter global.

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

          Ja habe ich gemacht, was könnte es noch sein?

          Grüße

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

            @jan_xx:

            was könnte es noch sein? `
            Fehler sind keine zu sehen, falls die Datenpunkt-IDs korrekt sind (Groß-/Kleinschreibung beachten !). Um zu sehen, ob getriggert wird, bau mal ein Log ein:

            on(idAktor, function (data) {
                log('Aktorwert: ' + data.state.val);
                ...
            

            Der Aktorwert muss verändert werden, damit etwas passiert !

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

              Hallo Paul,

              es lag daran das sich der Wert nicht geändert hatte, ich habe mal einen Dimmer als Datenpunkt genommen und schon kamen

              auch Werte im LOG an. :roll: Gibt es eine Möglichkeit den Wert beim Starten des scriptes einmal abzufragen?

              Gruß Jan

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

                @jan_xx:

                Gibt es eine Möglichkeit den Wert beim Starten des scriptes einmal abzufragen? `
                Ja. Damit man die Abfrage nicht zweimal machen muss, packt man diese in eine Funktion.

                var idFarbe = "javascript.0.VIS.Jalousie";
                var idAktor = "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL";
                
                createState(idFarbe, 'white', {
                    def: 'white',
                    type: 'string',
                    role: 'text'
                });
                
                function toVis(level) {
                    var farbe = 'green';
                    if(level > 0) farbe = 'orange';
                    if(level > 50) farbe = 'red';
                    setState(idFarbe, farbe);
                }
                
                toVis(getState(idAktor).val); // Skriptstart
                
                on(idAktor, function(data) {
                    toVis(data.state.val);
                });
                
                1 Reply Last reply Reply Quote 0
                • J
                  jan_xx last edited by

                  das will jetzt noch nicht so richtig funktionieren, beim starten bleibt das Feld weis obwohl ich 33 als Wert habe.

                  Da muss ich heute Abend nochmal danach schauen…

                  Gruß Jan

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

                    Hallo Paul, ich habe Fehlermeldungen beim ausführen des Scriptes?

                    siehe Bild
                    5664_iob.jpg

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

                      @jan_xx:

                      Hallo Paul, ich habe Fehlermeldungen beim ausführen des Scriptes? `
                      Das kann ich nicht nachvollziehen. Habe es gerade selbst getestet ohne Fehler.

                      Es wird u.a. die Zeile 11, Position 27 angemeckert. Die Position gibt es in Zeile 11 nicht. Hat sich da etwas eingeschlichen ? Zeile 11:

                          var farbe = 'green';
                      

                      Oder stimmt die ID zu idAktor nicht (Zeile 2) ? Das würde die Fehlermeldung zu Zeile 19 erklären.

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

                        Ja Zeile 11 hatte ich dein LOG eingebaut um zu sehen was passiert…

                        log('Aktorwert: ' + data.state.val);

                        Hab die Zeile mal raus genommen, jetzt sind ide Fehler weg aber beim Starten wird der hintergrund auf ROT gesetzt obwohl 32 im Datenpunkt steht. Da sollte er doch eigentlich Orange sein?

                        Gruß Jan

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

                          @jan_xx:

                          log('Aktorwert: ' + data.state.val); `
                          Richtig wäre an der Stelle gewesen:

                          log('Aktorwert: ' + level);
                          

                          @jan_xx:

                          beim Starten wird der hintergrund auf ROT gesetzt obwohl 32 im Datenpunkt steht. `
                          Poste mal Dein komplettes Skript in Code tags, denn sonst kann der Fehler nicht lokalisiert werden.

                          Bei mir funktioniert es mit den richtigen Farbwerten.

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

                            anbei, ich habe eigentlich nichts geändert außer den Namen in der Kopf def.

                            var idFarbe = "javascript.0.VIS.hgfarbe";
                            var idAktor = "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL";
                            
                            createState(idFarbe, 'white', {
                                def: 'white',
                                type: 'string',
                                role: 'text'
                            });
                            
                            function toVis(level) {
                            
                                var farbe = 'red';
                                if(level > 30) farbe = 'orange';
                                if(level > 60) farbe = 'green';
                            
                                setState(idFarbe, farbe);
                            }
                            
                            toVis(getState(idAktor).val); // Skriptstart
                            
                            on(idAktor, function(data) {
                                toVis(data.state.val);
                            });
                            
                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 last edited by

                              Habe mir das gerade nach ioBroker kopiert: Bei mir liefert der Wert 32 die Farbe 'orange'.

                              var idFarbe = "javascript.1.Test.String"/*Test.String*/;
                              var idAktor = "javascript.1.Test.Analog"/*Test.Analog*/;
                              
                              function toVis(level) {
                              
                                  var farbe = 'red';
                                  if(level > 30) farbe = 'orange';
                                  if(level > 60) farbe = 'green';
                              
                                  setState(idFarbe, farbe);
                              }
                              
                              toVis(getState(idAktor).val); // Skriptstart
                              
                              on(idAktor, function(data) {
                                  toVis(data.state.val);
                              });
                              
                              
                              1 Reply Last reply Reply Quote 0
                              • J
                                jan_xx last edited by

                                Hm…tja was nun... ich habe mal beim Aufruf "background" den Namen vom Script eingetragen (hintergrundfarbe) hier kommt aber auch rot raus. vielleicht liegt es ja an dem Datenpunkt, ich werde nochmal den Dimmer zum testen eintragen.

                                Sonst habe ich jetzt keine weitere Idee... :shock:

                                Gruß Jan

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

                                  Wenn ich den Datenpunkt vom Dimmer nehme funktioniert es, waran kann das liegen?

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

                                    @jan_xx:

                                    waran kann das liegen? `
                                    Vielleicht liefert der Datenpunkt keinen Wert vom Typ Zahl (number). Um das zu testen, füge mal ein Log ein.

                                    function toVis(level) {
                                        log('Level: ' + level + ' ' + typeof level); 
                                        var farbe = 'red';
                                        if(level > 30) farbe = 'orange';
                                        if(level > 60) farbe = 'green';
                                        log('Farbe: ' + farbe);
                                        setState(idFarbe, farbe);
                                    }
                                    
                                    
                                    1 Reply Last reply Reply Quote 0
                                    • J
                                      jan_xx last edited by

                                      siehe LOG anbei…
                                      5664_iob.jpg

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

                                        > getState "hm-rpc.0.NEQ.." not found
                                        Der Datenpunkt existiert nicht oder der Befehl ist falsch geschrieben.

                                        Du hast hoffentlich nur die Funktion um die Logs ergänzt ?

                                        EDIT: Das Skript mit zusätzlichem Log:

                                        var idFarbe = "javascript.0.VIS.hgfarbe";
                                        var idAktor = "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL";
                                        
                                        createState(idFarbe, 'white', {
                                            def: 'white',
                                            type: 'string',
                                            role: 'text'
                                        });
                                        
                                        function toVis(level) {
                                            log('Level: ' + level + ' ' + typeof level);
                                            var farbe = 'red';
                                            if(level > 30) farbe = 'orange';
                                            if(level > 60) farbe = 'green';
                                            log('Farbe: ' + farbe);
                                            setState(idFarbe, farbe);
                                        }
                                        
                                        toVis(getState(idAktor).val); // Skriptstart
                                        
                                        on(idAktor, function(data) {
                                            toVis(data.state.val);
                                        });
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • J
                                          jan_xx last edited by

                                          ja nur die eine Zeile….

                                          var idFarbe = "javascript.0.VIS.hgfarbe";
                                          var idAktor = "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL";
                                          /*var idAktor = "hm-rpc.0.NEQ1101537.1.LEVEL";*/
                                          
                                          createState(idFarbe, 'white', {
                                              def: 'white',
                                              type: 'string',
                                              role: 'text'
                                          });
                                          
                                          function toVis(level) {
                                               log('Level: ' + level + ' ' + typeof level); 
                                          
                                              var farbe = 'red';
                                              if(level > 30) farbe = 'orange';
                                              if(level > 60) farbe = 'green';
                                          
                                              setState(idFarbe, farbe);
                                          }
                                          
                                          toVis(getState(idAktor).val); // Skriptstart
                                          
                                          on(idAktor, function(data) {
                                              toVis(data.state.val);
                                          });
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • paul53
                                            paul53 last edited by

                                            "not found" bedeutet, dass der Datenpunkt mit der ID "hm-rpc.0.NEQ1012485.1.FILLING_LEVEL" nicht existiert (nicht gefunden wurde).

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            825
                                            Online

                                            32.0k
                                            Users

                                            80.5k
                                            Topics

                                            1.3m
                                            Posts

                                            3
                                            37
                                            1760
                                            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