Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Falsche Durchschnittswerte

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    17
    1
    368

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

[gelöst] Falsche Durchschnittswerte

Scheduled Pinned Locked Moved JavaScript
9 Posts 2 Posters 486 Views 1 Watching
  • 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.
  • CrunkFXC Offline
    CrunkFXC Offline
    CrunkFX
    Forum Testing
    wrote on last edited by CrunkFX
    #1

    Hi,
    ich versuche mich ein bissl in Javascript und scheitere gerade an dem Berechnen eines Durchschnitts:

    var rooms;
    var total = 0;
    var avg;
    
    
    
    // Aufzählung Raumtemperaturen
    rooms = [
        getState("alias.0.Temperatur.Bad").val,
        getState("alias.0.Temperatur.Büro").val,
        getState("alias.0.Temperatur.Flur").val,
        getState("alias.0.Temperatur.Küche").val,
        getState("alias.0.Temperatur.Schlafzimmer").val,
        getState("alias.0.Temperatur.Wohnzimmer").val
    ];
    
    // Durchschnittstemperatur berechnen
    on({
        id: [
            'alias.0.Temperatur.Bad',
            'alias.0.Temperatur.Büro',
            'alias.0.Temperatur.Flur',
            'alias.0.Temperatur.Küche',
            'alias.0.Temperatur.Schlafzimmer',
            'alias.0.Temperatur.Wohnzimmer',
        ], change: "ne"
    }, function (obj) {
    
        for (var n = 0; n < rooms.length; n++) {
            total += rooms[n];
        }
        avg = total / rooms.length;
        setState("alias.0.Temperatur.Wohnung", avg);
    })
    

    Ich bekomme zwar einen Wert, dieser ist aber viel zu hoch.
    Liegt das am Script?

    MFG
    CrunkFX

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    paul53P 1 Reply Last reply
    0
    • CrunkFXC CrunkFX

      Hi,
      ich versuche mich ein bissl in Javascript und scheitere gerade an dem Berechnen eines Durchschnitts:

      var rooms;
      var total = 0;
      var avg;
      
      
      
      // Aufzählung Raumtemperaturen
      rooms = [
          getState("alias.0.Temperatur.Bad").val,
          getState("alias.0.Temperatur.Büro").val,
          getState("alias.0.Temperatur.Flur").val,
          getState("alias.0.Temperatur.Küche").val,
          getState("alias.0.Temperatur.Schlafzimmer").val,
          getState("alias.0.Temperatur.Wohnzimmer").val
      ];
      
      // Durchschnittstemperatur berechnen
      on({
          id: [
              'alias.0.Temperatur.Bad',
              'alias.0.Temperatur.Büro',
              'alias.0.Temperatur.Flur',
              'alias.0.Temperatur.Küche',
              'alias.0.Temperatur.Schlafzimmer',
              'alias.0.Temperatur.Wohnzimmer',
          ], change: "ne"
      }, function (obj) {
      
          for (var n = 0; n < rooms.length; n++) {
              total += rooms[n];
          }
          avg = total / rooms.length;
          setState("alias.0.Temperatur.Wohnung", avg);
      })
      

      Ich bekomme zwar einen Wert, dieser ist aber viel zu hoch.
      Liegt das am Script?

      MFG
      CrunkFX

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @CrunkFX sagte:

      Wert, dieser ist aber viel zu hoch.

      Wenn das funktioniert mit einem Array of functions: Du hast vergessen, die Variable total vor der Schleife auf 0 zu setzen.

      EDIT: Weshalb ist "Temperatur.Wohnung" ein Alias und nicht "0_userdata.0.Temperatur.Wohnung" ?

      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

      CrunkFXC 1 Reply Last reply
      0
      • paul53P paul53

        @CrunkFX sagte:

        Wert, dieser ist aber viel zu hoch.

        Wenn das funktioniert mit einem Array of functions: Du hast vergessen, die Variable total vor der Schleife auf 0 zu setzen.

        EDIT: Weshalb ist "Temperatur.Wohnung" ein Alias und nicht "0_userdata.0.Temperatur.Wohnung" ?

        CrunkFXC Offline
        CrunkFXC Offline
        CrunkFX
        Forum Testing
        wrote on last edited by
        #3

        @paul53 Temperatur.Wohnung verweist auf 0_userdata.0.Temperatur.Wohnung somit hab ich alles in einem Ordner. Nun bleibt der Wert konstant bei 16.95. Den Fehler mit der 0 verstehe ich aber nun? Du meinst also, dass dieser Teil ein Problem ist:

        rooms = [
        
            getState("alias.0.Temperatur.Bad").val,
        
            getState("alias.0.Temperatur.Büro").val,
        
            getState("alias.0.Temperatur.Flur").val,
        
            getState("alias.0.Temperatur.Küche").val,
        
            getState("alias.0.Temperatur.Schlafzimmer").val,
        
            getState("alias.0.Temperatur.Wohnzimmer").val
        
        ];
        

        ?

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

        paul53P 2 Replies Last reply
        0
        • CrunkFXC CrunkFX

          @paul53 Temperatur.Wohnung verweist auf 0_userdata.0.Temperatur.Wohnung somit hab ich alles in einem Ordner. Nun bleibt der Wert konstant bei 16.95. Den Fehler mit der 0 verstehe ich aber nun? Du meinst also, dass dieser Teil ein Problem ist:

          rooms = [
          
              getState("alias.0.Temperatur.Bad").val,
          
              getState("alias.0.Temperatur.Büro").val,
          
              getState("alias.0.Temperatur.Flur").val,
          
              getState("alias.0.Temperatur.Küche").val,
          
              getState("alias.0.Temperatur.Schlafzimmer").val,
          
              getState("alias.0.Temperatur.Wohnzimmer").val
          
          ];
          

          ?

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

          @CrunkFX sagte:

          Du meinst also, dass dieser Teil ein Problem ist:

          Nicht unbedingt, ich habe allerdings noch nie ein Array of functions verwendet und weiß nicht, ob das funktioniert. Ich vermute, dass der bei Script-Start eingelesene Wert erhalten bleibt.

          @CrunkFX sagte in Falsche Durchschnittswerte:

          Temperatur.Wohnung verweist auf 0_userdata.0.Temperatur.Wohnung

          Es macht keinen Sinn, zu eigenen Datenpunkten einen Alias zu erzeugen (Ressourcen-Verschwendung).

          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

          CrunkFXC 1 Reply Last reply
          0
          • paul53P paul53

            @CrunkFX sagte:

            Du meinst also, dass dieser Teil ein Problem ist:

            Nicht unbedingt, ich habe allerdings noch nie ein Array of functions verwendet und weiß nicht, ob das funktioniert. Ich vermute, dass der bei Script-Start eingelesene Wert erhalten bleibt.

            @CrunkFX sagte in Falsche Durchschnittswerte:

            Temperatur.Wohnung verweist auf 0_userdata.0.Temperatur.Wohnung

            Es macht keinen Sinn, zu eigenen Datenpunkten einen Alias zu erzeugen (Ressourcen-Verschwendung).

            CrunkFXC Offline
            CrunkFXC Offline
            CrunkFX
            Forum Testing
            wrote on last edited by CrunkFX
            #5

            @paul53

            Es macht keinen Sinn, zu eigenen Datenpunkten einen Alias zu erzeugen (Ressourcen-Verschwendung).
            Gut hab verstanden! :+1:

            Weiterhin so funktioniert es jetzt:

            var rooms;
            var avg;
            
            function mathMean(myList) {
                return myList.reduce(function (x, y) { return x + y; }) / myList.length;
            }
            
            
            // Durchschnittstemperatur berechnen
            on({
                id: [
                    'alias.0.Temperatur.Bad',
                    'alias.0.Temperatur.Büro',
                    'alias.0.Temperatur.Flur',
                    'alias.0.Temperatur.Küche',
                    'alias.0.Temperatur.Schlafzimmer',
                    'alias.0.Temperatur.Wohnzimmer',
                ], change: "ne"
            }, function (obj) {
                setState("0_userdata.0.Temperatur.Wohnung", (mathMean([
                    getState("alias.0.Temperatur.Bad").val,
                    getState("alias.0.Temperatur.Büro").val,
                    getState("alias.0.Temperatur.Flur").val,
                    getState("alias.0.Temperatur.Küche").val,
                    getState("alias.0.Temperatur.Schlafzimmer").val,
                    getState("alias.0.Temperatur.Wohnzimmer").val])))
            });
            

            So aber nicht:

            var rooms;
            var avg;
            
            function mathMean(myList) {
                return myList.reduce(function (x, y) { return x + y; }) / myList.length;
            }
            
            // Aufzählung Raumtemperaturen
            rooms = [
                getState("alias.0.Temperatur.Bad").val,
                getState("alias.0.Temperatur.Büro").val,
                getState("alias.0.Temperatur.Flur").val,
                getState("alias.0.Temperatur.Küche").val,
                getState("alias.0.Temperatur.Schlafzimmer").val,
                getState("alias.0.Temperatur.Wohnzimmer").val
            ];
            
            // Durchschnittstemperatur berechnen
            on({
                id: [
                    'alias.0.Temperatur.Bad',
                    'alias.0.Temperatur.Büro',
                    'alias.0.Temperatur.Flur',
                    'alias.0.Temperatur.Küche',
                    'alias.0.Temperatur.Schlafzimmer',
                    'alias.0.Temperatur.Wohnzimmer',
                ], change: "ne"
            }, function (obj) {
                setState("0_userdata.0.Temperatur.Wohnung", (mathMean(rooms)))
            });
            
            
            

            Kannst du erkenne wieso? Mir fehlt einfach die Ahnung.

            Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            1 Reply Last reply
            0
            • CrunkFXC CrunkFX

              @paul53 Temperatur.Wohnung verweist auf 0_userdata.0.Temperatur.Wohnung somit hab ich alles in einem Ordner. Nun bleibt der Wert konstant bei 16.95. Den Fehler mit der 0 verstehe ich aber nun? Du meinst also, dass dieser Teil ein Problem ist:

              rooms = [
              
                  getState("alias.0.Temperatur.Bad").val,
              
                  getState("alias.0.Temperatur.Büro").val,
              
                  getState("alias.0.Temperatur.Flur").val,
              
                  getState("alias.0.Temperatur.Küche").val,
              
                  getState("alias.0.Temperatur.Schlafzimmer").val,
              
                  getState("alias.0.Temperatur.Wohnzimmer").val
              
              ];
              

              ?

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #6

              @CrunkFX
              Ich würde es so angehen:

              const rooms = [
                      'alias.0.Temperatur.Bad',
                      'alias.0.Temperatur.Büro',
                      'alias.0.Temperatur.Flur',
                      'alias.0.Temperatur.Küche',
                      'alias.0.Temperatur.Schlafzimmer',
                      'alias.0.Temperatur.Wohnzimmer',
              ];
              const temps = [];
              
              function mean() {
                  let total = 0;
                  for (let n = 0; n < rooms.length; n++) {
                      total += temps[n];
                  }
                  return total / rooms.length;
              }
              
              for (let n = 0; n < rooms.length; n++) {
                  temps[n] = getState(rooms[n]).val;
              }
              setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
              
              on(rooms, function(dp) {
                  let idx = rooms.indexOf(dp.id);
                  temps[idx] = dp.state.val;
                  setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
              });    
              

              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

              CrunkFXC 1 Reply Last reply
              1
              • paul53P paul53

                @CrunkFX
                Ich würde es so angehen:

                const rooms = [
                        'alias.0.Temperatur.Bad',
                        'alias.0.Temperatur.Büro',
                        'alias.0.Temperatur.Flur',
                        'alias.0.Temperatur.Küche',
                        'alias.0.Temperatur.Schlafzimmer',
                        'alias.0.Temperatur.Wohnzimmer',
                ];
                const temps = [];
                
                function mean() {
                    let total = 0;
                    for (let n = 0; n < rooms.length; n++) {
                        total += temps[n];
                    }
                    return total / rooms.length;
                }
                
                for (let n = 0; n < rooms.length; n++) {
                    temps[n] = getState(rooms[n]).val;
                }
                setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
                
                on(rooms, function(dp) {
                    let idx = rooms.indexOf(dp.id);
                    temps[idx] = dp.state.val;
                    setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
                });    
                
                CrunkFXC Offline
                CrunkFXC Offline
                CrunkFX
                Forum Testing
                wrote on last edited by
                #7

                @paul53 Das sieht schon besser aus, wann wird der Teil ausgeführt, dass kann ich nicht erkennen:

                for (let n = 0; n < rooms.length; n++) {
                
                    temps[n] = getState(rooms[n]).val;
                
                }
                
                setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
                

                Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                paul53P 1 Reply Last reply
                0
                • CrunkFXC CrunkFX

                  @paul53 Das sieht schon besser aus, wann wird der Teil ausgeführt, dass kann ich nicht erkennen:

                  for (let n = 0; n < rooms.length; n++) {
                  
                      temps[n] = getState(rooms[n]).val;
                  
                  }
                  
                  setState("0_userdata.0.Temperatur.Wohnung", mean(), true);
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by
                  #8

                  @CrunkFX sagte:

                  wann wird der Teil ausgeführt, dass kann ich nicht erkennen:

                  Bei Script-Start. Es wird das Temperaturen-Array befüllt und anschließend der Mittelwert geschrieben.

                  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

                  CrunkFXC 1 Reply Last reply
                  1
                  • paul53P paul53

                    @CrunkFX sagte:

                    wann wird der Teil ausgeführt, dass kann ich nicht erkennen:

                    Bei Script-Start. Es wird das Temperaturen-Array befüllt und anschließend der Mittelwert geschrieben.

                    CrunkFXC Offline
                    CrunkFXC Offline
                    CrunkFX
                    Forum Testing
                    wrote on last edited by
                    #9

                    @paul53 Super vielen Dank das funktioniert, ich werd mir das mal auseinandernehmen um zu verstehen, was du da gebaut hast.

                    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    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

                    701

                    Online

                    32.7k

                    Users

                    82.5k

                    Topics

                    1.3m

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

                    • Don't have an account? Register

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