Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Off Topic
    4. InfluxDB
    5. Grünlandtemperatursumme und Flux

    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

    Grünlandtemperatursumme und Flux

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators @Marc Berg last edited by

      @marc-berg du bist nicht der erste

      https://forum.iobroker.net/post/762283

      allerdings rechnest du selber 🙂

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

        @homoran sagte in Grünlandtemperatursumme und Flux:

        @marc-berg du bist nicht der erste

        Oh, das hätte ich jetzt nicht erwartet, dass das noch andere interessiert. 🙂

        A 1 Reply Last reply Reply Quote 0
        • A
          andreasploetz @Marc Berg last edited by

          @marc-berg Hallo Marc, kurze Rückfrage zu deinem obigen Code, ziehst du dort nur die positiven Tagesmitteltemperaturen oder auch die negativen, was falsch wäre und startest du jährlich zum 1.1. neu?

          Leider sind meine Flux Kenntnisse aktuell noch sehr rudimentär 😉

          Marc Berg 2 Replies Last reply Reply Quote 0
          • Marc Berg
            Marc Berg Most Active @andreasploetz last edited by

            @andreasploetz sagte in Grünlandtemperatursumme und Flux:

            kurze Rückfrage zu deinem obigen Code, ziehst du dort nur die positiven Tagesmitteltemperaturen

            Ich hätte wetten können, das das drin war, aber du hast natürlich Recht, hier die korrigierte Abfrage, in welcher Tagesmitteltemperaturen unter 0°C gefiltert werden.

            import "date"
            import "timezone"
            option location = timezone.location(name: "Europe/Berlin")
             
            from(bucket: "iobroker")
              |> range(start:date.truncate(t:now(), unit:1y))
              |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature")
              |> filter(fn: (r) => r["_field"] == "value")
              |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_stop",createEmpty:false)
              |> filter(fn: (r) => r["_value"] > 0)
              |> reduce(
              identity: {sum: 0.0},
                fn: (r, accumulator) => ({
                    sum: if date.month(t: r._time) == 1 then r._value * 0.5 + accumulator.sum
                    else if date.month(t: r._time) == 2 then r._value * 0.75 + accumulator.sum
                    else r._value + accumulator.sum
                  })
            )
              |> keep(columns: ["sum"])
              |> rename(columns: {sum: "Grünlandtemperatursumme"})
            

            und startest du jährlich zum 1.1. neu?

            Ja das war und ist mit drin, es wird immer das aktuelle Jahr berechnet:

              |> range(start:date.truncate(t:now(), unit:1y))
            
            L 1 Reply Last reply Reply Quote 1
            • Marc Berg
              Marc Berg Most Active @andreasploetz last edited by Marc Berg

              @andreasploetz

              Und hier noch die Darstellung in Jahresverlauf:

              import "date"
              import "timezone"
              option location = timezone.location(name: "Europe/Berlin")
              
              from(bucket: "iobroker")
                |> range(start:date.truncate(t:now(), unit:1y))
                |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature")
                |> filter(fn: (r) => r["_field"] == "value")
                |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:true)
                |> filter(fn: (r) => r["_value"] > 0)
                |> map(fn: (r) => ({
                      _time: r._time,
                      sum: if date.month(t: r._time) == 1 then r._value * 0.5
                      else if date.month(t: r._time) == 2 then r._value * 0.75
                      else r._value
                    }))
                |> cumulativeSum(columns: ["sum"])
                |> rename(columns: {sum: "Grünlandtemperatursumme"})
              

              In Abhängigkeit von dieser Zeile und ob man "_start" bzw. "_stop" einträgt

              |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:true)
              

              wird die Summe entweder für den aktuellen oder den Folgetag dargestellt. Da bin ich mir unsicher, was fachlich korrekter ist.

              A 1 Reply Last reply Reply Quote 0
              • A
                andreasploetz @Marc Berg last edited by andreasploetz

                In Abhängigkeit von dieser Zeile und ob man "_start" bzw. "_stop" einträgt

                |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:true)
                

                wird die Summe entweder für den aktuellen oder den Folgetag dargestellt. Da bin ich mir unsicher, was fachlich korrekter ist.

                Fachlich korrekt ist der aktuelle Tag, da an diesem ja der Wert faktisch auch vor bzw. bis 0 Uhr erreicht wurde.

                Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen" 🙂

                Ansonsten top Arbeit!

                d516ae8b-c82f-4058-9901-d57eb1b4793a-image.png

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

                  @andreasploetz sagte in Grünlandtemperatursumme und Flux:

                  Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen

                  probier' mal:

                  import "date"
                  import "timezone"
                  option location = timezone.location(name: "Europe/Berlin")
                  
                  from(bucket: "iobroker")
                    |> range(start:date.truncate(t:now(), unit:1y))
                    |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature")
                    |> filter(fn: (r) => r["_field"] == "value")
                    |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:false)
                    |> filter(fn: (r) => r["_value"] > 0 )
                    |> aggregateWindow(every: 1d,fn:last,timeSrc: "_start",createEmpty:true)
                    |> fill(column: "_value", value:0.0)
                    |> map(fn: (r) => ({
                          _time: r._time,
                          sum: if date.month(t: r._time) == 1 then r._value * 0.5
                          else if date.month(t: r._time) == 2 then r._value * 0.75
                          else r._value
                        }))
                    |> cumulativeSum(columns: ["sum"])
                    |> rename(columns: {sum: "Grünlandtemperatursumme"})
                  
                  A 1 Reply Last reply Reply Quote 1
                  • A
                    andreasploetz @Marc Berg last edited by

                    @marc-berg said in Grünlandtemperatursumme und Flux:

                    @andreasploetz sagte in Grünlandtemperatursumme und Flux:

                    Was noch schön wäre, wenn die Tage mit negativen Temperaturmittelwerten auch dargestellt werden bzw. dann mit den letzten zu verwendenden positiven Werten unverändert zu sehen sind - dann wäre das ganze einfacher zu "lesen

                    probier' mal:

                    import "date"
                    import "timezone"
                    option location = timezone.location(name: "Europe/Berlin")
                    
                    from(bucket: "iobroker")
                      |> range(start:date.truncate(t:now(), unit:1y))
                      |> filter(fn: (r) => r["_measurement"] == "mqtt.0.Lora.esp03.temperature")
                      |> filter(fn: (r) => r["_field"] == "value")
                      |> aggregateWindow(every: 1d,fn:mean,timeSrc: "_start",createEmpty:false)
                      |> filter(fn: (r) => r["_value"] > 0 )
                      |> aggregateWindow(every: 1d,fn:last,timeSrc: "_start",createEmpty:true)
                      |> fill(column: "_value", value:0.0)
                      |> map(fn: (r) => ({
                            _time: r._time,
                            sum: if date.month(t: r._time) == 1 then r._value * 0.5
                            else if date.month(t: r._time) == 2 then r._value * 0.75
                            else r._value
                          }))
                      |> cumulativeSum(columns: ["sum"])
                      |> rename(columns: {sum: "Grünlandtemperatursumme"})
                    

                    Perfekt - passt! Vielen Dank.

                    1 Reply Last reply Reply Quote 0
                    • L
                      lansester @Marc Berg last edited by lansester

                      @marc-berg
                      Sehr genial, ich war auf der Suche nach einer Lösung um im IoBroker mit den in der InfluxDB gespeicherten Daten die Grünlandtemp zu berechnen.
                      Aber mal eine womöglich etwas blöde Frage:
                      Ist das Javascript, so dass ich es direkt als Skript verwenden kann und muss nur den Datenpunkt meines Außentemp-Sensors angeben?
                      Ich hab mir den Code angesehen und sehe nicht, wo der kummulierte Wert als Ergebnis zurück gegeben wird oder (noch besser) direkt in einen Datenpunkt geschrieben wird.

                      Mein Ziel:
                      Einmal pro Tag ein Skript laufen lassen (Blockly oder Javascript), welches aus den vorhandenen Daten in der InfluxDB (Datenpunkt des Temp-Sensors) die aktuelle Gründlandtemperatur berechnet und in einem Objekt/Datenpunkt ablegt.
                      Das Objekt würde ich dann wiederum mit loggen und zur Darstellung nutzen.

                      VIELEN DANK! 👍
                      Schön zu sehen, dass auch andere Interesse an sowas haben. 😁

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

                        @lansester sagte in Grünlandtemperatursumme und Flux:

                        Ist das Javascript, so dass ich es direkt als Skript verwenden kann und muss nur den Datenpunkt meines Außentemp-Sensors angeben?

                        Nein, das ist kein Javascript, sondern Flux, also die Standard-Abfragesprache der InfluxDB 2.x

                        Mein Ziel:
                        Einmal pro Tag ein Skript laufen lassen (Blockly oder Javascript), welches aus den vorhandenen Daten in der InfluxDB (Datenpunkt des Temp-Sensors) die aktuelle Gründlandtemperatur berechnet und in einem Objekt/Datenpunkt ablegt.
                        Das Objekt würde ich dann wiederum mit loggen und zur Darstellung nutzen.

                        Genau diesem Umweg benötigst du mit meiner Abfrage eben nicht. Die Abfrage setzt einen Datenpunkt mit Außentemperaturen voraus, der mindestens stündlich in die InfluxDB loggen sollte. Diese Abfrage kannst du 1:1 z.B. in Grafana einfügen (Datenpunkt natürlich anpassen) und bist damit fertig.

                        255fc85e-f7ad-4326-aa30-258f099f4f7e-grafik.png

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        642
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        dingediedieweltnichtbraucht flux influxdb
                        4
                        11
                        705
                        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