Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. InfluxDB Daten aufarbeiten

    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

    InfluxDB Daten aufarbeiten

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

      Moin,

      Ich würde gerne meine gesammelten Raumwerte in Influx aufarbeiten und mittels Task in ein neues Bucket mit mehr Struktur überführen.

      Ich habe Sonoff Sensoren für die Temperatur und Luftfeuchte in den Räumen. die Werte werden in Influx gesammelt und in das Bucket iobroker übermittelt. Leider sind diese Datenströme nicht strukturiert. Mein Ziel ist es diese so aufzuarbeiten damit am ende es so aussieht raumwerte, zimmer , stube, temperatur oder luftfeuchtigkeit
      Ich habe nun dieses Skript das die gesammelten Werte in diesem fall der stube alle 60min ausgibt. um es dann in die neu zu bringende Struktur zu erfassen jeweils nach 24h. Leider ist da was falsch in den Zeilen "to" aber ich weiß nicht wirklich was. Wie müßte das richtig aussehen ?, damit ich dann auch alle anderen Räume darin speichern kann.

      from(bucket: "iobroker")
        |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
        |> filter(fn: (r) => r["_measurement"] == "zigbee.0.00124b00290fd3fb.humidity" or r["_measurement"] == "zigbee.0.00124b00290fd3fb.temperature")
        |> filter(fn: (r) => r["_field"] == "value")
        |> aggregateWindow(every: 60m, fn: mean, createEmpty: false)
        |> yield(name: "mean")
      
        |> to(
          bucket: "raumwerte",
          tagColumns: ["zimmer"],["stube"],
          fieldFn: (r) => ({ "temperatur": r._value, "humidity": r._value })
        )
      

      Gruß
      Mico

      Marc Berg 1 Reply Last reply Reply Quote 0
      • Marc Berg
        Marc Berg Most Active @Mico last edited by Marc Berg

        @mico
        Da fehlt neben der korrekten Aufbereitung auch das Ziel-Measurement. Bin nicht ganz sicher, ob das das Ziel ist, aber wenn du es so machst:

        from(bucket: "iobroker")
          |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
          |> filter(fn: (r) => r["_measurement"] == "zigbee.0.00124b00290fd3fb.humidity" or r["_measurement"] == "zigbee.0.00124b00290fd3fb.temperature")
          |> filter(fn: (r) => r["_field"] == "value")
          |> aggregateWindow(every: 60m, fn: mean, createEmpty: false)
          |> pivot(rowKey:["_time"], columnKey: ["_measurement"], valueColumn: "_value")
          |> map(fn: (r) => ({
              _time: r._time,
              _field: "value",
              _measurement: "raumwerte",
              temperatur: r["zigbee.0.00124b00290fd3fb.temperature"],
              humidity: r["zigbee.0.00124b00290fd3fb.humidity"],
              zimmer: "stube"
            }))
         |> to( bucket: "raumwerte", tagColumns: ["zimmer"], fieldFn: (r) => ({ temperatur: r.temperatur, humidity: r.humidity }) )
        

        Dann würden die zwei Measurements in eins mit dem "Zimmer"-Tag "Stube" überführt werden. Ob es jetzt sinnvoll ist, ein neues Bucket "raumwerte" zu erstellen oder einfach das neue Measurement "raumwerte" im Bucket "iobroker" zu erstellen, ist Ansichtssache.

        Grüße aus dem Zug nach Solingen. (dessen Halt in Solingen heute entfällt 🙄 )

        M 1 Reply Last reply Reply Quote 0
        • M
          Mico @Marc Berg last edited by

          Danke für deine schnelle Antwort leider meldet er ein invalid script.

          Ich weiß noch nicht warum deswegen habe ich ein Bild wo die werte stehen beigefügt und in welcher struktur sie stehen sollten.

          Da sind die Werte:
          Screenshot 2024-11-09 081240.png

          und so sollen sie hinterher in einem neuen bucket überführt werden.

          Screenshot 2024-11-09 082007.png

          Ein neues bucket damit ich die werte aus dem iobroker nach einer Zeit löschen kann.

          Gruß
          Mico

          Marc Berg 1 Reply Last reply Reply Quote 0
          • Marc Berg
            Marc Berg Most Active @Mico last edited by Marc Berg

            @mico sagte in InfluxDB Daten aufarbeiten:

            Danke für deine schnelle Antwort leider meldet er ein invalid script.

            Hmmm, bei mir läuft das. Führe mal nur die Query (ohne "to") aus und zeige mal das Ergebnis. Es wird ja immer ausgegeben, wo genau der Fehler liegt.

            EDIT: und ja, genau so wie du jetzt beschreibst würde es dann aussehen.

            M 1 Reply Last reply Reply Quote 0
            • M
              Mico @Marc Berg last edited by

              @marc-berg said in InfluxDB Daten aufarbeiten:

              Hmmm, bei mir läuft das. Führe mal nur die Query (ohne "to") aus und zeige mal das Ergebnis. Es wird ja immer ausgegeben, wo genau der Fehler liegt.

              EDIT: und ja, genau so wie du jetzt beschreibst würde es dann aussehen.

              Ich versuche das über Create Task ist das falsch?

              M 1 Reply Last reply Reply Quote 0
              • M
                Mico @Mico last edited by

                So nun glaube ich das es geklappt hat ich habe die range verändert und es zeigte grün.

                Danke
                Mico

                Marc Berg 1 Reply Last reply Reply Quote 0
                • Marc Berg
                  Marc Berg Most Active @Mico last edited by

                  @mico sagte in InfluxDB Daten aufarbeiten:

                  So nun glaube ich das es geklappt hat ich habe die range verändert und es zeigte grün.

                  Ja, die „v.“ Variablen funktionieren im Task nicht.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    Mico @Marc Berg last edited by

                    Eine Frage noch zur besseren Ordnung der Task
                    jetzt habe ich jeden Raum mit einer Task Run für 0:00 gespeichert ist es auch möglich die Räume in einem Task zu speichern.

                    Ich habe mal das Script für 2 Räume so wie es im Moment bei mir ist.

                    option task = {name: "arbeitszimmerwerte", cron: "0 0 * * *"}
                    
                    from(bucket: "iobroker")
                        |> range(start: -24h)
                        |> filter(
                            fn: (r) =>
                                r["_measurement"] == "zigbee.0.00124b002fabe53f.humidity" or r["_measurement"]
                                    ==
                                    "zigbee.0.00124b002fabe53f.temperature",
                        )
                        |> filter(fn: (r) => r["_field"] == "value")
                        |> aggregateWindow(every: 60m, fn: mean, createEmpty: false)
                        |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value")
                        |> map(
                            fn: (r) =>
                                ({
                                    _time: r._time,
                                    _field: "value",
                                    _measurement: "raumwerte",
                                    temperatur: r["zigbee.0.00124b002fabe53f.temperature"],
                                    humidity: r["zigbee.0.00124b002fabe53f.humidity"],
                                    zimmer: "arbeitszimmer",
                                }),
                        )
                        |> to(
                            bucket: "raumwerte",
                            tagColumns: ["zimmer"],
                            fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}),
                        )
                    
                    
                    option task = {name: "badwerte", cron: "0 0 * * *"}
                    
                    from(bucket: "iobroker")
                        |> range(start: -24h)
                        |> filter(
                            fn: (r) =>
                                r["_measurement"] == "zigbee.0.00124b002fabe555.humidity" or r["_measurement"]
                                    ==
                                    "zigbee.0.00124b002fabe555.temperature",
                        )
                        |> filter(fn: (r) => r["_field"] == "value")
                        |> aggregateWindow(every: 60m, fn: mean, createEmpty: false)
                        |> pivot(rowKey: ["_time"], columnKey: ["_measurement"], valueColumn: "_value")
                        |> map(
                            fn: (r) =>
                                ({
                                    _time: r._time,
                                    _field: "value",
                                    _measurement: "raumwerte",
                                    temperatur: r["zigbee.0.00124b002fabe555.temperature"],
                                    humidity: r["zigbee.0.00124b002fabe555.humidity"],
                                    zimmer: "badwerte",
                                }),
                        )
                        |> to(
                            bucket: "raumwerte",
                            tagColumns: ["zimmer"],
                            fieldFn: (r) => ({temperatur: r.temperatur, humidity: r.humidity}),
                        )
                    
                    

                    Gruß
                    Mico

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    966
                    Online

                    31.9k
                    Users

                    80.2k
                    Topics

                    1.3m
                    Posts

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