Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]Problem bei Übergabe per Script !Anfänger!

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]Problem bei Übergabe per Script !Anfänger!

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

      Hallo Leute,

      ich versuche mich gerade ein bischen im Script schreiben, aber leider klappt es nicht so wie ich es mir vorgestellt habe.

      Vorab was geplant ist:
      Ich übergebe an einen Datenpunkt (javascript.0.Wohnzimmer.Couch_Links) z.B. den Wert: 201006500

      Nun soll das Script daraus die letzten 4 Ziffern (im Beispiel 6500) in eine Variable (ct) packen und die Ziffern 3-5 (im Beispiel 100) in eine weitere Variable (level).
      Das funktioniert auch so soweit.

      Dann übergebe ich die Variablen an 2 States einer Lampe die ich über deconz eingebunden habe.
      Das scheint auch zu funktionieren, aber nur augenscheinlich. Da nämlich, wenn der Wert level sich ändert sollte sich auch der Wert bri ändern.
      Wenn ich den level Wert händisch ändere klappt es, wenn ich es aus dem Script heraus mache nicht. Leider weiss ich nicht warum!

      Hier das Script:

      
      on({id: 'javascript.0.Wohnzimmer.Couch_Links', change: "ne"}, function (obj){
         var value = obj.state.val;
         var oldvalue = obj.oldState.val;
         var Lichtwert = String(getState("javascript.0.Wohnzimmer.Couch_Links").val);
         var ct = Math.round(1000000/Lichtwert.substr(5));
         var Helligkeit = Lichtwert.substr(2,3);
         
      
         if (Helligkeit === 0)
         {
             setState("deconz.0.Lights.4.on",false);
         }
         else
         {
             setState("deconz.0.Lights.4.level",Helligkeit);
             setState("deconz.0.Lights.4.ct",ct);
             setState("deconz.0.Lights.4.on",true);
         }
      });
      
      F 1 Reply Last reply Reply Quote 0
      • F
        fastfoot @Torsten_MG last edited by

        @torsten_mg Deine Variable Helligkeit ist ein String, evtl. musst du den noch in eine Zahl umwandeln

        paul53 T 2 Replies Last reply Reply Quote 0
        • paul53
          paul53 @fastfoot last edited by paul53

          @fastfoot sagte: Deine Variable Helligkeit ist ein String

          ... ebenfalls die Variable Lichtwert.

             var ct = Math.round(1000000/parseInt(Lichtwert.substr(5)));
             var Helligkeit = parseInt(Lichtwert.substr(2,3));
          
          F 1 Reply Last reply Reply Quote 0
          • F
            fastfoot @paul53 last edited by

            @paul53 sagte in Problem bei Übergabe per Script !Anfänger!:

            ... ebenfalls die Variable Lichtwert.

            die muss ja ein String sein. Für die Berechnung von ct braucht es mE die Konvertierung mit parseInt() nicht. Eine Lösung hatte ich nicht angegeben weil ich irgendwie denke dass der TE Blockly verwendet 🙂

            paul53 T 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @fastfoot last edited by paul53

              @fastfoot sagte: Für die Berechnung von ct braucht es mE die Konvertierung mit parseInt() nicht.

              Stimmt, Javascript macht eine implizite Typwandlung nach Zahl.

              1 Reply Last reply Reply Quote 0
              • T
                Torsten_MG @fastfoot last edited by

                @fastfoot

                Danke, das wars!!

                Habe die Zeile

                var Helligkeit = parseInt(Lichtwert.substr(2,3));
                

                angepasst, jetzt klappts

                1 Reply Last reply Reply Quote 0
                • T
                  Torsten_MG @fastfoot last edited by

                  @fastfoot sagte in Problem bei Übergabe per Script !Anfänger!:

                  @paul53 sagte in Problem bei Übergabe per Script !Anfänger!:

                  ... ebenfalls die Variable Lichtwert.

                  die muss ja ein String sein. Für die Berechnung von ct braucht es mE die Konvertierung mit parseInt() nicht. Eine Lösung hatte ich nicht angegeben weil ich irgendwie denke dass der TE Blockly verwendet 🙂

                  Nein, kein Blockly!
                  Javascript. Bin aber noch im Anfängerstadium!

                  paul53 F 2 Replies Last reply Reply Quote 0
                  • paul53
                    paul53 @Torsten_MG last edited by

                    @torsten_mg sagte: Nein, kein Blockly!

                    Du hattest aber mit Blockly begonnen, wie man an den Zeilen 2 bis 4 sieht.

                    1 Reply Last reply Reply Quote 0
                    • F
                      fastfoot @Torsten_MG last edited by

                      @torsten_mg sagte in Problem bei Übergabe per Script !Anfänger!:

                      Nein, kein Blockly!
                      Javascript. Bin aber noch im Anfängerstadium!

                      das sieht man, aber ich habe auch mal so angefangen. Noch ein Tipp: Du musst den Wert nicht noch einmal holen, da er bereits im Trigger mit übergeben wird.

                      • schmeiss Zeile 3 und 4 weg
                      • Ändere Zeile 5 zu var Lichtwert = String(obj.state.val);

                      Ändere bitte noch deinen Betreff im ersten Beitrag mit [Gelöst]....

                      A 1 Reply Last reply Reply Quote 0
                      • A
                        Ahnungsbefreit @fastfoot last edited by

                        @fastfoot @paul53 ...wo Ihr gerade über JS Optimierung redet: Bin ich eigentlich der Einzige, immer mit "use strict" arbeitet und VAR vermeidet und lieber mit LET und CONST arbeitet?

                        paul53 F 2 Replies Last reply Reply Quote 0
                        • paul53
                          paul53 @Ahnungsbefreit last edited by

                          @ahnungsbefreit sagte: Bin ich eigentlich der Einzige, immer mit "use strict" arbeitet und VAR vermeidet und lieber mit LET und CONST arbeitet?

                          Nein.

                          A 1 Reply Last reply Reply Quote 0
                          • A
                            Ahnungsbefreit @paul53 last edited by

                            @paul53 Danke für die ausführliche Antwort 🙂

                            Was würdest Du als der Script-Guru hier im Forum denn empfehlen?

                            1 Reply Last reply Reply Quote 0
                            • F
                              fastfoot @Ahnungsbefreit last edited by

                              @ahnungsbefreit sagte in [gelöst]Problem bei Übergabe per Script !Anfänger!:

                              @fastfoot @paul53 ...wo Ihr gerade über JS Optimierung redet: Bin ich eigentlich der Einzige, immer mit "use strict" arbeitet und VAR vermeidet und lieber mit LET und CONST arbeitet?

                              'use strict' sehe ich hier ganz selten, habe auch noch nicht ganz verstanden wozu es gut ist und verwende es fast nie. schäm....

                              var meide ich gewöhnlich wie der Teufel das Weihwasser, allerdings habe ich mir mit JS angewöhnt meine Variablen auch oft mitten im Code zu deklarieren anstatt zu Beginn einer Funktion. Da streite ich mich immer noch mit mir selbst ob das gut oder böse ist 😰

                              A paul53 2 Replies Last reply Reply Quote 0
                              • A
                                Ahnungsbefreit @fastfoot last edited by Ahnungsbefreit

                                @fastfoot Naja es zwingt Dich, Variablen immer vor der Benutzung zu deklarieren und das hilft ungemein, um Tippfehler zu finden. Und bei const/let ist der Scope (Gültigkeitsbereich) auf den Block limitiert, in der sie deklariert werden und ist daher gerade für Variablen hilfreich, die Du nur in einem kleinen Teilbereich wie z.B. innerhalb einer Schleife oder eines if...else... Statements brauchst. Mit Var ist der Scope nicht beschränkt.

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

                                  @fastfoot sagte: 'use strict' sehe ich hier ganz selten... und verwende es fast nie.

                                  Geht mir ebenfalls so, wobei "use strict" hilft, Fehler nicht erst zur Laufzeit des Skripts zu erkennen.
                                  Wenn möglich, verwende ich const. Für lokale Variablen verwende ich let, für globale Variablen var, wobei es an der Stelle eher eine Kommentarfunktion, als ein Unterschied zu let ist.

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

                                    @ahnungsbefreit sagte: Mit Var ist der Scope nicht beschränkt.

                                    Das stimmt so nicht: Eine innerhalb einer Funktion mit var deklarierte Variable ist nur innerhalb der Funktion gültig.
                                    Wichtiger Unterschied zu const / let: Die Deklaration mit var kann auch nach Verwendung der Variablen erfolgen, was man aber generell vermeiden sollte.

                                    A 1 Reply Last reply Reply Quote 0
                                    • A
                                      Ahnungsbefreit @paul53 last edited by

                                      @paul53 said in [gelöst]Problem bei Übergabe per Script !Anfänger!:

                                      Eine innerhalb einer Funktion mit var deklarierte Variable ist nur innerhalb der Funktion gültig.

                                      Ja, das schon. Aber Beschränkung der Gültigkeit auf untergeordnete Blöcke wie Schleifen oder sonst alles, was in {Klammern} steht, geht mit var überhaupt nicht.

                                      Ok, um diese Off-Topic Diskussion nicht zu lange werden zu lassen: Danke für Eure Antworten, Ihr habt mich eigentlich in meiner Haltung bestätigt, weiterhin 'use strict' zu verwenden und 'var' zu vermeiden.

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      821
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      17
                                      337
                                      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