This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
JsonPath trouble and a solution
#1
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/bl...utorial.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
   }
]
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)