Hello,
I have the following Flux query that plots the value read from a sensor over time:
from(bucket: "adeunis")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "mqtt_consumer")
|> filter(fn: (r) => r["topic"] == "adeunis")
|> filter(fn: (r) => r["_field"] == "temperatures_0_value")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
What I would like to do is to write a query that returns the difference between the last read value and a value from yesterday (let’s say yesterday @ 8.00 PM).
Could this be possible using Flux, or should I write a script?
Pretty sure this recipe will work for you.
(Untested , but this should help get you started)
CurrentRange = from(bucket: "adeunis")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "mqtt_consumer")
|> filter(fn: (r) => r["topic"] == "adeunis")
|> filter(fn: (r) => r["_field"] == "temperatures_0_value")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
PriorRange = from(bucket: "adeunis")
|> range(start: v.timeRangeStart - 24h, stop: v.timeRangeStop - 24h)
|> filter(fn: (r) => r["_measurement"] == "mqtt_consumer")
|> filter(fn: (r) => r["topic"] == "adeunis")
|> filter(fn: (r) => r["_field"] == "temperatures_0_value")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> yield(name: "mean")
# then apply the join per the example. Something similar to this but will need tweaking probably
join(tables: {curr : CurrentRange, prior: PriorRange}, on: ["topic"])
|> map(fn: (r) => ({r with deviation: r._value_curr - r._value_prior}))
You will probably need to play with the join (eg on topic, and the tabling naming, and/or the map that calculates the difference
Apparently, Flux has the difference() function. This, used with an agreggateWindow(every 24h), works pretty well for me.
Thanks for posting the final solution you ended up with 
What would be the final solution that uses difference() anyway?