Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Gelöst] Probleme beim Umrechnen einer Zahl

    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] Probleme beim Umrechnen einer Zahl

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

      Guten Abend zusammen,

      ich bin neu hier im Forum und auch neu was den ioBroker bzw. das Scripten in Java angeht.

      Bei meinem Vorhaben geht es darum eine per SNMP ausgelesene Temperatur welche im Format (2560) geliefert wird in das Format 25.60 umzuwandeln.

      Mir ist schon klar, dass man die Zahl einfach durch 100 Teilen muss, aber das funktioniert ja auch schon mal so weit.

      Ich habe vor, jedesmal wenn per SNMP eine andere Temperatur geliefert wird soll diese umgerechnet werden und in ein neues Feld geschrieben werden.

      Wenn ich mein Script ohne die "on" Funktion ausführe dann geht alles soweit. Nur mit dem Automatismus will es nicht funktionieren.

      Hat von euch jemand eine Idee?

      Bitte nicht über meinen Code lachen … hab leider bis jetzt 0 Ahnung davon.

      var Temp = getState("snmp.0.192_168.178.119.Temperatur").val;
      var Ergebnis;
      Ergebnis = Temp / 100;
      
      on({id: "snmp.0.192_168_178_119.Temperatur", change: 'ne'}, function (data) {
          setState("javascript.0.Temperatur",parseFloat(Ergebnis));
          log('Temperatur wurde geändert');
      
      });
      
      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Der erste Teil

        var Temp = getState("snmp.0.192_168.178.119.Temperatur").val;
        var Ergebnis;
        Ergebnis = Temp / 100;
        
        

        wird nur einmal bei Skriptstart ausgeführt.

        An die anonyme Callback-Funktion von on() wird ein Parameter (data) übergeben, der nirgends ausgewertet wird.

        So kann das Skript aussehen:

        const idTemp = "snmp.0.192_168.178.119.Temperatur"; // Datenpunkt-ID ist eine Konstante
        
        var Temp = getState(idTemp).val;  // Deklaration globale Variable und Initialisierung für Skriptstart
        
        function calcTemp() {  // Umrechnen und in Datenpunkt schreiben
           setState("javascript.0.Temperatur", parseFloat(Temp) / 100, true); // parseFloat nur erforderlich, wenn Temp ein String ist
        }
        
        calcTemp();  // Aufruf bei Skriptstart
        
        on(idTemp, function(data) {  // Triggern bei Wertänderung und Übergabe des Datenpunkt-Objektes an lokale Variable data
           Temp = data.state.val;  // Wert des auslösenden Datenpunktes
           calcTemp();
           log('Temperatur wurde geändert');
        });
        
        
        1 Reply Last reply Reply Quote 0
        • M
          mh84 last edited by

          @paul53:

          Der erste Teil

          var Temp = getState("snmp.0.192_168.178.119.Temperatur").val;
          var Ergebnis;
          Ergebnis = Temp / 100;
          
          

          wird nur einmal bei Skriptstart ausgeführt.

          An die anonyme Callback-Funktion von on() wird ein Parameter (data) übergeben, der nirgends ausgewertet wird.

          So kann das Skript aussehen:

          const idTemp = "snmp.0.192_168.178.119.Temperatur"; // Datenpunkt-ID ist eine Konstante
          
          var Temp = getState(idTemp).val;  // Deklaration globale Variable und Initialisierung für Skriptstart
          
          function calcTemp() {  // Umrechnen und in Datenpunkt schreiben
             setState("javascript.0.Temperatur", parseFloat(Temp) / 100, true); // parseFloat nur erforderlich, wenn Temp ein String ist
          }
          
          calcTemp();  // Aufruf bei Skriptstart
          
          on(idTemp, function(data) {  // Triggern bei Wertänderung und Übergabe des Datenpunkt-Objektes an lokale Variable data
             Temp = data.state.val;  // Wert des auslösenden Datenpunktes
             calcTemp();
             log('Temperatur wurde geändert');
          });
          
          ```` `  
          

          Vielen Dank für die schnelle Antwort 🙂

          Leider bekomme ich auch wieder nur den Eintrag im Log angezeigt. Im Feld "javascript.0.Temperatur" wird leider nichts eingetragen.

          Außerdem zeigt das Log diese Meldung an: 06:59:25.018 [warn] javascript.0 at script.js.common.calcTemp:3:12

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

            @mh84:

            Im Feld "javascript.0.Temperatur" wird leider nichts eingetragen. `
            Was meinst Du mit Feld ?

            "javascript.0.Temperatur" muss ein existierender Datenpunkt vom Typ "Zahl" sein, der z.B. im Reiter "Objekte" http://www.iobroker.net/docu/?page_id=5495&lang=de#6hinzufuegen wurde.
            @mh84:

            Außerdem zeigt das Log diese Meldung an: 06:59:25.018 [warn] javascript.0 at script.js.common.calcTemp:3:12 `
            Dann existiert der Datenpunkt "snmp.0.192_168.178.119.Temperatur" nicht. Vermutlich ist die richtige ID "snmp.0.192_168_178_119.Temperatur" ?

            1 Reply Last reply Reply Quote 0
            • M
              mh84 last edited by

              @paul53:

              @mh84:

              Im Feld "javascript.0.Temperatur" wird leider nichts eingetragen. `
              Was meinst Du mit Feld ?

              "javascript.0.Temperatur" muss ein existierender Datenpunkt vom Typ "Zahl" sein, der z.B. im Reiter "Objekte" http://www.iobroker.net/docu/?page_id=5495&lang=de#6hinzufuegen wurde.
              @mh84:

              Außerdem zeigt das Log diese Meldung an: 06:59:25.018 [warn] javascript.0 at script.js.common.calcTemp:3:12 Dann existiert der Datenpunkt "snmp.0.192_168.178.119.Temperatur" nicht. Vermutlich ist die richtige ID "snmp.0.192_168_178_119.Temperatur" ?

              Du hattest Recht. Da hat sich wohl ein Tippfehler eingeschlichen 🙂 Es funktioniert nun ohne Probleme.

              Vielen Dank für deine Hilfe.

              Wenn ich noch andere Temperaturen so umrechnen will, mache ich das dann auch in diesem Script oder sollte ich für jede Umrechnung ein eigenes Script verwenden?

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

                @mh84:

                Wenn ich noch andere Temperaturen so umrechnen will, mache ich das dann auch in diesem Script oder sollte ich für jede Umrechnung ein eigenes Script verwenden? `
                Das ist Geschmackssache. Wenn man mehrere kleine Skripte verwendet, muss man sich weniger Gedanken um Variablennamen machen, denn man kann die gleichen Namen wieder verwenden (Copy & paste). Es müssen häufig nur die Datenpunkt-IDs geändert werden, weshalb ich sie am Skriptanfang deklariere und zuweise. Beispiel:

                const idSrc = "snmp.0.192_168_178_119.Temperatur";
                const idDst = "javascript.0.Temperatur";
                

                Markiere bitte das Thema als gelöst (im Betreff des ersten Beitrags).

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

                Support us

                ioBroker
                Community Adapters
                Donate

                423
                Online

                31.9k
                Users

                80.2k
                Topics

                1.3m
                Posts

                2
                6
                1267
                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