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. [gelöst] Falsche Durchschnittswerte

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    347

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

[gelöst] Falsche Durchschnittswerte

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 2 Kommentatoren 464 Aufrufe 1 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.
  • CrunkFXC Offline
    CrunkFXC Offline
    CrunkFX
    Forum Testing
    schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antworten Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von
                #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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 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

                    750

                    Online

                    32.5k

                    Benutzer

                    81.8k

                    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