238 lines
40 KiB
JSON
238 lines
40 KiB
JSON
[
|
|
{
|
|
"id": "b2b17973657164b1",
|
|
"type": "tab",
|
|
"label": "My_Station",
|
|
"disabled": false,
|
|
"info": "",
|
|
"env": []
|
|
},
|
|
{
|
|
"id": "7fd27bdf3a7ef97c",
|
|
"type": "http response",
|
|
"z": "b2b17973657164b1",
|
|
"name": "http/My_Station$",
|
|
"statusCode": "",
|
|
"headers": {},
|
|
"x": 870,
|
|
"y": 100,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "edacfd20a4c15fe3",
|
|
"type": "http in",
|
|
"z": "b2b17973657164b1",
|
|
"name": "",
|
|
"url": "/My_Station$",
|
|
"method": "get",
|
|
"upload": false,
|
|
"swaggerDoc": "",
|
|
"x": 130,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"bf8abe7527f5586a"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ffb5986fcd4e0582",
|
|
"type": "mqtt in",
|
|
"z": "b2b17973657164b1",
|
|
"name": "",
|
|
"topic": "jmri/timetable",
|
|
"qos": "1",
|
|
"datatype": "auto-detect",
|
|
"broker": "cafe9d5b.d4035",
|
|
"nl": false,
|
|
"rap": false,
|
|
"inputs": 0,
|
|
"x": 90,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"615bcd1b55054f49",
|
|
"de485296b0c3b7ee"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "615bcd1b55054f49",
|
|
"type": "debug",
|
|
"z": "b2b17973657164b1",
|
|
"name": "mqtt message",
|
|
"active": false,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "payload",
|
|
"targetType": "msg",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 300,
|
|
"y": 400,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "de485296b0c3b7ee",
|
|
"type": "function",
|
|
"z": "b2b17973657164b1",
|
|
"name": "Generate Clock and Schedule Table",
|
|
"func": "var stations_to_be_displayed = \"My_Station_List\"\n\nvar type = msg.payload[0].type\n\n\n/* Variable for content in the text field\n of the timetable \"yes\" or \"no\" */\nvar FPtext = \"yes\";\nvar cancel = \"cancelled\";\nvar max_no_entries = 10000;\nvar FPlength = 0;\n\n/* If you want scrolling text set run to \"yes\" */\nvar run = \"yes\";\nvar stationRR = \"\";\n\n/* Clock */\nif (type == \"clock\") {\n\n var time = msg.payload[0].time\n var emblem = msg.payload[0].emblem\n \n // console.log(\"emblem ?\", emblem, \"?\", typeof(time), emblem === \"GB (British Rail)\")\n msg.payload = ({ \"emblem\" : emblem, \"time\" : time});\n // console.log(msg.payload)\n return msg;\n}\n\n/* Schedule table */\nvar list = []\n\nvar station = flow.get(\"station\") || \"\";\nvar platform = flow.get(\"platform\") || \"\";\n\n\nif (type == \"schedule\" ){\n \n \n var jObj = msg.payload\n var all_entries = Object.keys(jObj).length;\n // console.log(\"all entries\" + all_entries)\n var count = 0;\n for (var i = 0; i < all_entries; i++) {\n var station_name = msg.payload[i].station_name\n var platform = msg.payload[i].platform\n if (stations_to_be_displayed.includes(station_name)) {\n count = count + 1;\n }\n // console.log(count);\n }\n // console.log(count);\n if (max_no_entries < count) {\n var no_entries = max_no_entries\n } else {\n var no_entries = count\n }\n // console.log(\"no_entries\" + no_entries)\n list = []\n // var j = 0\n var j = 0\n for (var i = 0; i < all_entries; i++) {\n var station_name = msg.payload[i].station_name\n // console.log(\"j = \" + j + \" station_name = \" + station_name)\n if (stations_to_be_displayed.includes(station_name)){\n // console.log(\"j2 = \" + j + \" station_name = \" + station_name)\n var train_name = msg.payload[i].train_name\n var platform = msg.payload[i].platform.substring(0,20) // limit length of string to 20 chars to fit on display\n var station_arrival_time = msg.payload[i].station_arrival_time\n var station_departure_time = msg.payload[i].station_departure_time\n var first_station = msg.payload[i].first_station.substring(0, 20) // limit length of string to 20 chars to fit on display\n var last_station = msg.payload[i].last_station.substring(0, 20) // limit length of string to 20 chars to fit on display\n var via = msg.payload[i].via\n\n var arrival_time = station_departure_time\n \n list[j] = ({\n point: \"\", platform: platform, station_arrival_time: station_arrival_time, station_departure_time: station_departure_time, \n train: train_name, first_station: first_station, last_station: last_station, via: via,});\n j++;\n }\n if (j > count) {\n break;\n }\n }\n msg.payload = list;\n return msg;\n}",
|
|
"outputs": 1,
|
|
"timeout": 0,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"libs": [],
|
|
"x": 410,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"de14de84c77ae188",
|
|
"c5e8ca11781a98b6"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "de14de84c77ae188",
|
|
"type": "debug",
|
|
"z": "b2b17973657164b1",
|
|
"name": "schedule list and clock",
|
|
"active": false,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "payload",
|
|
"targetType": "msg",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 720,
|
|
"y": 400,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "c5e8ca11781a98b6",
|
|
"type": "websocket out",
|
|
"z": "b2b17973657164b1",
|
|
"name": "[ws] /ws/My_Station$",
|
|
"server": "My_Station$_ref",
|
|
"client": "",
|
|
"x": 920,
|
|
"y": 340,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "ce10a6e6ebfc838d",
|
|
"type": "template",
|
|
"z": "b2b17973657164b1",
|
|
"name": "Template",
|
|
"field": "payload",
|
|
"fieldType": "msg",
|
|
"format": "handlebars",
|
|
"syntax": "mustache",
|
|
"template": "<!doctype html>\n<html>\n <head>\n <style>\n {{{payload.style}}}\n </style>\n <meta charset=\"utf-8\">\n <title>Timetable</title>\n <script type=\"text/javascript\">\n var ws;\n var wsUri = \"ws:\";\n var loc = window.location;\n console.log(\"loc\",loc);\n if (loc.protocol === \"https:\") { wsUri = \"wss:\"; }\n // This needs to point to the web socket in the Node-RED flow\n // ... in this case it's ws/My_Station$\n wsUri += \"//\" + loc.host + loc.pathname.replace(\"My_Station$\",\"ws/My_Station$\");\n\n function wsConnect() {\n console.log(\"connect\",wsUri);\n ws = new WebSocket(wsUri);\n //var line = \"\"; // either uncomment this for a building list of messages\n ws.onmessage = function(msg) {\n console.log(msg);\n var line = \"\"; // or uncomment this to overwrite the existing message\n var emblem0 = \"\";\n // parse the incoming message as a JSON object\n var data = msg.data;\n console.log(\"output\", data); \n obj = JSON.parse(data);\n console.log(\"obj\", obj);\n var tag = Object.keys(obj);\n\n if( tag.includes(\"time\")) {\n //get fault\n obj0 = obj.time;\n document.getElementById('time').innerHTML = obj0;\n }\n\n if( tag.includes(\"emblem\")) {\n //get fault\n obj1 = obj.emblem;\n // document.getElementById('emblem').innerHTML = obj1;\n if (obj1 == \"GB (British Rail)\"){\n src1 = \"data:image/png;base64,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\" \n emblem0 += \"<div> \";\n emblem0 += '<img width = \"100\" height = \"62\" src= ' + src1 + ' />';\n emblem0 += \"<div>\";\n\n document.getElementById('emblem').innerHTML = emblem0;\n }\n else if(obj1 == \"Germany (DB)\"){\n emblem0 += '<div class=\"DB-logo\">'\n emblem0 += '<svg xmlns:svg=\"http://www.w3.org/2000/svg\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.0\" width=\"744.09448\" height=\"526.5354\" class=\"skalierendes-svg\" viewBox=\"0 0 745 527\" id=\"svg2367\">'\n emblem0 += '<defs id=\"defs2369\"/>'\n emblem0 += '<g transform=\"translate(-593.32638,-244.47955)\" id=\"layer1\">'\n emblem0 += '<g transform=\"matrix(2.8072397,0,0,2.8072397,-1054.5664,-1311.3148)\" id=\"g2504\">'\n emblem0 += '<path d=\"M 829.65558,723.91382 L 607.93512,723.91382 L 607.93512,572.06531 L 829.65558,572.06531 L 829.65558,723.91382 z \" style=\"fill:#ffffff;fill-rule:nonzero;stroke:none\" id=\"path94\"/>'\n emblem0 += '<path d=\"M 628.05363,591.26554 L 672.46452,591.26554 C 700.1795,591.26554 716.45792,609.13001 716.45792,647.69737 C 716.45792,688.76906 699.42822,705.21447 672.46452,705.21447 L 628.05363,705.21447 L 628.05363,591.26554 z M 728.89635,591.26554 L 778.56638,591.26554 C 799.35267,591.26554 809.78756,603.78737 809.78756,618.22924 C 809.78756,637.17898 798.68479,643.60689 790.08654,645.44344 L 790.08654,645.94432 C 802.94226,647.61387 814.54582,656.71311 814.54582,674.16029 C 814.46242,692.94303 800.85532,705.21447 775.47767,705.21447 L 728.89635,705.21447 L 728.89635,591.26554 z M 655.51822,609.13001 L 665.28523,609.13001 C 681.06286,609.13001 689.41072,620.48318 689.41072,647.19649 C 689.41072,677.83328 679.6437,687.01601 665.78612,687.01601 L 655.51822,687.01601 L 655.51822,609.13001 z M 756.11055,608.96311 L 766.62884,608.96311 C 777.39772,608.96311 781.82209,614.97354 781.82209,621.98583 C 781.82209,630.50068 777.23072,636.4277 766.46194,636.4277 L 756.11055,636.4277 L 756.11055,608.96311 z M 756.11055,657.88187 L 769.04977,657.88187 C 781.82209,657.88187 785.24469,664.05929 785.24469,672.15675 C 785.24469,681.58987 778.39939,687.01601 769.21676,687.01601 L 756.11055,687.01601 L 756.11055,657.88187 z M 619.12139,560.54524 L 819.88856,560.54524 C 834.16344,560.54524 845.767,572.06531 845.767,586.34028 L 845.767,709.55535 C 845.767,723.83032 834.16344,735.43388 819.88856,735.43388 L 619.12139,735.43388 C 604.84642,735.43388 593.32635,723.83032 593.32635,709.55535 L 593.32635,586.34028 C 593.32635,572.06531 604.84642,560.54524 619.12139,560.54524 z M 619.45528,578.15932 L 819.63807,578.15932 C 824.06244,578.15932 827.65204,581.74892 827.65204,586.17329 L 827.65204,709.72234 C 827.65204,714.14671 824.06244,717.7363 819.63807,717.7363 L 619.45528,717.7363 C 615.03091,717.7363 611.44132,714.14671 611.44132,709.72234 L 611.44132,586.17329 C 611.44132,581.74892 615.03091,578.15932 619.45528,578.15932\" style=\"fill:#ec1b2d;fill-rule:evenodd;stroke:none\" id=\"path96\"/>'\n emblem0 += '</g>'\n emblem0 += '</g>'\n emblem0 += '</svg>'\n emblem0 += \"<div>\";\n document.getElementById('emblem').innerHTML = emblem0;\n }else{\n // zero height and width image\n src1 = \"data:image/png;base64,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\" \n emblem0 += \"<div> \";\n emblem0 += '<img width = \"0\" height = \"\" src= ' + src1 + ' />';\n emblem0 += \"<div>\";\n\n document.getElementById('emblem').innerHTML = emblem0;\n }\n }\n\n if(typeof(obj) == \"object\") {\n if(obj instanceof Array) {\n //console.log(obj.length);\n var pointer = obj.length;\n var list = document.getElementById('list');\n if(list.hasChildNodes()) {\n var len = document.getElementById(\"list\").childNodes.length;\n for (var i = 0; i < len; i++) {\n list.removeChild(list.firstChild);\n }\n }\n var i = 0;\n while( i < pointer ) {\n /* Start ceate Row for Display */\n row = document.createElement(\"tr\"); //Create line\n cell = document.createElement(\"td\"); // Create line\n /* Here the point will be created as a svg generated point */\n if( obj[i].point == \"*\") {\n svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n circle.setAttribute('cx',\"7\"); // Position x\n circle.setAttribute('cy',\"7\"); // Position y\n circle.setAttribute('r',\"7\"); // Radius\n circle.setAttribute('fill',\"#00ff00\"); // Fill Colour\n svg.appendChild(circle);\n svg.setAttribute('width', '14px'); // Witch svg\n svg.setAttribute('height', '14px'); // Height svg\n svg.setAttribute('viewBox', '0 0 14 14'); // visible size svg\n cell.appendChild(svg);\n } else {\n text = document.createTextNode(\"\");\n cell.appendChild(text);\n }\n row.appendChild(cell);\n \n /* Create end point */\n cell = document.createElement(\"td\"); //\n text = document.createTextNode(obj[i].station_arrival_time); // Set arrival time\n cell.appendChild(text); // Set planned arrival time\n cell.setAttribute(\"class\",\"station_arrival_time\"); // class set arrival time\n \n row.appendChild(cell); // Bind cell to row\n\n cell = document.createElement(\"td\"); //\n text = document.createTextNode(obj[i].station_departure_time); // Set departure time\n cell.appendChild(text); // Set planned arrival time\n cell.setAttribute(\"class\",\"station_departure_time\"); // class set planned arrival time\n \n row.appendChild(cell); // Bind cell to row\n \n cell = document.createElement(\"td\"); // Generate cell cells\n text = document.createTextNode(obj[i].platform); // Set platform\n cell.appendChild(text); // Set platform\n cell.setAttribute(\"class\",\"platform\"); // class Set platform\n\n row.appendChild(cell); // Bind cell to row\n \n cell = document.createElement(\"td\"); // Create cell\n text = document.createTextNode(obj[i].first_station) \n cell.appendChild(text); // set the originating station\n cell.setAttribute(\"class\",\"first_station\"); // class set the destination\n \n row.appendChild(cell); // Bind cell to row\n \n cell = document.createElement(\"td\"); // Create cell\n text = document.createTextNode(obj[i].last_station); // set the destination\n cell.appendChild(text); // set the destination\n cell.setAttribute(\"class\",\"last_station\"); // class set the destination\n \n row.appendChild(cell); // Bind cell to row\n \n cell = document.createElement(\"td\"); // Create cell\n text = document.createTextNode(obj[i].via); // Set via\n // text = document.createTextNode(obj1)\n cell.appendChild(text); // Set via\n cell.setAttribute(\"class\",\"via\"); // class Set via\n\n row.appendChild(cell); // Bind cell to row\n \n row.setAttribute(\"id\",\"row\"); // Set id of the line\n list.appendChild(row); // Bind row to table body\n /* End generate*/\n i++;\n }\n }\n }\n }\n ws.onopen = function() { \n console.log(\"connected\");\n }\n ws.onclose = function() { \n // in case of lost connection tries to reconnect every 3 secs\n setTimeout(wsConnect,3000);\n }\n }\n </script>\n</head>\n<body onload=\"wsConnect();\" onunload=\"ws.disconnect();\">\n<!-- From this point you may customise the template -->\n<table class=\"head\">\n <colgroup>\n {{!-- gap --}}\n <col width=\"2\"> \n {{!-- departure and Station --}}\n <col width=\"40\">\n {{!-- clock --}}\n <col width=\"10\">\n {{!-- logo --}}\n <col width=\"10\">\n\n <tr class=\"trhead\">\n {{!-- gap before Text --}}\n <th></th> \n {{!-- Departures and Station --}}\n <th class=\"head1\">\n Departures: My_Station\n </th>\n {{!-- clock --}}\n <th class=\"head3\" id=\"time\">\n </th> \n <th class=\"head3\" id=\"emblem\">\n </th> \n </tr>\n</table>\n<table class=head>\n <colgroup>\n <col width=\"10\">\n <col width=\"30\">\n <col width=\"30\">\n <col width=\"62\">\n <col width=\"62\">\n <col width=\"62\">\n <col width=\"140\">\n </colgroup>\n <tr class=\"trhead\">\n <th></th>\n <th class=\"it\">Arrival</th>\n <th class=\"it\">Departure</th>\n <th class=\"it\">Platform</th>\n <th class=\"it\">From</th>\n <th class=\"it\">Destination</th>\n <th class=\"it\">Via</th>\n </tr>\n</table>\n<table class=\"list\">\n <colgroup>\n <col width=\"10\">\n <col width=\"30\">\n <col width=\"30\">\n <col width=\"62\">\n <col width=\"62\">\n <col width=\"62\">\n <col width=\"140\">\n </colgroup>\n<tbody id=\"list\"></tbody>\n</table>\n<table class=\"foot\">\n <tr class=\"foot\">\n <td class=\"foot\" id=\"fault\">\n {{ fault }}\n </td>\n </tr>\n</table>\n</body>\n</html>\n",
|
|
"output": "str",
|
|
"x": 620,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"7fd27bdf3a7ef97c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "bf8abe7527f5586a",
|
|
"type": "template",
|
|
"z": "b2b17973657164b1",
|
|
"name": "Stylesheet",
|
|
"field": "payload.style",
|
|
"fieldType": "msg",
|
|
"format": "html",
|
|
"syntax": "mustache",
|
|
"template": ":root {\n/* Here are the colors defined for the output\nThe background and font color can be adjusted */\n/*background colour */\n--background: #006;\n/*Font Colour */\n--fontcolor: #fff;\n/* Font */\n--fontart: arial;\n//color: #fff;\n/* Backround Colour of List: Odd lines */\n--backgroundfirst: #006;\n/* Font Colour of List: Odd lines */\n--fontfirst: #fff;\n/* Backround Colour of List: Even lines */\n--backgroundsec: #309;\n/* Font Colour of List: Even lines */\n--fontsec: #fff;\n/* Background Colour of Faults */\n--backgroundfault: #ff0;\n/* Font Colour of Faults */\n--fontfault: #006;\n}\nbody {\n\n/* defines the font size to the total aspect ratio */\nfont-size: 1em;\nbackground-color: var(--background);\ncolor: var(--fontcolor);\npadding:0 0 0 0;\n}\n\n/* Arrival */\n.head1 {font-size: 2.5em}\n/* Departure*/\n.head2 {font-style: italic; font-size: 1.5em}\n/* Time */\n.head3 {font-size: 2.0em; text-align: left}\n/* Logo */\n.head4 { font-size: 2.0em; text-align: left; color: var(--fontcolor)}\n.it {font-style: italic; font-size: 1.3em; text-align: left}\n/* background colour of the header and footer */\ntd.head {background-: var(--background)}\ntd.foot {background-color: var(--background)}\n\ntable.head {\ntable-layout:fixed;\noverflow: hidden;\nwidth: 100%;\nheight: 50%;\nfont-family: var(--fontart);\nborder: 0px;\nborder-color: #fff;\n<!-- border: 1px solid white; -->\nborder-spacing: 0;\nmargin:0;\npadding: 0;\n}\ntable.list {\ntable-layout:fixed;\noverflow: hidden;\nwidth: 100%;\nheight: 100%;\nfont-family: var(--fontart);\nborder: 0px;\nborder-spacing: 0;\nmargin:0;\npadding: 0;\n}\np { padding: 0; margin: 0;\n}\ntable.foot {\ntable-layout:fixed;\noverflow: hidden;\nbackground-color: var(--background);\nwidth: 100%;\nheight: 100%;\nfont-family: var(--fontart);\nborder: 0px;\nborder-spacing: 0;\nmargin:0;\npadding: 0;\n}\n\ndiv.run {\nbackground-color: var(--backgroundfault);\nwhite-space: nowrap;\noverflow: hidden;\n}\nspan.fault2 {\n/*display:block;*/\nmargin-left:100%;\nfont-size: 2em;\ncolor: var(--fontfault);\npadding: 0px;\n/*height: 2em;*/\n/*width: 100%;*/\n-webkit-animation: textrun 25s linear infinite;\nanimation: textrun 25s linear infinite;\n}\n@-webkit-keyframes textrun {\n0% { transform: translate(0%, 0);}\n100% { margin-left:-100%;transform: translate(-100%, 0);}\n}\n\n@keyframes textrun {\n0% { transform: translate(0, 0);}\n100% { margin-left:-100%; transform: translate(-100%, 0); }\n}\nspan.fault1 {\nfont-size: 2em;\ncolor: var(--fontfault);\nbackground-color: var(--backgroundfault);\npadding: 0px;\n/*height: 2em;*/\n/*width: 100%;*/\n}\nth {\nbackground-color: var(--background);\ncolor: var(--fontcolor);\nfont-size: 1.3em;\ntext-align: left;\nmargin:0;\npadding: 0 0 0 0;\nheight: 1.5em;\n/*border-bottom: 0px solid #ffffff;*/\n}\n/* Background color default of a line */\ntr {\nbackground-color: var(--background);\ncolor: var(--fontcolor);\n/* line height */\nheight : 2em;\n}\n/* Background color of odd rows */\ntr:nth-child(even) {\nbackground-color: var(--backgroundfirst);\ncolor: var(--fontfirst);\n/* line height */\nheight : 2em;\n}\n/* Background color of even rows */\ntr:nth-child(odd) {\nbackground-color: var(--backgroundsec);\ncolor: var(--fontsec);\n/* line height */\nheight : 2em;\n}\n/* Formatting the individual cells/fields of the list */\n.point {color: --fontcolor; text-align: center; position: absolut;}\n.station_arrival_time {text-align: left; font-size: 1.5em}\n.station_departure_time {text-align: left; font-size: 1.5em}\n.platform {text-align: left; font-size: 1.5em}\n.first_station {text-align: left; font-size: 1.5em; height: 2em}\n.last_station {text-align: left; font-size: 1.5em; height: 2em}\n.via {padding-left: 10px}\n\ndiv.DB-logo {\ndisplay: table-cell;\nposition: relative;\nwidth: 100px;\npadding-bottom: 60%; /*override this inline for aspect ratio other than square */\n}\n<!-- .skalierendes-svg {\nposition: absolute;\nheight: 100%;\nwidth: 100%;\nleft: 0;\ntop: 0;\n} -->\n",
|
|
"output": "str",
|
|
"x": 390,
|
|
"y": 100,
|
|
"wires": [
|
|
[
|
|
"ce10a6e6ebfc838d"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "86c45192bfd242e0",
|
|
"type": "comment",
|
|
"z": "b2b17973657164b1",
|
|
"name": "generate Web Page",
|
|
"info": "",
|
|
"x": 110,
|
|
"y": 40,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "7fa4ed09c941b9ef",
|
|
"type": "comment",
|
|
"z": "b2b17973657164b1",
|
|
"name": "Import from mqtt, extract variables, send to websocket, which has the name of the station",
|
|
"info": "",
|
|
"x": 330,
|
|
"y": 240,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "427c8bf5b8a16f07",
|
|
"type": "comment",
|
|
"z": "b2b17973657164b1",
|
|
"name": "This node red page was inspired by a Rocrail MQTT implementation and modified extensively from that implementation. ",
|
|
"info": "",
|
|
"x": 412,
|
|
"y": 480,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "24aec3c6dc4d0fd2",
|
|
"type": "comment",
|
|
"z": "b2b17973657164b1",
|
|
"name": "The Rocrail implementation is licenced as follows: CC Attribution-Share Alike 4.0 International and we would like to acknowledge their inspiration. ",
|
|
"info": "",
|
|
"x": 492,
|
|
"y": 520,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "adc848b432e422c7",
|
|
"type": "comment",
|
|
"z": "b2b17973657164b1",
|
|
"name": "Some code may still be identical to the Rocrail code.",
|
|
"info": "",
|
|
"x": 202,
|
|
"y": 560,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "cafe9d5b.d4035",
|
|
"type": "mqtt-broker",
|
|
"broker": "127.0.0.1",
|
|
"port": "1883",
|
|
"clientid": "",
|
|
"usetls": false,
|
|
"compatmode": true,
|
|
"keepalive": "60",
|
|
"cleansession": true,
|
|
"birthTopic": "",
|
|
"birthQos": "0",
|
|
"birthRetain": "false",
|
|
"birthPayload": "",
|
|
"willTopic": "",
|
|
"willQos": "0",
|
|
"willRetain": "false",
|
|
"willPayload": ""
|
|
},
|
|
{
|
|
"id": "My_Station$_ref",
|
|
"type": "websocket-listener",
|
|
"path": "/ws/My_Station$",
|
|
"wholemsg": "false"
|
|
}
|
|
] |