Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Hisotry auswerten und aufbereiten

    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

    Hisotry auswerten und aufbereiten

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      tomily last edited by

      Hallo Leute,

      hat jemand von euch eine Idee, wie ich am simpelsten die Daten des History-Adapters auslesen und verarbeiten kann?

      Der History Adapter zeichnet fleißig die Temperaturen meiner HDDs auf:

      58388600-0f05-4916-9c06-2fe471eb42a6-grafik.png

      2af7355b-eda9-4ce9-8702-b9db3c947c47-grafik.png

      Diese werden unter /opt/iobroker/history/DATUM als. json gespeichert
      3b61b522-a6b3-4dac-8bf4-c68611170eee-grafik.png

      Habe in einem anderen Eintrag dieses Forums bereits einen Scriptschnipsel gefunden. Vielleicht kann man den dazu verwenden (siehe unten)

      Mein ziel wäre es, pro Datenpunkt den durchschnitt zu berechnen.
      Dazu müsste ich quasi "nur" eine bestimmte Anzahl der unterschiedlichen "val" Einträge der JSON-Datei nehmen, addieren und durch die gleiche Anzahl teilen.

      Leider habe ich keine Ahnung wie ich das angehen soll und leider auch nichts vergleichbares gefunden.
      Bitte steinigt mich nicht, falls ich doch ein Foreneintrag übersehen habe!

      DANKE und Grüße
      Tomily

      Achtung, geklaut. NICHT von mir 🙂 #copyrighthoffentlichnichtverletzt 🙂

      // History Daten einlesen
      var fs = require('fs');
      
      var heute = formatDate(new Date(),"YYYY") + formatDate(new Date(),"MM") + formatDate(new Date(),"DD");
      var id = "history.synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature";
      var fn = "/opt/iobroker/history/" + heute + "/history." + id + ".json";
      
      var buffer = JSON.parse(fs.readFileSync(fn)); // array of objects
      var len = buffer.length;
      var lastval = buffer[len - 1].val;
      log(len + " " + lastval);
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @tomily last edited by paul53

        @tomily sagte:

        Daten des History-Adapters auslesen und verarbeiten kann?

        Siehe Doku.

        @tomily sagte in Hisotry auswerten und aufbereiten:

        Mein ziel wäre es, pro Datenpunkt den durchschnitt zu berechnen.

        Dazu sind die History-Daten wenig geeignet, da die Werte in sehr unterschiedlichen Zeitabständen aufgezeichnet werden.
        Man kann natürlich auch die Werte über die Zeit integrieren und dann durch die Gesamtzeit dividieren.

        1 Reply Last reply Reply Quote 0
        • T
          tomily last edited by

          Danke für die schnelle Antwort.
          Darauf bin ich schon gestoßen....vielleicht sollte ich die Finger davon lassen, wenn ich zu wenig Ahnung vom Scripten habe 🙂

          Hat zufällig jemand schonmal soetwas gemacht, bei dem ich die Anfänge es abschauen kann? 🙂

          Mich interessiert im Prinzip nur jeweils die Zeile "val" und der dahinter zugehörige Wert.
          Inhalt der Json-DAtei:

          [
            {
              "val": 31,
              "ack": 1,
              "ts": 1605569925521,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 32,
              "ack": 1,
              "ts": 1605571704871,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 31,
              "ack": 1,
              "ts": 1605574513277,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605575480922,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605598853205,
              "q": 0,
              "from": "system.adapter.history.0",
              "user": "system.user.admin"
            },
            {
              "val": null,
              "ts": 1605598853206,
              "lc": 1605598853206,
              "q": 64,
              "from": "system.adapter.history.0"
            },
            {
              "val": null,
              "ts": 1605599011287,
              "ack": 1,
              "q": 64,
              "from": "system.adapter.history.0"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605599011287,
              "q": 0,
              "from": "system.adapter.history.0",
              "user": "system.user.admin"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605599180650,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 31,
              "ack": 1,
              "ts": 1605636192964,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605636797724,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 29,
              "ack": 1,
              "ts": 1605644054896,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            },
            {
              "val": 30,
              "ack": 1,
              "ts": 1605646473967,
              "q": 0,
              "from": "system.adapter.synology.0",
              "user": "system.user.admin"
            }
          ]
          
          T 1 Reply Last reply Reply Quote 0
          • T
            tomily @tomily last edited by

            @tomily
            Hier noch ein kleiner Nachtrag. Mit diesen Zeilen, kann ich wenigstens schonmal die Werte in das Log bringen:

            var end = Date.now();
            sendTo('history.0', 'getHistory', {
                id: 'synology.0.DiskStationManager.hdd_info.laufwerk_1.temperature',
                options: {
                    start:      end - 3600000,
                    end:        end,
                    aggregate: 'onchange'
                }
            }, function (result) {
                for (var i = 0; i < result.result.length; i++) {
                    console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                }
            
            });
            
            Ergebnis
            ![b6e0b651-bc01-4e51-8866-e6ca963074f8-grafik.png](/assets/uploads/files/1605709192483-b6e0b651-bc01-4e51-8866-e6ca963074f8-grafik.png) 
            

            Bin ich da auf der richtigen Spur?

            1 Reply Last reply Reply Quote 0
            • T
              tomily last edited by

              Hallo Leute, sorry für das halbe Selstgespräch. Wollte meine letzte 2 Antworten löschen, darf ich aber nicht 🙂
              Konnte durch ein weiteres Beispielscript fast ans Ziel kommen. Hier mein aktueller Zwischenstand:

              var summe = 0;
              var counter = 0;
              
              var end = Date.now();
              sendTo('history.0', 'getHistory', {
                  id: 'synology.0.DiskStationManager.hdd_info.laufwerk_2.temperature',
                  options: {
                      start:      end - 7200000,
                      end:        end,
                      aggregate: 'onchange'
                      }
              }, function (result) {
                  for (var i = 0; i < result.result.length; i++) {
                      console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                      //console.log(result.result[i].val);
                      (summe = summe + result.result[i].val);
                      (counter = counter + 1)
                      }
                      //Zusammenfassung ausgeben
                      console.log("Summe = " + summe)
                      console.log("Anzahl = " + counter)
                      console.log("Durchschnitt = " + (summe / counter))
              });
              

              Ergebnis:
              cedeee3f-0a68-4abc-93ea-5fe5be042eb4-grafik.png

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

                @tomily
                Die Variable counter ist unnötig, denn die Anzahl steht schon in result.result.length.

                T 1 Reply Last reply Reply Quote 0
                • T
                  tomily @paul53 last edited by

                  @paul53 Mercie für den Hinweis. Das baue ich direkt um.

                  Hast du mir evlt. noch nen Tipp, wie ich es hinbekomme, dass das Script ausomatisch los läuft?

                  Vermutlich ist es am Sinnvollsten, das bei einer Änderung der ID zu tun? Oder jede volle Stunde.

                  LG

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

                    @tomily sagte:

                    das Script ausomatisch los läuft?

                    Packe es in die Callback-Funktion von schedule().

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    677
                    Online

                    31.9k
                    Users

                    80.2k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    654
                    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