fix(trends): add msg.timestamp to chart data points
Some checks failed
CI / lint-and-test (push) Has been cancelled
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:
@@ -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=[
|
||||||
|
|||||||
@@ -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": "",
|
||||||
|
|||||||
Reference in New Issue
Block a user