Skip to content

Introductie tot Grafana Flux

Flux is een functionele data scripting taal ontworpen voor het werken met tijdreeksgegevens. Het wordt gebruikt in Grafana om queries uit te voeren op InfluxDB databases.

Basisconcepten van Flux

Flux queries bestaan uit een reeks van operaties die op data worden uitgevoerd, verbonden door de pipe-forward operator (|>). Elke operatie neemt de uitvoer van de vorige operatie als invoer.

Een basis Flux query ziet er als volgt uit:

from(bucket: "database_naam")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "meetwaarde")
  |> yield(name: "resultaat")

Datastructuur in InfluxDB

Beschikbare metingen in de Bries database

  • events: Aantekeningen en events voor testritten
  • Wspeed: Windsnelheid metingen
  • Wdir: Windrichting metingen
  • Rspeed: Rotor snelheid/toerental van de turbine
  • Rtorque: Rotorkoppel (torque) van de turbine
  • torqueFactor: Factor voor koppelberekening
  • Vspeed: Voertuigsnelheid
  • pitch: Pitch hoek van de turbinebladen
  • loadcell: Belastingmetingen van de loadcell

Tags en metadata

Voor elke meting worden de volgende tags opgeslagen:

  • runID: Uniek identificatienummer voor de testrit (bijv. "174")
  • car: Naam van het voertuig (bijv. "Bries")
  • pitchMechaniek: Type pitch mechaniek dat wordt gebruikt (bijv. "PitchTF-V2")
  • blad: Type turbineblad dat wordt gebruikt (bijv. "MW Daedalusblade 2025")

Structuur van elke meetpunt

Elk meetpunt in InfluxDB bevat de volgende velden:

  • _measurement: Type meting (zie bovenstaande categorieën)
  • _field: Meestal "value" voor meetwaarden, "annotation" voor events
  • _time: Tijdstempel van de meting (Unix timestamp in nanoseconden)
  • runID: Unieke identifier voor een testrun
  • car: Naam van het testvoertuig
  • pitchMechaniek: Type pitch mechaniek
  • blad: Type turbineblad

Line Protocol Format

InfluxDB gebruikt een speciaal formaat genaamd "Line Protocol" voor het schrijven van data. Dit is de structuur:

<measurement>[,<tag_key>=<tag_value>] <field_key>=<field_value> [<timestamp>]

Bijvoorbeeld:

Wspeed,runID=174,car=Bries,pitchMechaniek="PitchTF-V2",blad="MW\ Daedalusblade\ 2025" value=0.0 1744894917329000

Deze regel betekent:

  • Measurement: Wspeed (windsnelheid)
  • Tags: runID=174, car=Bries, pitchMechaniek=PitchTF-V2, blad=MW Daedalusblade 2025
  • Field: value=0.0
  • Timestamp: 1744894917329000 (nanoseconden sinds Unix epoch)

Basisbewerkingen in Flux

Gegevens ophalen met from()

from(bucket: "Bries")

Tijdsbereik selecteren met range()

|> range(start: -1h)  // Laatste uur
|> range(start: -1d, stop: now())  // Laatste 24 uur
|> range(start: 2023-05-01T00:00:00Z, stop: 2023-05-02T00:00:00Z)  // Specifieke periode

Filteren met filter()

|> filter(fn: (r) => r._measurement == "Wspeed")  // Filter op meetwaarde
|> filter(fn: (r) => r.runID == "174")  // Filter op specifieke run
|> filter(fn: (r) => r._field == "value")  // Filter op veld

Resultaat teruggeven met yield()

|> yield(name: "resultaat_naam")

Dit benoemt je resultaat, wat handig is voor het identificeren van verschillende resultaatsets in Grafana.