Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. setState schreibt Wert nicht

    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

    setState schreibt Wert nicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Stephan 4 last edited by

      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 paul53 3 Replies Last reply Reply Quote 0
      • S
        Stephan 4 @Stephan 4 last edited by Stephan 4

        @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 Reply Last reply Reply Quote 0
        • F
          fastfoot @Stephan 4 last edited by

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

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

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

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

            S 1 Reply Last reply Reply Quote 1
            • S
              Stephan 4 @paul53 last edited by

              @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 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              653
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              3
              5
              217
              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