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.8k

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

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

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 sagte in Datenaufzeichnung Retention InfluxDB 2.0:

    mit einzufügen? Bei der aggregieren und difference macht das schon was aus.

    Der nimmt aber local Timezone - aber abgespeichert werden alle Zeiten glaub in UTC.

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

    @mickym Das eigentliche Downsampling bekomme ich hin, nur Stimmen die Daten dann einfach nicht mehr. Schuld daran ist das ganze geranze mit den Timezone bezogenen Berechnungen.

    Ich hab das jetzt gefühlte 50 mal in allen Varianten durchexerziert.
    Ich mache das aggregieren auf den Tag in Zeitzohne Berlin dann Stimmen die Werte.
    Lasse ich das nun Downsampeln werden die Werte nicht in Timezone Berlin berechnet sondern +3 Stunde versetzt.
    Korrigiere ich das beim anzeigenden Query mit Timezone Berlin komme ich auf +1 Stunde raus.
    Ich raffe das nicht wie intern gerechnet wird.

    Wo kann man die Local Timezone in InfluxDB sehen einstellen? Vielleicht auch die Timezone einstellen?

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

    F 1 Antwort Letzte Antwort
    0
    • S SpacerX

      @mickym Das eigentliche Downsampling bekomme ich hin, nur Stimmen die Daten dann einfach nicht mehr. Schuld daran ist das ganze geranze mit den Timezone bezogenen Berechnungen.

      Ich hab das jetzt gefühlte 50 mal in allen Varianten durchexerziert.
      Ich mache das aggregieren auf den Tag in Zeitzohne Berlin dann Stimmen die Werte.
      Lasse ich das nun Downsampeln werden die Werte nicht in Timezone Berlin berechnet sondern +3 Stunde versetzt.
      Korrigiere ich das beim anzeigenden Query mit Timezone Berlin komme ich auf +1 Stunde raus.
      Ich raffe das nicht wie intern gerechnet wird.

      Wo kann man die Local Timezone in InfluxDB sehen einstellen? Vielleicht auch die Timezone einstellen?

      F Offline
      F Offline
      ftd
      schrieb am zuletzt editiert von
      #11

      @spacerx By default, Flux uses the UTC time zone.

      Korrigiere ich das beim anzeigenden Query mit Timezone Berlin komme ich auf +1 Stunde raus.

      Mach doch einfach noch ein

      option location = timezone.fixed(offset: -1h)
      

      dahinter?!

      S 1 Antwort Letzte Antwort
      0
      • F ftd

        @spacerx By default, Flux uses the UTC time zone.

        Korrigiere ich das beim anzeigenden Query mit Timezone Berlin komme ich auf +1 Stunde raus.

        Mach doch einfach noch ein

        option location = timezone.fixed(offset: -1h)
        

        dahinter?!

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

        @ftd 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")
        

        und noch der Query hinterher, für monatlich übers Jahr.

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

        Ich habe nun aber auch etwa 10 Messstellen und nach 3-4 andere Measurements die ich etwas länger behalten möchte. das wird Fleißarbeit.

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

        1 Antwort Letzte Antwort
        1
        • S Offline
          S Offline
          SpacerX
          schrieb am zuletzt editiert von SpacerX
          #13

          Ich schiebe noch paar Überlegungen nach:

          • Downsampling um 00:15 Uhr Nachts. Einmal am Tag reicht denke ich die aktuellen Daten für die Visu bekomme ich ja aus dem Quellbucket.

          • Gleich auch die Spalten "ack", "q", "from" mit entfernen. Ich glaube nicht das man die jemals wieder braucht.

          import "timezone"
          
          option task = {name: "Downsampling Vb_Stromzaehler", cron: "15 0 * * *"}
          
          option location = timezone.location(name: "Europe/Berlin")
          
          data =
              from(bucket: "ioBroker")
                  |> range(start: -2mo, stop: now())
                  |> filter(fn: (r) => r["_measurement"] == "Vb_Stromzaehler")
                  |> filter(fn: (r) => r["from"] == "system.adapter.javascript.0")
                  // Spalten "_start", "_stop", "ack", "from", "q", ausschliessen
                  |> drop(columns: ["ack", "q", "from"])
          
          data
              |> aggregateWindow(every: 1d, fn: last, timeSrc: "_start")
              // In Wh ohne Komma
              |> toInt()
              |> set(key: "_measurement", value: "Hauptzaehler") 
              // Use the to() function to validate that the results look correct. This is optional.
              |> to(bucket: "Stromverbrauch", org: "RBE")
          

          Wichtig ist das der drop Befehl in dem oberen data Block steht, ansonsten wird ein Fehler angemeckert.

          Die beste und korrekte Darstellung in Grafana ergibt sich mit:

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

          SnipSnap_1.PNG
          Die Anpassung der X-Bezeichnung mit Override
          SnipSnap_2.PNG
          Vieleicht sucht das ja mal jemand und kann es hier finden.:blush:

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

          B 1 Antwort Letzte Antwort
          4
          • S SpacerX

            Ich schiebe noch paar Überlegungen nach:

            • Downsampling um 00:15 Uhr Nachts. Einmal am Tag reicht denke ich die aktuellen Daten für die Visu bekomme ich ja aus dem Quellbucket.

            • Gleich auch die Spalten "ack", "q", "from" mit entfernen. Ich glaube nicht das man die jemals wieder braucht.

            import "timezone"
            
            option task = {name: "Downsampling Vb_Stromzaehler", cron: "15 0 * * *"}
            
            option location = timezone.location(name: "Europe/Berlin")
            
            data =
                from(bucket: "ioBroker")
                    |> range(start: -2mo, stop: now())
                    |> filter(fn: (r) => r["_measurement"] == "Vb_Stromzaehler")
                    |> filter(fn: (r) => r["from"] == "system.adapter.javascript.0")
                    // Spalten "_start", "_stop", "ack", "from", "q", ausschliessen
                    |> drop(columns: ["ack", "q", "from"])
            
            data
                |> aggregateWindow(every: 1d, fn: last, timeSrc: "_start")
                // In Wh ohne Komma
                |> toInt()
                |> set(key: "_measurement", value: "Hauptzaehler") 
                // Use the to() function to validate that the results look correct. This is optional.
                |> to(bucket: "Stromverbrauch", org: "RBE")
            

            Wichtig ist das der drop Befehl in dem oberen data Block steht, ansonsten wird ein Fehler angemeckert.

            Die beste und korrekte Darstellung in Grafana ergibt sich mit:

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

            SnipSnap_1.PNG
            Die Anpassung der X-Bezeichnung mit Override
            SnipSnap_2.PNG
            Vieleicht sucht das ja mal jemand und kann es hier finden.:blush:

            B Nicht stören
            B Nicht stören
            bommel_030
            schrieb am zuletzt editiert von
            #14

            @spacerx
            Ans Downsampling hab ich mich noch nicht rangetraut, das hebe ich mir für den Urlaub auf ;-)
            Danke aber schonmal für die Grafana-Darstellung, läuft einwandfrei.
            Hast du dir zufällig mal Gedanken darüber gemacht den Verbrauch des Vorjahres in der selben Darstellung mit aufzunehmen? Also 12 Balken aus dem Vorjahr im Hintergrund und das aktuelle davor?

            S 1 Antwort Letzte Antwort
            0
            • B bommel_030

              @spacerx
              Ans Downsampling hab ich mich noch nicht rangetraut, das hebe ich mir für den Urlaub auf ;-)
              Danke aber schonmal für die Grafana-Darstellung, läuft einwandfrei.
              Hast du dir zufällig mal Gedanken darüber gemacht den Verbrauch des Vorjahres in der selben Darstellung mit aufzunehmen? Also 12 Balken aus dem Vorjahr im Hintergrund und das aktuelle davor?

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

              @bommel_030 Dahinter wird schwierig. Daneben sollte gehen.

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

              1 Antwort Letzte Antwort
              0
              • B Offline
                B Offline
                bz7i
                schrieb am zuletzt editiert von
                #16

                @SpacerX: Danke für den super Tipp. Inzwischen hab ich mich etwas in Flux eingearbeitet :-)

                Da ich auch Probleme mit nicht passenden Werten hatte, kann Ich ja mal zeigen wie Ich es gelöst hab.

                fn: last bringt folgendes Problem. Der Stromverbrauch wird nicht von 0:00 - 0:00Uhr berechnet. Sondern mit dem Wert zuvor. Der letzte also. z.B. 23:00 - 23:00Uhr. Finde Ich nicht ganz so schön. Deshalb hab ich fn: first verwendet.

                Damit passten die Zeiten aber nicht mehr. Das hab ich folgt gelöst:

                 |> map(fn: (r) => ({r with _time: date.add(d: -1h, to: r._time)}))
                

                mit d: -1h, hab ich den Zeitstempel um eine Stunde verschoben.

                Mein kompletter Code um auf Stundenbasis zu Downsampeln sieht wie folgt aus :

                import "date"
                
                option task = {name: "Stromverbrauch", every: 1h}
                
                data =
                    from(bucket: "ioBroker")
                        |> range(start: -24h, stop: 1h)
                        |> filter(fn: (r) => r["_measurement"] == "javascript.0.Info.StromZaehler.Zaehlerstand_Min")
                        |> filter(fn: (r) => r["_field"] == "value")
                
                data
                    |> aggregateWindow(every: 1h, fn: first, createEmpty: false)
                    |> difference(nonNegative: true, columns: ["_value"])
                    |> toInt()
                    |> map(fn: (r) => ({r with _value: r._value / 10}))
                    |> map(fn: (r) => ({r with _time: date.add(d: -1h, to: r._time)}))
                    |> set(key: "_Interval", value: "1h")
                    |> to(bucket: "Energie", org: "inFluxDB", tagColumns: ["_Interval"])
                
                

                Hoffe ich konnte damit helfen....

                1 Antwort Letzte Antwort
                0
                • C Offline
                  C Offline
                  cainam
                  schrieb am zuletzt editiert von cainam
                  #17

                  kleine Frage meinerseits. Könnte man so einen Task nicht auch in das gleiche Bucket zurückschreiben.

                  Dh wenn ich zB Daten die älter als 90Tage filtere und diese aggregiere (zB Tagesdurchschnitt) und diese dann wieder ins gleiche Bucket schreibe...

                  habe ich dann nicht von ganz alten daten bis heute -90Tage ein Tagesdurchschnitt und -89 Tage bis heute die Minutenaufzeichnung?

                  evt müsste man ein zwischenspeichern machen?

                  option task = {
                    name: "AggregationTask",
                    every: 24h,
                    offset: 0h
                  }
                  
                  from(bucket: "iobroker")
                    |> range(start: -2y, stop: -90d)
                      |> filter(fn: (r) => r["_measurement"] == "Aussentemperatur")
                      |> filter(fn: (r) => r["_field"] == "value")
                    |> aggregateWindow(every: 1d, fn: mean, createEmpty: true)
                    |> to(bucket: "temporary_bucket")
                  
                  from(bucket: "iobroker")
                    |> range(start: -2y, stop: -90d)
                    |> drop()             
                  
                  from(bucket: "temporary_bucket")
                    |> range(start: -2y, stop: -90d)
                    |> to(bucket: "iobroker")
                  
                  

                  jrgendwie so, jedoch geht das oben so nicht beim versucht

                  Marc BergM 1 Antwort Letzte Antwort
                  0
                  • C cainam

                    kleine Frage meinerseits. Könnte man so einen Task nicht auch in das gleiche Bucket zurückschreiben.

                    Dh wenn ich zB Daten die älter als 90Tage filtere und diese aggregiere (zB Tagesdurchschnitt) und diese dann wieder ins gleiche Bucket schreibe...

                    habe ich dann nicht von ganz alten daten bis heute -90Tage ein Tagesdurchschnitt und -89 Tage bis heute die Minutenaufzeichnung?

                    evt müsste man ein zwischenspeichern machen?

                    option task = {
                      name: "AggregationTask",
                      every: 24h,
                      offset: 0h
                    }
                    
                    from(bucket: "iobroker")
                      |> range(start: -2y, stop: -90d)
                        |> filter(fn: (r) => r["_measurement"] == "Aussentemperatur")
                        |> filter(fn: (r) => r["_field"] == "value")
                      |> aggregateWindow(every: 1d, fn: mean, createEmpty: true)
                      |> to(bucket: "temporary_bucket")
                    
                    from(bucket: "iobroker")
                      |> range(start: -2y, stop: -90d)
                      |> drop()             
                    
                    from(bucket: "temporary_bucket")
                      |> range(start: -2y, stop: -90d)
                      |> to(bucket: "iobroker")
                    
                    

                    jrgendwie so, jedoch geht das oben so nicht beim versucht

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

                    @cainam
                    Du kannst die Daten natürlich in das gleiche Bucket schreiben, das Problem (dass du ja offensichtlich schon gefunden hast) besteht im Löschen der Daten. Das geht meines Wissens aus einem Task heraus nicht, sondern nur per API oder CLI. Theoretisch könnte man das Löschen über einen Cronjob durchführen und die Aggregate Funktionen inkl. Schreiben über ein temporäres Bucket per Task und das Ganze zeitlich synchronisieren ... Schwierig ...

                    Ich glaube, für diese Anforderung sind die Tasks raus. Stattdessen würde ich das ganze über ein Bash-Skript lösen.

                    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
                    • C Offline
                      C Offline
                      cainam
                      schrieb am zuletzt editiert von
                      #19

                      Bist du sicher geht das mit drop nicht?

                      Es wäre even einfach die Daten so zu reduzieren anstatt alles neue buckets zu machen… auch vergessen Risiko ist massiv tiefer

                      Marc BergM 1 Antwort Letzte Antwort
                      0
                      • C cainam

                        Bist du sicher geht das mit drop nicht?

                        Es wäre even einfach die Daten so zu reduzieren anstatt alles neue buckets zu machen… auch vergessen Risiko ist massiv tiefer

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

                        @cainam sagte in Datenaufzeichnung Retention InfluxDB 2.0:

                        Bist du sicher geht das mit drop nicht?

                        Ja.

                        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
                        • 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
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          723

                                          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