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. Off Topic
  4. InfluxDB
  5. Datenaufzeichnung Retention InfluxDB 2.0

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.1k

Datenaufzeichnung Retention InfluxDB 2.0

Geplant Angeheftet Gesperrt Verschoben InfluxDB
31 Beiträge 8 Kommentatoren 7.0k Aufrufe 12 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.
  • mickymM mickym

    @spacerx Nun eigentlich sollte man es mit Konsolidierungstasks in andere buckets wegschreiben - so verstehe ich das Konzept der influxdb. Deshalb den iobroker mit der kürzesten Aufbewahrungszeit und dann je nachdem wie man konsolidieren will in weitere Buckets. Der iobroker schreibt ja nur in der Instanz - man ruft die Daten dort ja in der Regel nicht ab.

    B Offline
    B Offline
    bitwicht
    schrieb am zuletzt editiert von bitwicht
    #21

    @mickym

    Re: Datenaufzeichnung Retention InfluxDB 2.0

    Dazu hätte ich noch eine Frage.

    Das Bucket "iobroker" stelle ich auf 180 Tage.
    Das Bucket "iobroker-downsampling" stelle ich auf 5 Jahre.

    Ich schreibe jetzt monatlich den Wasserverbrauch weg.

    Wenn ich nun mit Grafana eine Auswertung über 3 Jahre machen, müsste ein Teil der Daten aus dem iobroker Bucket und der andere Teil aus dem iobroker-downsampling Bucket kommen.

    Wäre das so der richtige Aufbau?

    Würde ich das dann so umbauen müssen:

    from(bucket: "iobroker" & "iobroker-downsampling")
      |> range(start: -12mo)
      |> filter(fn: (r) => r["_measurement"] == "Wasserzaehler-CAM-Haus")
      |> filter(fn: (r) => r["_field"] == "value")
      |> difference()
      |> aggregateWindow(every: 1mo, fn: sum, createEmpty: false, timeSrc: "_start")
      |> keep(columns: ["_value", "_time"])
    
    Marc BergM 1 Antwort Letzte Antwort
    0
    • B bitwicht

      @mickym

      Re: Datenaufzeichnung Retention InfluxDB 2.0

      Dazu hätte ich noch eine Frage.

      Das Bucket "iobroker" stelle ich auf 180 Tage.
      Das Bucket "iobroker-downsampling" stelle ich auf 5 Jahre.

      Ich schreibe jetzt monatlich den Wasserverbrauch weg.

      Wenn ich nun mit Grafana eine Auswertung über 3 Jahre machen, müsste ein Teil der Daten aus dem iobroker Bucket und der andere Teil aus dem iobroker-downsampling Bucket kommen.

      Wäre das so der richtige Aufbau?

      Würde ich das dann so umbauen müssen:

      from(bucket: "iobroker" & "iobroker-downsampling")
        |> range(start: -12mo)
        |> filter(fn: (r) => r["_measurement"] == "Wasserzaehler-CAM-Haus")
        |> filter(fn: (r) => r["_field"] == "value")
        |> difference()
        |> aggregateWindow(every: 1mo, fn: sum, createEmpty: false, timeSrc: "_start")
        |> keep(columns: ["_value", "_time"])
      
      Marc BergM Offline
      Marc BergM Offline
      Marc Berg
      Most Active
      schrieb am zuletzt editiert von
      #22

      @bitwicht sagte in Datenaufzeichnung Retention InfluxDB 2.0:

      Würde ich das dann so umbauen müssen:

      So (mit "&") geht das nicht. Dafür sollte die union Funktion geeignet sein. Du machst zwei Abfragen auf jeweils ein Bucket und "klebst" die mit union sozusagen untereinander.

      https://docs.influxdata.com/flux/v0/stdlib/universe/union/

      NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

      Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

      Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

      1 Antwort Letzte Antwort
      0
      • B Offline
        B Offline
        bitwicht
        schrieb am zuletzt editiert von
        #23

        @Marc-Berg

        Das macht natürlich alles viel komplexer.

        Die Idee von @SpacerX ein Bucker "forever" und ein Bucket 180 Tage finde ich ja viel scharmanter.
        Wäre dann aber nicht "best practice"

        Marc BergM 1 Antwort Letzte Antwort
        0
        • B bitwicht

          @Marc-Berg

          Das macht natürlich alles viel komplexer.

          Die Idee von @SpacerX ein Bucker "forever" und ein Bucket 180 Tage finde ich ja viel scharmanter.
          Wäre dann aber nicht "best practice"

          Marc BergM Offline
          Marc BergM Offline
          Marc Berg
          Most Active
          schrieb am zuletzt editiert von
          #24

          @bitwicht sagte in Datenaufzeichnung Retention InfluxDB 2.0:

          Das macht natürlich alles viel komplexer.

          Einfach kann jeder...

          Wäre dann aber nicht "best practice"

          Best practise gibt es hier m.E nicht. Dazu sind die Anforderungen, Daten(mengen) und das eigene Wissen einfach zu unterschiedlich. Man muss sich den Weg suchen, der einem passt und der einem nicht die Hälfte der Lebenszeit wegfrisst.

          NUC10I3+Ubuntu+Docker+ioBroker+influxDB2+Node Red+RabbitMQ+Grafana

          Pi-hole, Traefik, Checkmk, Conbee II+Zigbee2MQTT, ESPSomfy-RTS, LoRaWAN, Arduino, KiCad

          Benutzt das Voting im Beitrag, wenn er euch geholfen hat.

          1 Antwort Letzte Antwort
          0
          • B Offline
            B Offline
            bitwicht
            schrieb am zuletzt editiert von
            #25

            @Marc-Berg

            Wenn ich die Idee von SpacerX umsetzte.
            2 Adapter mit je einem Bucket (unterschiedliche Aufbewahrungszeiten).

            Siehst du da ein Problem in das ich laufen könnte ?

            1 Antwort Letzte Antwort
            0
            • mickymM Online
              mickymM Online
              mickym
              Most Active
              schrieb am zuletzt editiert von
              #26

              Na ich würde es auch nicht zu kompliziert machen. Wenn man nur die Tageswerte wegspeichert, da kann man doch weit zurückgehen und mit einem bucket arbeiten.

              Wenn beispielsweise alle 5 Minuten ein Wert in die Datenbank geschrieben wird, dann entspricht das 51.840 Werten, wenn man diese 180 Tage aufbewahrt. Wenn man nun nur die Tageswerte mit der gleichen Werteanzahl benötigt sind das bereits 142 Jahre. Die Frage ist doch nur, wie benötige ich die 5 Minutenwerte und interessiert mich diese Details wirklich noch 10 Jahre später.

              Da ich selbst kein Datensammler bin, weiß ich aber nicht, ob man das via grafana in einer Abfrage oder Diagramm umsetzen kann.

              Jeder Flow bzw. jedes Script, das ich hier poste implementiert jeder auf eigene Gefahr. Flows und Scripts können Fehler aufweisen und weder der Seitenbetreiber noch ich persönlich können hierfür haftbar gemacht werden. Das gleiche gilt für Empfehlungen aller Art.

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                bitwicht
                schrieb am zuletzt editiert von
                #27

                @mickym

                War nur ein Beispiel.
                Ich logge den aktuellen Energieverbrauch von ca. 40 Shellys die ja fast alle Sekunde einen Wert speichern.
                Das brauche ich natürlich nicht 1, 2 Jahre zurück.

                Ich glaube 2 Buckets würden mir reichen.

                2 Buckets hätten für mich (Anfänger) gegenüber dem downsampling dein Vorteil, dass ich zB. bei Grafana Auswertungen nicht immer in beiden Buckets suchen muss.

                1 Antwort Letzte Antwort
                0
                • B Offline
                  B Offline
                  bitwicht
                  schrieb am zuletzt editiert von
                  #28

                  @spacerx said in Datenaufzeichnung Retention InfluxDB 2.0:

                  Der Vollständigkeit halber noch der Erfolg bringende Task.
                  import "timezone" option location = timezone.location(name: "Europe/Berlin") option task = {name: "Downsampling Vb_Stromzaehler", cron: "1 0 * * *"} data = from(bucket: "ioBroker") |> range(start: -task.every) |> filter(fn: (r) => r["_measurement"] == "Vb_Stromzaehler") |> filter(fn: (r) => r["from"] == "system.adapter.javascript.0") data |> aggregateWindow(every: 1d, fn: last, timeSrc: "_start") |> toInt() // in Wh ohne Komma |> set(key: "_measurement", value: "Hauptzaehler") // Use the to() function to validate that the results look correct. This is optional. |> to(bucket: "Stromverbrauch", org: "RBE")

                  Zu deinem downsampling Script noch ein paar Fragen ob ich das richtig verstehe.

                  • Die Werte im Quell-Bucket werden nicht gelöscht, sondern nur der letzte Wert eines Tages in ein anderes Bucket geschrieben oder ?
                  • In deinem Beispiel schreibst du in das neue Bucket Downsamling und in Measurement Vb_Stromzaehler - oder ?
                  • Den Job lege ich direkt in der Influx unter Tasks an ?
                  • Der Job läuft täglich um 00:01 Uhr (glaube 1 Minute, 0 Stunde). Wenn ich jetzt auf das Measuremnt eine Grafana Auswertung lege, würde der aktuelle Tag fehlen. Wenn ich den Job alle Stunde laufen lasse, müsste ich doch zumindest immer den nahezu aktuellen Tageswert haben oder habe ich da einen Denkfehler? Spricht was dagegen den Job jede Stunde laufen zu lassen ?
                  S 1 Antwort Letzte Antwort
                  0
                  • B bitwicht

                    @spacerx said in Datenaufzeichnung Retention InfluxDB 2.0:

                    Der Vollständigkeit halber noch der Erfolg bringende Task.
                    import "timezone" option location = timezone.location(name: "Europe/Berlin") option task = {name: "Downsampling Vb_Stromzaehler", cron: "1 0 * * *"} data = from(bucket: "ioBroker") |> range(start: -task.every) |> filter(fn: (r) => r["_measurement"] == "Vb_Stromzaehler") |> filter(fn: (r) => r["from"] == "system.adapter.javascript.0") data |> aggregateWindow(every: 1d, fn: last, timeSrc: "_start") |> toInt() // in Wh ohne Komma |> set(key: "_measurement", value: "Hauptzaehler") // Use the to() function to validate that the results look correct. This is optional. |> to(bucket: "Stromverbrauch", org: "RBE")

                    Zu deinem downsampling Script noch ein paar Fragen ob ich das richtig verstehe.

                    • Die Werte im Quell-Bucket werden nicht gelöscht, sondern nur der letzte Wert eines Tages in ein anderes Bucket geschrieben oder ?
                    • In deinem Beispiel schreibst du in das neue Bucket Downsamling und in Measurement Vb_Stromzaehler - oder ?
                    • Den Job lege ich direkt in der Influx unter Tasks an ?
                    • Der Job läuft täglich um 00:01 Uhr (glaube 1 Minute, 0 Stunde). Wenn ich jetzt auf das Measuremnt eine Grafana Auswertung lege, würde der aktuelle Tag fehlen. Wenn ich den Job alle Stunde laufen lasse, müsste ich doch zumindest immer den nahezu aktuellen Tageswert haben oder habe ich da einen Denkfehler? Spricht was dagegen den Job jede Stunde laufen zu lassen ?
                    S Offline
                    S Offline
                    SpacerX
                    schrieb am zuletzt editiert von
                    #29

                    @bitwicht genau so.

                    Wenn du dir in Grafana die Werte aus dem Downsampling anzeigst wird genau wie du sagst der Aktuelle Tag fehlen.
                    Ich mach das so, das ich mir die vergangenen Tage an im Diagramm anzeigen lasse und den aktuellen Tag aus der Quellaufzeichnung. Das kannst du im Diagramm Mischen. So brauche ich nur einmal am Tag Downsampeln.

                    Das Quellbucket hat bei mir nur eine eine Aufzeichnungsdauer von 3 Monaten. Alle älteren Daten liegen dann komprimiert in einem Bucket mit unbegrenzter Aufzeichnung

                    DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                    1 Antwort Letzte Antwort
                    0
                    • B Offline
                      B Offline
                      bitwicht
                      schrieb am zuletzt editiert von
                      #30

                      @SpacerX

                      Wie sieht denn deine Abfrage im Grafana aus, dass du Historie und Tageswert angezeigt bekommst?

                      Arbeitest du da mit "union" wie es Marc beschrieben hat oder machst du einfach 2 Abfragen die halt in einem Querry sind?

                      S 1 Antwort Letzte Antwort
                      0
                      • B bitwicht

                        @SpacerX

                        Wie sieht denn deine Abfrage im Grafana aus, dass du Historie und Tageswert angezeigt bekommst?

                        Arbeitest du da mit "union" wie es Marc beschrieben hat oder machst du einfach 2 Abfragen die halt in einem Querry sind?

                        S Offline
                        S Offline
                        SpacerX
                        schrieb am zuletzt editiert von SpacerX
                        #31

                        @bitwicht spät aber bin jetzt erst wieder am Rechner.

                        Abfrage A:

                        import "date"
                        import "timezone" // import wegen der Berechnung um 02:00:00
                        option location = timezone.location(name: "Europe/Berlin")
                          from(bucket: "Stromverbrauch")
                          |> range(start: -1y, stop: date.truncate(t: now(), unit: 1mo))
                          |> filter(fn: (r) => r["_measurement"] == "Stromzaehler")
                          |> aggregateWindow(every: 1mo , fn: last,  timeSrc: "_start" ,createEmpty: true )
                          |> difference()
                        

                        Abfrage B

                        import "timezone" // import wegen der Berechnung um 02:00:00
                        option location = timezone.location(name: "Europe/Berlin")
                        from(bucket: "ioBroker")
                          |> range(start: -1mo, stop: now())
                          |> filter(fn: (r) => r["_measurement"] == "Vb_Stromzaehler")
                          |> filter(fn: (r) => r["from"] == "system.adapter.javascript.0")
                          |> aggregateWindow(every: 1mo , fn: last,  timeSrc: "_start") // ,createEmpty: false )
                          |> difference()
                        

                        Der Screenshot dazu:

                        Screenshot 2024-01-15 183758.png

                        DS720|Nuc8i3BEH|Proxmox|RaspberryMatic|ioBroker|influxDB2|Grafana

                        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

                        954

                        Online

                        32.4k

                        Benutzer

                        81.5k

                        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