fix(trends): add msg.timestamp to chart data points
Some checks failed
CI / lint-and-test (push) Has been cancelled

FlowFuse ui-chart with xAxisType=time may need an explicit timestamp
on each msg for the time axis to render. Added Date.now() as
msg.timestamp on the per-pump dispatcher flow/power outputs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
znetsixe
2026-04-14 07:59:04 +02:00
parent 82db2953e9
commit 06d81169e8
2 changed files with 6 additions and 5 deletions

View File

@@ -882,6 +882,7 @@ def build_ui_tab():
f"dispatch_{pump}", TAB_UI, LANE_X[1], y_p + 40, f"dispatch_{pump}", TAB_UI, LANE_X[1], y_p + 40,
f"dispatch {label}", f"dispatch {label}",
"const p = msg.payload || {};\n" "const p = msg.payload || {};\n"
"const ts = Date.now();\n"
"return [\n" "return [\n"
" {payload: String(p.state || 'idle')},\n" " {payload: String(p.state || 'idle')},\n"
" {payload: String(p.mode || 'auto')},\n" " {payload: String(p.mode || 'auto')},\n"
@@ -890,8 +891,8 @@ def build_ui_tab():
" {payload: String(p.power || 'n/a')},\n" " {payload: String(p.power || 'n/a')},\n"
" {payload: String(p.pUp || 'n/a')},\n" " {payload: String(p.pUp || 'n/a')},\n"
" {payload: String(p.pDn || 'n/a')},\n" " {payload: String(p.pDn || 'n/a')},\n"
" p.flowNum != null ? {topic: '" + label + "', payload: p.flowNum} : null,\n" " p.flowNum != null ? {topic: '" + label + "', payload: p.flowNum, timestamp: ts} : null,\n"
" p.powerNum != null ? {topic: '" + label + "', payload: p.powerNum} : null,\n" " p.powerNum != null ? {topic: '" + label + "', payload: p.powerNum, timestamp: ts} : null,\n"
"];", "];",
outputs=9, outputs=9,
wires=[ wires=[

View File

@@ -2016,7 +2016,7 @@
"type": "function", "type": "function",
"z": "tab_ui", "z": "tab_ui",
"name": "dispatch Pump A", "name": "dispatch Pump A",
"func": "const p = msg.payload || {};\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump A', payload: p.flowNum} : null,\n p.powerNum != null ? {topic: 'Pump A', payload: p.powerNum} : null,\n];", "func": "const p = msg.payload || {};\nconst ts = Date.now();\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump A', payload: p.flowNum, timestamp: ts} : null,\n p.powerNum != null ? {topic: 'Pump A', payload: p.powerNum, timestamp: ts} : null,\n];",
"outputs": 9, "outputs": 9,
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
@@ -2382,7 +2382,7 @@
"type": "function", "type": "function",
"z": "tab_ui", "z": "tab_ui",
"name": "dispatch Pump B", "name": "dispatch Pump B",
"func": "const p = msg.payload || {};\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump B', payload: p.flowNum} : null,\n p.powerNum != null ? {topic: 'Pump B', payload: p.powerNum} : null,\n];", "func": "const p = msg.payload || {};\nconst ts = Date.now();\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump B', payload: p.flowNum, timestamp: ts} : null,\n p.powerNum != null ? {topic: 'Pump B', payload: p.powerNum, timestamp: ts} : null,\n];",
"outputs": 9, "outputs": 9,
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",
@@ -2748,7 +2748,7 @@
"type": "function", "type": "function",
"z": "tab_ui", "z": "tab_ui",
"name": "dispatch Pump C", "name": "dispatch Pump C",
"func": "const p = msg.payload || {};\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump C', payload: p.flowNum} : null,\n p.powerNum != null ? {topic: 'Pump C', payload: p.powerNum} : null,\n];", "func": "const p = msg.payload || {};\nconst ts = Date.now();\nreturn [\n {payload: String(p.state || 'idle')},\n {payload: String(p.mode || 'auto')},\n {payload: String(p.ctrl || 'n/a')},\n {payload: String(p.flow || 'n/a')},\n {payload: String(p.power || 'n/a')},\n {payload: String(p.pUp || 'n/a')},\n {payload: String(p.pDn || 'n/a')},\n p.flowNum != null ? {topic: 'Pump C', payload: p.flowNum, timestamp: ts} : null,\n p.powerNum != null ? {topic: 'Pump C', payload: p.powerNum, timestamp: ts} : null,\n];",
"outputs": 9, "outputs": 9,
"noerr": 0, "noerr": 0,
"initialize": "", "initialize": "",