Persist chart data over Node Red restart - cflurin/node-red-contrib-dsm GitHub Wiki
The node stores the chart data from the chart output 1. On restart the stored data is retrieved and sent to the chart input. The data can be retrieved or cleared at any time by sending the corresponding topics (retrieve
, clear
) to the input.
The data are stored in a local
variable (context).
Configuration
{
"currentState": "retrieved",
"states": {
"retrieved": {
"retrieve": "retrieved",
"store": "stored",
"clear": "cleared"
},
"stored": {
"retrieve": "retrieved",
"store": "stored",
"clear": "cleared"
},
"cleared": {
"retrieve": "retrieved",
"store": "stored",
"clear": "cleared"
}
},
"data": {
"name": "chart_data"
},
"methods": {
"init": [
"msg = {};",
"msg.payload = context.get(sm.data.name);",
"if (typeof msg.payload !== 'undefined') {",
" msg.token = 'skip';",
" node.send(msg);",
"}"
],
"retrieve": [
"msg.payload = context.get(sm.data.name);",
"if (typeof msg.payload !== 'undefined') {",
" msg.token = 'skip';",
"} else {",
" output = false;",
"}"
],
"store": [
"context.set(sm.data.name, msg.payload);",
"output = false;"
],
"clear": [
"msg.payload = [];",
"msg.token = 'skip';"
],
"default": [
"if (msg.token !== 'skip') {",
" resume('store', msg);",
"}"
],
"status": {
"fill": {
"get": "sm.currentState === 'cleared' ? 'yellow' : 'green';"
},
"shape": {
"get": "sm.currentState === 'cleared' ? 'ring' : 'dot';"
},
"text": {
"get": "sm.currentState;"
}
}
}
}
Flow
[{"id":"bb6b1f22.2dfa5","type":"ui_chart","z":"6da90f72.dff58","name":"test","group":"c72a8a5.c6a7378","order":3,"width":"0","height":"0","label":"test","chartType":"line","legend":"false","xformat":"HH:mm","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"86400","cutout":"","useOneColor":false,"colors":["#1f77b4","#ff7f0e","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":330,"y":860,"wires":["9cf7b20f.8dc02"],[](/cflurin/node-red-contrib-dsm/wiki/"9cf7b20f.8dc02"],[)},{"id":"1e97feb1.ac7a91","type":"inject","z":"6da90f72.dff58","name":"","topic":"retrieve","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":940,"wires":["9cf7b20f.8dc02"](/cflurin/node-red-contrib-dsm/wiki/"9cf7b20f.8dc02")},{"id":"9de53239.25e85","type":"inject","z":"6da90f72.dff58","name":"","topic":"clear","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":150,"y":900,"wires":["9cf7b20f.8dc02"](/cflurin/node-red-contrib-dsm/wiki/"9cf7b20f.8dc02")},{"id":"195a0d61.bffe33","type":"inject","z":"6da90f72.dff58","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":160,"y":800,"wires":["60c5f9fa.89c788"](/cflurin/node-red-contrib-dsm/wiki/"60c5f9fa.89c788")},{"id":"60c5f9fa.89c788","type":"random","z":"6da90f72.dff58","name":"","low":"1","high":"10","inte":"true","property":"payload","x":320,"y":800,"wires":["bb6b1f22.2dfa5"](/cflurin/node-red-contrib-dsm/wiki/"bb6b1f22.2dfa5")},{"id":"9cf7b20f.8dc02","type":"dsm","z":"6da90f72.dff58","name":"memory","sm_config":"{\n \"currentState\": \"retrieved\",\n \"states\": {\n \"retrieved\": {\n \"retrieve\": \"retrieved\",\n \"store\": \"stored\",\n \"clear\": \"cleared\"\n },\n \"stored\": {\n \"retrieve\": \"retrieved\",\n \"store\": \"stored\",\n \"clear\": \"cleared\"\n },\n \"cleared\": {\n \"retrieve\": \"retrieved\",\n \"store\": \"stored\",\n \"clear\": \"cleared\"\n }\n },\n \"data\": {\n \"name\": \"chart_data\"\n },\n \"methods\": {\n \"init\": [\n \"msg = {};\",\n \"msg.payload = context.get(sm.data.name);\",\n \"if (typeof msg.payload !== 'undefined') {\",\n \" msg.token = 'skip';\",\n \" node.send(msg);\",\n \"}\"\n ],\n \"retrieve\": [\n \"msg.payload = context.get(sm.data.name);\",\n \"if (typeof msg.payload !== 'undefined') {\",\n \" msg.token = 'skip';\",\n \"} else {\",\n \" output = false;\",\n \"}\"\n ],\n \"store\": [\n \"context.set(sm.data.name, msg.payload);\",\n \"output = false;\"\n ],\n \"clear\": [\n \"msg.payload = [];\",\n \"msg.token = 'skip';\"\n ],\n \"default\": [\n \"if (msg.token !== 'skip') {\",\n \" resume('store', msg);\",\n \"}\"\n ],\n \"status\": {\n \"fill\": {\n \"get\": \"sm.currentState === 'cleared' ? 'yellow' : 'green';\"\n },\n \"shape\": {\n \"get\": \"sm.currentState === 'cleared' ? 'ring' : 'dot';\"\n },\n \"text\": {\n \"get\": \"sm.currentState;\"\n }\n }\n }\n}\n","x":350,"y":920,"wires":["bb6b1f22.2dfa5"](/cflurin/node-red-contrib-dsm/wiki/"bb6b1f22.2dfa5")},{"id":"c72a8a5.c6a7378","type":"ui_group","z":"","name":"Charts","tab":"a8b1385e.93cb58","order":1,"disp":true,"width":"7","collapse":true},{"id":"a8b1385e.93cb58","type":"ui_tab","z":"","name":"ramp-themostat","icon":"dashboard"}]