Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [Gelöst] Probleme beim Umrechnen einer Zahl

NEWS

  • Wartung am 15.11. – Forum ab 22:00 Uhr nicht erreichbar
    BluefoxB
    Bluefox
    11
    2
    227

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.7k

[Gelöst] Probleme beim Umrechnen einer Zahl

[Gelöst] Probleme beim Umrechnen einer Zahl

Scheduled Pinned Locked Moved Skripten / Logik
6 Posts 2 Posters 1.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mh84
    wrote on last edited by
    #1

    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
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      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');
      });
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • M Offline
        M Offline
        mh84
        wrote on last edited by
        #3

        @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
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @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" ?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Reply Last reply
          0
          • M Offline
            M Offline
            mh84
            wrote on last edited by
            #5

            @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
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              @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).

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              56

              Online

              32.4k

              Users

              81.3k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe