Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. setState schreibt Wert nicht

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    139

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

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

setState schreibt Wert nicht

Geplant Angeheftet Gesperrt Verschoben JavaScript
5 Beiträge 3 Kommentatoren 311 Aufrufe 2 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • S Offline
    S Offline
    Stephan 4
    schrieb am zuletzt editiert von
    #1

    Hallo.

    Ich hab mir ein einfaches Skript gefriemelt. Es ist nicht mein erstes mal JS. Mit den IObroker spezifischen schon.
    Es geht um einen einfachen Mittelwert.

    var target = 'Temperaturen.InnenMittelwert';
    
    //  list all remperatures Insides here
    var inside_t =[
        "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
        "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
        "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
    ]
    
    on({id: inside_t, change: "any"}, function (obj) {
    
        var sum = 0
        inside_t.forEach(function(item, index, array) {
            sum = sum + getState(item).val
        });
    
        var result = sum / (inside_t.length)
        result = Math.round(result*100)/100
        if ( !existsState(target )) {
            createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
        } else {
            setState(target, result, true);
        }
        console.log(result)
    
    });
    

    Beim Anlegen des Objekts wird der Wert korrekt geschrieben in "javascript.0.Temperaturen.InnenMittelwert".
    Nur überschreibt setState den wert nicht. Wo habe ich einen Fehler gemacht ?

    Grüße
    Stephan

    S F paul53P 3 Antworten Letzte Antwort
    0
    • S Stephan 4

      Hallo.

      Ich hab mir ein einfaches Skript gefriemelt. Es ist nicht mein erstes mal JS. Mit den IObroker spezifischen schon.
      Es geht um einen einfachen Mittelwert.

      var target = 'Temperaturen.InnenMittelwert';
      
      //  list all remperatures Insides here
      var inside_t =[
          "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
          "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
          "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
      ]
      
      on({id: inside_t, change: "any"}, function (obj) {
      
          var sum = 0
          inside_t.forEach(function(item, index, array) {
              sum = sum + getState(item).val
          });
      
          var result = sum / (inside_t.length)
          result = Math.round(result*100)/100
          if ( !existsState(target )) {
              createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
          } else {
              setState(target, result, true);
          }
          console.log(result)
      
      });
      

      Beim Anlegen des Objekts wird der Wert korrekt geschrieben in "javascript.0.Temperaturen.InnenMittelwert".
      Nur überschreibt setState den wert nicht. Wo habe ich einen Fehler gemacht ?

      Grüße
      Stephan

      S Offline
      S Offline
      Stephan 4
      schrieb am zuletzt editiert von Stephan 4
      #2

      @stephan-4
      Und wieder note to myself:

      einfach immer schreiben. das else hat es iwie kaputt gemacht

      nicht kopieren fehler drin:

      var target = 'Temperaturen.InnenMittelwert';
      
      //  list all remperatures Insides here
      var inside_t =[
          "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
          "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
          "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
      ]
      
      on({id: inside_t, change: "any"}, function (obj) {
      
          var sum = 0
          inside_t.forEach(function(item, index, array) {
              sum = sum + getState(item).val
          });
      
          var result = sum / (inside_t.length)
          result = Math.round(result*100)/100
          if ( !existsState(target)) {
              createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
          } 
          
          setState(target, result, true);
          //console.log(result)
      
      });
      

      Falls die Selbstgespräche nerven, bitte anschreien!

      Küsschen
      Stephan

      1 Antwort Letzte Antwort
      0
      • S Stephan 4

        Hallo.

        Ich hab mir ein einfaches Skript gefriemelt. Es ist nicht mein erstes mal JS. Mit den IObroker spezifischen schon.
        Es geht um einen einfachen Mittelwert.

        var target = 'Temperaturen.InnenMittelwert';
        
        //  list all remperatures Insides here
        var inside_t =[
            "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
            "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
            "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
        ]
        
        on({id: inside_t, change: "any"}, function (obj) {
        
            var sum = 0
            inside_t.forEach(function(item, index, array) {
                sum = sum + getState(item).val
            });
        
            var result = sum / (inside_t.length)
            result = Math.round(result*100)/100
            if ( !existsState(target )) {
                createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
            } else {
                setState(target, result, true);
            }
            console.log(result)
        
        });
        

        Beim Anlegen des Objekts wird der Wert korrekt geschrieben in "javascript.0.Temperaturen.InnenMittelwert".
        Nur überschreibt setState den wert nicht. Wo habe ich einen Fehler gemacht ?

        Grüße
        Stephan

        F Offline
        F Offline
        fastfoot
        schrieb am zuletzt editiert von
        #3

        @stephan-4 ergänze mal target um javascript.0. und schaue auch mal unter 0_userdata.0 nach

        iobroker läuft unter Docker auf QNAP TS-451+
        SkriptRecovery: https://forum.iobroker.net/post/930558

        1 Antwort Letzte Antwort
        0
        • S Stephan 4

          Hallo.

          Ich hab mir ein einfaches Skript gefriemelt. Es ist nicht mein erstes mal JS. Mit den IObroker spezifischen schon.
          Es geht um einen einfachen Mittelwert.

          var target = 'Temperaturen.InnenMittelwert';
          
          //  list all remperatures Insides here
          var inside_t =[
              "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
              "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
              "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
          ]
          
          on({id: inside_t, change: "any"}, function (obj) {
          
              var sum = 0
              inside_t.forEach(function(item, index, array) {
                  sum = sum + getState(item).val
              });
          
              var result = sum / (inside_t.length)
              result = Math.round(result*100)/100
              if ( !existsState(target )) {
                  createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
              } else {
                  setState(target, result, true);
              }
              console.log(result)
          
          });
          

          Beim Anlegen des Objekts wird der Wert korrekt geschrieben in "javascript.0.Temperaturen.InnenMittelwert".
          Nur überschreibt setState den wert nicht. Wo habe ich einen Fehler gemacht ?

          Grüße
          Stephan

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @stephan-4 sagte: Wo habe ich einen Fehler gemacht ?

          existsState(id) benötigt die vollständige ID "javascript.0.Temperaturen.InnenMittelwert".

          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

          S 1 Antwort Letzte Antwort
          1
          • paul53P paul53

            @stephan-4 sagte: Wo habe ich einen Fehler gemacht ?

            existsState(id) benötigt die vollständige ID "javascript.0.Temperaturen.InnenMittelwert".

            S Offline
            S Offline
            Stephan 4
            schrieb am zuletzt editiert von
            #5

            @paul53 said in setState schreibt Wert nicht:

            javascript.0.Temperaturen.InnenMittelwert

            Vielen Dank, so ist es.

            var target = 'javascript.0.Temperaturen.InnenMittelwert';
            
            //  list all remperatures Insides here
            var inside_t =[
                "ble.0.58:2d:34:3b:66:e3.temperature",  //  Wohnzimmer
                "ble.0.58:2d:34:3b:72:9f.temperature",  //  Schlafzimmer
                "ble.0.58:2d:34:3b:75:5c.temperature"   //  Küche
            ]
            
            on({id: inside_t, change: "any"}, function (obj) {
            
                var sum = 0
                inside_t.forEach(function(item, index, array) {
                    sum = sum + getState(item).val
                });
            
                var result = sum / (inside_t.length)
                result = Math.round(result*100)/100
                if ( !existsState(target)) {
                    createState(target, result,{name: "Durchschnittstemperatur.",  type: 'number', role: 'value'}, function () {}); 
                } else {
                    setState(target, result, true);
                }
            });
            
            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            863

            Online

            32.5k

            Benutzer

            81.7k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe