OpenMarine
JsonPath trouble and a solution - Printable Version

+- OpenMarine (https://forum.openmarine.net)
+-- Forum: OpenPlotter (https://forum.openmarine.net/forumdisplay.php?fid=1)
+--- Forum: Node Red (https://forum.openmarine.net/forumdisplay.php?fid=15)
+--- Thread: JsonPath trouble and a solution (/showthread.php?tid=652)



JsonPath trouble and a solution - PaddyB - 2017-07-27

A few weeks back my node-red started using 100% CPU after an update.

Finally tracked it down to JsonPath node  filtering SignalK data from a websocket node. Annoying as I lost the engine/alternator/exhaust temperatures.

Asking on the node-red google group didn't reveal why it was happening but came up with what looks to be a better way to filter-
Jsonata ->
http://try.jsonata.org/
http://docs.jsonata.org/
https://github.com/jsonata-js/jsonata/blob/master/tutorial.md

Looks very powerful, filtering the engine temp json is this in a change node-
  • msg.payload.updates.values[path="propulsion.eng.temperature"].value
though needed to add a switch node set to "payload is not null" to filter out undefined messages from signalk messages not containing the eng temp data. 

Code:
[
   {
       "id": "67b79641.1fad68",
       "type": "websocket in",
       "z": "749e8283.293f4c",
       "name": "SignalK input",
       "server": "fc1b2b62.0b63a8",
       "client": "",
       "x": 90,
       "y": 180,
       "wires": [
           [
               "20af45d9.7fe30a"
           ]
       ]
   },
   {
       "id": "d652486c.7ed398",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "minute",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 160,
       "wires": [
           [
               "cb80fafe.8bc1d8"
           ]
       ]
   },
   {
       "id": "cb80fafe.8bc1d8",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 160,
       "wires": [
           [
               "985338c6.d20748"
           ]
       ]
   },
   {
       "id": "985338c6.d20748",
       "type": "ui_chart",
       "z": "749e8283.293f4c",
       "name": "EngineGraph",
       "group": "839affdb.33ce",
       "order": 0,
       "width": "23",
       "height": "7",
       "label": "Engine temperature history",
       "chartType": "line",
       "legend": "true",
       "xformat": "HH:mm",
       "interpolate": "linear",
       "nodata": "data",
       "ymin": "",
       "ymax": "",
       "removeOlder": "4",
       "removeOlderPoints": "",
       "removeOlderUnit": "3600",
       "cutout": "",
       "colors": [
           "#1f77b4",
           "#aec7e8",
           "#ff7f0e",
           "#2ca02c",
           "#98df8a",
           "#d62728",
           "#ff9896",
           "#9467bd",
           "#c5b0d5"
       ],
       "x": 1040,
       "y": 160,
       "wires": [
           [],
           []
       ]
   },
   {
       "id": "f66f5fb8.176a1",
       "type": "ui_gauge",
       "z": "749e8283.293f4c",
       "name": "EngTempGauge",
       "group": "f5ff732a.35433",
       "order": 1,
       "width": "3",
       "height": "5",
       "gtype": "gage",
       "title": "Engine temperature",
       "label": "Deg C",
       "format": "{{value}}",
       "min": 0,
       "max": "120",
       "colors": [
           "#00b500",
           "#e6e600",
           "#ca3838"
       ],
       "seg1": "",
       "seg2": "",
       "x": 1040,
       "y": 200,
       "wires": []
   },
   {
       "id": "b3490042.bbd67",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "minute",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 240,
       "wires": [
           [
               "c476748a.0d02b8"
           ]
       ]
   },
   {
       "id": "c476748a.0d02b8",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 240,
       "wires": [
           [
               "c64d6283.aca53"
           ]
       ]
   },
   {
       "id": "c64d6283.aca53",
       "type": "ui_chart",
       "z": "749e8283.293f4c",
       "name": "Alt graph",
       "group": "839affdb.33ce",
       "order": 0,
       "width": "23",
       "height": "7",
       "label": "Alt temperature history",
       "chartType": "line",
       "legend": "false",
       "xformat": "HH:mm",
       "interpolate": "linear",
       "nodata": "",
       "ymin": "",
       "ymax": "",
       "removeOlder": "4",
       "removeOlderPoints": "",
       "removeOlderUnit": "3600",
       "cutout": "",
       "colors": [
           "#1f77b4",
           "#aec7e8",
           "#ff7f0e",
           "#2ca02c",
           "#98df8a",
           "#d62728",
           "#ff9896",
           "#9467bd",
           "#c5b0d5"
       ],
       "x": 1020,
       "y": 240,
       "wires": [
           [],
           []
       ]
   },
   {
       "id": "2e9c3f90.ea532",
       "type": "ui_gauge",
       "z": "749e8283.293f4c",
       "name": "AltTempGauge",
       "group": "f5ff732a.35433",
       "order": 1,
       "width": "3",
       "height": "5",
       "gtype": "gage",
       "title": "Alternator  temperature",
       "label": "Deg C",
       "format": "{{value}}",
       "min": 0,
       "max": "120",
       "colors": [
           "#00b500",
           "#e6e600",
           "#ca3838"
       ],
       "seg1": "",
       "seg2": "",
       "x": 1040,
       "y": 280,
       "wires": []
   },
   {
       "id": "41967fda.ebcdf",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "minute",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 320,
       "wires": [
           [
               "5ac0570d.33b958"
           ]
       ]
   },
   {
       "id": "5ac0570d.33b958",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 320,
       "wires": [
           [
               "9ca91b03.6c5c38"
           ]
       ]
   },
   {
       "id": "9ca91b03.6c5c38",
       "type": "ui_chart",
       "z": "749e8283.293f4c",
       "name": "ExhGraph",
       "group": "839affdb.33ce",
       "order": 0,
       "width": "23",
       "height": "7",
       "label": "Exh temperature history",
       "chartType": "line",
       "legend": "false",
       "xformat": "HH:mm",
       "interpolate": "linear",
       "nodata": "waiting",
       "ymin": "",
       "ymax": "",
       "removeOlder": "4",
       "removeOlderPoints": "",
       "removeOlderUnit": "3600",
       "cutout": "",
       "colors": [
           "#1f77b4",
           "#aec7e8",
           "#ff7f0e",
           "#2ca02c",
           "#98df8a",
           "#d62728",
           "#ff9896",
           "#9467bd",
           "#c5b0d5"
       ],
       "x": 1020,
       "y": 320,
       "wires": [
           [],
           []
       ]
   },
   {
       "id": "acffaa91.dcbd08",
       "type": "ui_gauge",
       "z": "749e8283.293f4c",
       "name": "ExhTempGauge",
       "group": "f5ff732a.35433",
       "order": 1,
       "width": "3",
       "height": "5",
       "gtype": "gage",
       "title": "Exhaust temperature",
       "label": "Deg C",
       "format": "{{value}}",
       "min": 0,
       "max": "120",
       "colors": [
           "#00b500",
           "#e6e600",
           "#ca3838"
       ],
       "seg1": "",
       "seg2": "",
       "x": 1040,
       "y": 360,
       "wires": []
   },
   {
       "id": "ee7ce1a6.f4d62",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "second",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 360,
       "wires": [
           [
               "2af0ffc5.36311"
           ]
       ]
   },
   {
       "id": "2af0ffc5.36311",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 360,
       "wires": [
           [
               "acffaa91.dcbd08"
           ]
       ]
   },
   {
       "id": "23f49bc6.7d4f34",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "minute",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 280,
       "wires": [
           [
               "30135c60.5c6134"
           ]
       ]
   },
   {
       "id": "30135c60.5c6134",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 280,
       "wires": [
           [
               "2e9c3f90.ea532"
           ]
       ]
   },
   {
       "id": "accdb940.5e5d38",
       "type": "delay",
       "z": "749e8283.293f4c",
       "name": "",
       "pauseType": "rate",
       "timeout": "5",
       "timeoutUnits": "seconds",
       "rate": "1",
       "nbRateUnits": "1",
       "rateUnits": "second",
       "randomFirst": "1",
       "randomLast": "5",
       "randomUnits": "seconds",
       "drop": true,
       "x": 650,
       "y": 200,
       "wires": [
           [
               "6cddc5a1.97f00c"
           ]
       ]
   },
   {
       "id": "6cddc5a1.97f00c",
       "type": "function",
       "z": "749e8283.293f4c",
       "name": "Convert to deg C",
       "func": "var numInput = Number(msg.payload);\nmsg.topic = \"Eng\";\nvar T =  numInput-273.15;\nmsg.payload = T.toFixed(1);\nreturn msg;",
       "outputs": 1,
       "noerr": 0,
       "x": 830,
       "y": 200,
       "wires": [
           [
               "f66f5fb8.176a1"
           ]
       ]
   },
   {
       "id": "ad76e510.526488",
       "type": "comment",
       "z": "749e8283.293f4c",
       "name": "Engine temperature guages and graphs",
       "info": "",
       "x": 174.00005340576172,
       "y": 109.00006675720215,
       "wires": []
   },
   {
       "id": "dbc264db.e996e8",
       "type": "change",
       "z": "749e8283.293f4c",
       "name": "Filter engine temp",
       "rules": [
           {
               "t": "set",
               "p": "payload",
               "pt": "msg",
               "to": "msg.payload.updates.values[path=\"propulsion.eng.temperature\"].value",
               "tot": "jsonata"
           }
       ],
       "action": "",
       "property": "",
       "from": "",
       "to": "",
       "reg": false,
       "x": 270,
       "y": 160,
       "wires": [
           [
               "12d0fbb4.557744"
           ]
       ]
   },
   {
       "id": "20af45d9.7fe30a",
       "type": "json",
       "z": "749e8283.293f4c",
       "name": "",
       "pretty": false,
       "x": 70,
       "y": 320,
       "wires": [
           [
               "dbc264db.e996e8",
               "8b31ff78.f9f4",
               "4e228623.5d83f8"
           ]
       ]
   },
   {
       "id": "12d0fbb4.557744",
       "type": "switch",
       "z": "749e8283.293f4c",
       "name": "Is it empty?",
       "property": "payload",
       "propertyType": "msg",
       "rules": [
           {
               "t": "nnull"
           }
       ],
       "checkall": "true",
       "outputs": 1,
       "x": 330,
       "y": 200,
       "wires": [
           [
               "d652486c.7ed398",
               "accdb940.5e5d38"
           ]
       ]
   },
   {
       "id": "8b31ff78.f9f4",
       "type": "change",
       "z": "749e8283.293f4c",
       "name": "Filter alt temp",
       "rules": [
           {
               "t": "set",
               "p": "payload",
               "pt": "msg",
               "to": "msg.payload.updates.values[path=\"propulsion.alt.temperature\"].value",
               "tot": "jsonata"
           }
       ],
       "action": "",
       "property": "",
       "from": "",
       "to": "",
       "reg": false,
       "x": 280,
       "y": 240,
       "wires": [
           [
               "4a8866f9.186ab8"
           ]
       ]
   },
   {
       "id": "4a8866f9.186ab8",
       "type": "switch",
       "z": "749e8283.293f4c",
       "name": "Is it empty?",
       "property": "payload",
       "propertyType": "msg",
       "rules": [
           {
               "t": "nnull"
           }
       ],
       "checkall": "true",
       "outputs": 1,
       "x": 350,
       "y": 280,
       "wires": [
           [
               "b3490042.bbd67",
               "23f49bc6.7d4f34"
           ]
       ]
   },
   {
       "id": "4e228623.5d83f8",
       "type": "change",
       "z": "749e8283.293f4c",
       "name": "Filter exhaust temp",
       "rules": [
           {
               "t": "set",
               "p": "payload",
               "pt": "msg",
               "to": "msg.payload.updates.values[path=\"propulsion.exh.temperature\"].value",
               "tot": "jsonata"
           }
       ],
       "action": "",
       "property": "",
       "from": "",
       "to": "",
       "reg": false,
       "x": 290,
       "y": 340,
       "wires": [
           [
               "3d303b8e.883b74"
           ]
       ]
   },
   {
       "id": "3d303b8e.883b74",
       "type": "switch",
       "z": "749e8283.293f4c",
       "name": "Is it empty?",
       "property": "payload",
       "propertyType": "msg",
       "rules": [
           {
               "t": "nnull"
           }
       ],
       "checkall": "true",
       "outputs": 1,
       "x": 350,
       "y": 380,
       "wires": [
           [
               "41967fda.ebcdf",
               "ee7ce1a6.f4d62"
           ]
       ]
   },
   {
       "id": "fc1b2b62.0b63a8",
       "type": "websocket-listener",
       "z": "",
       "path": "ws://localhost:3000/signalk/v1/stream",
       "wholemsg": "false"
   },
   {
       "id": "839affdb.33ce",
       "type": "ui_group",
       "z": "",
       "name": "Eng Temp Graphs",
       "tab": "9ba2713.ee8369",
       "disp": true,
       "width": "23"
   },
   {
       "id": "f5ff732a.35433",
       "type": "ui_group",
       "z": "",
       "name": "Gauges",
       "tab": "de6fba2.670c748",
       "disp": true,
       "width": "6"
   },
   {
       "id": "9ba2713.ee8369",
       "type": "ui_tab",
       "z": "",
       "name": "Graphs",
       "icon": "dashboard",
       "order": 2
   },
   {
       "id": "de6fba2.670c748",
       "type": "ui_tab",
       "z": "",
       "name": "Gauges",
       "icon": "dashboard",
       "order": 1
   }
]