im RedMatic Wiki ist beschrieben, wie man seine Messwerte in die InfluxDB speichern kann. Dort liegen sie nun und warten auf das nächste Housekeeping. Doch bevor die Daten in den Orkus gehen, will ich noch was damit machen.
Hier ist ein einfacher Flow, mit dem ich die Daten der letzten 24h zum Duty Cycle wieder aus der InfluxDB rausholen und im Dashboard anzeigen lassen kann:
Code: Alles auswählen
[{"id":"d684ed1d.1daca","type":"influxdb in","z":"d904ac17.536468","influxdb":"","name":"DutCycle","query":"SELECT mean(\"value\") AS \"mean_value\" FROM \"redmatic\".\"autogen\".\"CCU3/DUTY_CYCLE\" WHERE time > now() - 24h GROUP BY time(10m) FILL(null)","rawOutput":true,"precision":"","retentionPolicy":"","x":460,"y":100,"wires":[["6cf42b22.0380ec","9549a391.f8d048"]]},{"id":"54323d44.dfd114","type":"inject","z":"d904ac17.536468","name":"5m","topic":"","payload":"","payloadType":"date","repeat":"300","crontab":"","once":true,"onceDelay":"3","x":310,"y":100,"wires":[["d684ed1d.1daca"]]},{"id":"6cf42b22.0380ec","type":"change","z":"d904ac17.536468","name":"","rules":[{"t":"delete","p":"topic","pt":"msg"},{"t":"set","p":"payload","pt":"msg","to":"$.payload.results.series.[\t (\t {\t \"series\": [$.name],\t \"labels\": [\"\"],\t \"data\": [\t [\t $.values.(\t $[1] != null ? {\t \"x\": $[0].$toMillis(),\t \"y\": $[1]\t }\t \t ) \t ]\t ]\t\t }\t )\t]","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":100,"wires":[["e53c9e3.6b9aa6","48fc57ee.c887"]]},{"id":"e53c9e3.6b9aa6","type":"ui_chart","z":"d904ac17.536468","name":"Chart","group":"937d90ca.8d8b","order":1,"width":0,"height":0,"label":"","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"No data","dot":false,"ymin":"0","ymax":"100","removeOlder":"24","removeOlderPoints":"200","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"colors":["#1F77B4","#AEC7E8","#FF7F0E","#2CA02C","#98DF8A","#D62728","#FF9896","#9467BD","#C5B0D5"],"useOldStyle":false,"x":810,"y":100,"wires":[[],[]]},{"id":"9549a391.f8d048","type":"debug","z":"d904ac17.536468","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":610,"y":140,"wires":[]},{"id":"1336fd0d.66716b","type":"comment","z":"d904ac17.536468","name":"Duty Cycle der letzten 24h aus influxDB holen","info":"Einige nützliche Links:\n\n* [InfluxDB Docs](https://docs.influxdata.com/influxdb/)\n* [JSONata Exerciser](http://try.jsonata.org/)\n* [JSONata Docs](http://docs.jsonata.org/index.html/)\n* [Node-RED-Dashboard Charts](https://github.com/node-red/node-red-dashboard/blob/master/Charts.md)","x":410,"y":60,"wires":[]},{"id":"48fc57ee.c887","type":"debug","z":"d904ac17.536468","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":810,"y":140,"wires":[]},{"id":"937d90ca.8d8b","type":"ui_group","z":"","name":"Duty Cycle","tab":"ddaccebd.e9458","order":12,"disp":true,"width":"6","collapse":false},{"id":"ddaccebd.e9458","type":"ui_tab","z":"","name":"Mein Haus (RedMatic)","icon":"home","order":1}]
(A) InfluxDB
Zuerst hole ich die Daten aus der Datenbank über den InfluxDB-Node. Dazu wird alle 5 Minuten über den Inject-Node der Aufruf ausgelöst. Dies geschieht dann mit einem passenden SELECT Aufruf, in welchem die 10 minütigen Mittelwerte über die letzten 24h ermittelt werden. Die Daten lasse ich mir in der Rohform zurückgeben (Haken bei Raw Output):
Code: Alles auswählen
SELECT mean("value") AS "mean_value" FROM "redmatic"."autogen"."CCU3/DUTY_CYCLE" WHERE time > now() - 24h GROUP BY time(10m) FILL(null)
(B) Change
Jetzt müssen diese aber noch aufbereitet werden. Im Change-Node passiert dann die Magie mit Hilfe von JSONata:
Code: Alles auswählen
$.payload.results.series.[
(
{
"series": [$.name],
"labels": [""],
"data": [
[
$.values.(
$[1] != null ? {
"x": $[0].$toMillis(),
"y": $[1]
}
)
]
]
}
)
]
(C) Chart
Die Einstellung des Chart-Node ist dann nicht mehr so schwierig:
Welche Möglichkeiten der Chart-Node so bietet und warum der Payload so komisch formatiert werden muss steht natürlich wieder in der --> Doku zum Chart-Node <--
Und so sieht es dann aus (kaum ein Unterschied zum Original, nur ein längerer Zeitraum wird dargestellt):
PS: der komplette Post inkl. Bildern kann natürlich auch gerne im Wiki wiederverwendet werden.