├── Dashboard ├── Lecture1-Node-RED-Dashboard-Intro │ ├── README.md │ ├── flows │ │ └── Dashboard-Intro.json │ ├── screenshots │ │ ├── NRD-Intro-Example.png │ │ └── NRD-Intro-ExampleFlow.png │ └── slides │ │ ├── README.md │ │ ├── closing.png │ │ ├── nrdi-agenda.png │ │ ├── nrdi-chart.png │ │ ├── nrdi-dashboard.png │ │ ├── nrdi-dashchart.png │ │ ├── nrdi-dashgauge.png │ │ ├── nrdi-dashnotify.png │ │ ├── nrdi-dashslider.png │ │ ├── nrdi-dashswitch.png │ │ ├── nrdi-dashtext.png │ │ ├── nrdi-flow.png │ │ ├── nrdi-gauge.png │ │ ├── nrdi-notify.png │ │ ├── nrdi-palette.png │ │ ├── nrdi-palette1.png │ │ ├── nrdi-slider.png │ │ ├── nrdi-switch.png │ │ ├── nrdi-text.png │ │ └── nrdi-title.png ├── Lecture2-Node-RED-Layout-Config │ ├── README.md │ ├── flows │ │ └── NRD-Layout-TwitterImageAnalysis-Example.json │ ├── screenshots │ │ ├── NRD-Layout-TwitterExample.png │ │ └── NRD-Layout-TwitterExampleFlow.png │ └── slides │ │ ├── NRD-Layout-AddGroup.png │ │ ├── NRD-Layout-AddLink.png │ │ ├── NRD-Layout-AddTab.png │ │ ├── NRD-Layout-AddWidget.png │ │ ├── NRD-Layout-DashTab.png │ │ ├── NRD-Layout-DashTwitter.png │ │ ├── NRD-Layout-DashWidget.png │ │ ├── NRD-Layout-Launch.png │ │ ├── NRD-Layout-MoveWidget.png │ │ ├── NRD-Layout-PaletteBlank.png │ │ ├── NRD-Layout-Resize.png │ │ ├── NRD-Layout-SiteConfig.png │ │ ├── NRD-Layout-Theme.png │ │ ├── NRD-Layout-Title.png │ │ ├── NRD-Layout-Trailer.png │ │ └── README.md ├── Lecture3-Node-RED-Charts │ ├── README.md │ ├── flows │ │ ├── Dashboard-Chart-Advanced.json │ │ ├── Dashboard-Chart-Historical.json │ │ └── Dashboard-Chart-Intro.json │ ├── screenshots │ │ ├── NRD-AdvancedCharts-Flow.png │ │ ├── NRD-AdvancedCharts.png │ │ ├── NRD-Charts-Historical-Dashboard.png │ │ ├── NRD-Charts-Historical-Flow-LineChartArray.png │ │ ├── NRD-Charts-Historical-Flow.png │ │ ├── NRD-Charts-Intro-Dashboard-Line.png │ │ ├── NRD-Charts-Intro-Dashboard-bar.png │ │ ├── NRD-Charts-Intro-Dashboard-pie.png │ │ ├── NRD-Charts-Intro-Dashboard.png │ │ ├── NRD-Charts-Intro-Flow-BarArray.png │ │ ├── NRD-Charts-Intro-Flow-LineChartArray.png │ │ ├── NRD-Charts-Intro-Flow-LineChartArrayM.png │ │ ├── NRD-Charts-Intro-Flow-PieArray.png │ │ └── NRD-Charts-Intro-Flow.png │ └── slides │ │ ├── NRD-Chart-1LineExample.png │ │ ├── NRD-Chart-AdvHistDash.png │ │ ├── NRD-Chart-AdvHistDatePick.png │ │ ├── NRD-Chart-AdvHistFlow.png │ │ ├── NRD-Chart-BarExample.png │ │ ├── NRD-Chart-ChartNode.png │ │ ├── NRD-Chart-DatePickNode.png │ │ ├── NRD-Chart-ExampleFlow.png │ │ ├── NRD-Chart-HistoricalExample.png │ │ ├── NRD-Chart-MLineExample.png │ │ ├── NRD-Chart-PaletteBlank.png │ │ ├── NRD-Chart-PieExample.png │ │ ├── NRD-Chart-Title.png │ │ ├── NRD-Chart-Trailer.png │ │ ├── NRD-Charts-ExampleDashboard.png │ │ └── README.md └── Lecture4-Node-RED-Forms-Templates │ ├── README.md │ ├── flows │ ├── NRD-FT-AssetRegForm-Example.json │ └── NRD-FT-ISS-Template-Example.json │ ├── screenshots │ ├── NRD-Forms-AssetReg-Button.png │ ├── NRD-Forms-AssetReg-Dropdown.png │ ├── NRD-Forms-AssetReg-Form.png │ ├── NRD-Forms-AssetReg-Template.png │ ├── NRD-Forms-AssetReg.png │ ├── NRD-Forms-Flow.png │ ├── NRD-Forms-Nodedetails.png │ ├── NRD-ISS-TemplateWorldMap-Dashboard.png │ └── NRD-ISS-TemplateWorldMap-flow-annotated-.png │ └── slides │ ├── NRD-FT-AssetReg-Button.png │ ├── NRD-FT-AssetReg-Dropdown.png │ ├── NRD-FT-AssetReg-Form.png │ ├── NRD-FT-AssetReg-Template.png │ ├── NRD-FT-AssetRegDash.png │ ├── NRD-FT-AssetRegFlow.png │ ├── NRD-FT-ButtonNode.png │ ├── NRD-FT-DropdownNode.png │ ├── NRD-FT-FormNode.png │ ├── NRD-FT-ISS-Dash.png │ ├── NRD-FT-ISS-Flow.png │ ├── NRD-FT-PaletteBlank.png │ ├── NRD-FT-TemplateNode.png │ ├── NRD-FT-title.png │ ├── NRD-FT-trailer.png │ └── README.md └── README.md /Dashboard/Lecture1-Node-RED-Dashboard-Intro/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED 2 | Lecture 1 - Introduction to Node-RED Dashboard - *Resources* 3 | 4 | ## Review the Lecture 1 slides 5 | [Slides](slides/README.md) 6 | 7 | ## Download the Lecture 1 flow 8 | [Lecture 1 flow](flows/Dashboard-Intro.json) 9 | 10 | ## Screenshots of Lecture 1 Node-RED 11 | ![Node-RED Dashboard Example](screenshots/NRD-Intro-Example.png?raw=true "Node-RED Dashboard Example") 12 | ![Node-RED Dashboard Flow](screenshots/NRD-Intro-ExampleFlow.png?raw=true "Node-RED Dashboard Flow") 13 | 14 | -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/flows/Dashboard-Intro.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "19be5ee2.ff2ff9", 4 | "type": "tab", 5 | "label": "Dashboard Intro", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "4b0e3185.ea0c68", 11 | "type": "inject", 12 | "z": "19be5ee2.ff2ff9", 13 | "name": "", 14 | "topic": "", 15 | "payload": "", 16 | "payloadType": "date", 17 | "repeat": "1", 18 | "crontab": "", 19 | "once": false, 20 | "x": 110, 21 | "y": 140, 22 | "wires": [ 23 | [ 24 | "fae795ff.fd8b3" 25 | ] 26 | ] 27 | }, 28 | { 29 | "id": "3aa200f4.bb8e", 30 | "type": "function", 31 | "z": "19be5ee2.ff2ff9", 32 | "name": "Random #s", 33 | "func": "if( msg.payload === false ) {\n return null;\n}\nmsg.payload = Math.round(Math.random()*100);\nreturn msg;", 34 | "outputs": 1, 35 | "noerr": 0, 36 | "x": 430, 37 | "y": 140, 38 | "wires": [ 39 | [ 40 | "5177e366.baac1c" 41 | ] 42 | ] 43 | }, 44 | { 45 | "id": "b1c0c80b.60b228", 46 | "type": "ui_chart", 47 | "z": "19be5ee2.ff2ff9", 48 | "name": "Chart", 49 | "group": "309b41b2.77ed86", 50 | "order": 0, 51 | "width": 0, 52 | "height": 0, 53 | "label": "Random #", 54 | "chartType": "line", 55 | "legend": "false", 56 | "xformat": "HH:mm:ss", 57 | "interpolate": "linear", 58 | "nodata": "Querying Entropy", 59 | "dot": false, 60 | "ymin": "0", 61 | "ymax": "100", 62 | "removeOlder": "1", 63 | "removeOlderPoints": "", 64 | "removeOlderUnit": "60", 65 | "cutout": "", 66 | "useOneColor": false, 67 | "colors": [ 68 | "#1f77b4", 69 | "#aec7e8", 70 | "#ff7f0e", 71 | "#2ca02c", 72 | "#98df8a", 73 | "#d62728", 74 | "#ff9896", 75 | "#9467bd", 76 | "#c5b0d5" 77 | ], 78 | "useOldStyle": true, 79 | "x": 350, 80 | "y": 240, 81 | "wires": [ 82 | [], 83 | [] 84 | ] 85 | }, 86 | { 87 | "id": "e3c5862b.3bcbe8", 88 | "type": "ui_gauge", 89 | "z": "19be5ee2.ff2ff9", 90 | "name": "Gauge", 91 | "group": "309b41b2.77ed86", 92 | "order": 0, 93 | "width": 0, 94 | "height": 0, 95 | "gtype": "gage", 96 | "title": "Gauge", 97 | "label": "units", 98 | "format": "{{value}}", 99 | "min": 0, 100 | "max": "100", 101 | "colors": [ 102 | "#00b500", 103 | "#e6e600", 104 | "#ca3838" 105 | ], 106 | "seg1": "", 107 | "seg2": "", 108 | "x": 350, 109 | "y": 280, 110 | "wires": [] 111 | }, 112 | { 113 | "id": "282f9f47.6b0978", 114 | "type": "ui_slider", 115 | "z": "19be5ee2.ff2ff9", 116 | "name": "", 117 | "label": "Slider", 118 | "group": "309b41b2.77ed86", 119 | "order": 0, 120 | "width": 0, 121 | "height": 0, 122 | "passthru": true, 123 | "topic": "", 124 | "min": 0, 125 | "max": "100", 126 | "step": "", 127 | "x": 350, 128 | "y": 320, 129 | "wires": [ 130 | [] 131 | ] 132 | }, 133 | { 134 | "id": "5bc82e5b.f48f98", 135 | "type": "ui_text", 136 | "z": "19be5ee2.ff2ff9", 137 | "group": "309b41b2.77ed86", 138 | "order": 0, 139 | "width": 0, 140 | "height": 0, 141 | "name": "", 142 | "label": "Text", 143 | "format": "{{msg.payload}}", 144 | "layout": "row-spread", 145 | "x": 350, 146 | "y": 360, 147 | "wires": [] 148 | }, 149 | { 150 | "id": "fae795ff.fd8b3", 151 | "type": "ui_switch", 152 | "z": "19be5ee2.ff2ff9", 153 | "name": "", 154 | "label": "Switch", 155 | "group": "f9661b60.25bf98", 156 | "order": 2, 157 | "width": 0, 158 | "height": 0, 159 | "passthru": true, 160 | "decouple": "false", 161 | "topic": "", 162 | "style": "", 163 | "onvalue": "true", 164 | "onvalueType": "bool", 165 | "onicon": "", 166 | "oncolor": "", 167 | "offvalue": "false", 168 | "offvalueType": "bool", 169 | "officon": "", 170 | "offcolor": "", 171 | "x": 270, 172 | "y": 140, 173 | "wires": [ 174 | [ 175 | "3aa200f4.bb8e" 176 | ] 177 | ] 178 | }, 179 | { 180 | "id": "edcf26b.c6b3ed8", 181 | "type": "cloudant out", 182 | "z": "19be5ee2.ff2ff9", 183 | "name": "", 184 | "cloudant": "", 185 | "database": "historicaldata0", 186 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 187 | "payonly": true, 188 | "operation": "insert", 189 | "x": 780, 190 | "y": 480, 191 | "wires": [] 192 | }, 193 | { 194 | "id": "cc587759.3be438", 195 | "type": "function", 196 | "z": "19be5ee2.ff2ff9", 197 | "name": "Time Series DB", 198 | "func": "return {\n payload: {\n time: new Date().getTime(),\n data: msg.payload\n }\n};", 199 | "outputs": 1, 200 | "noerr": 0, 201 | "x": 380, 202 | "y": 520, 203 | "wires": [ 204 | [ 205 | "c4ffeaa1.63d", 206 | "be4c613.7e2012" 207 | ] 208 | ] 209 | }, 210 | { 211 | "id": "c4ffeaa1.63d", 212 | "type": "function", 213 | "z": "19be5ee2.ff2ff9", 214 | "name": "Modulo", 215 | "func": "var splitdata = msg.payload.time % 3;\nif( splitdata === 0 ) {\n return [msg, null, null];\n} else if( splitdata == 1 ) {\n return [null, msg, null];\n} else if( splitdata == 2) {\n return [null, null, msg];\n}\nreturn [null, null, null];", 216 | "outputs": "3", 217 | "noerr": 0, 218 | "x": 560, 219 | "y": 520, 220 | "wires": [ 221 | [ 222 | "edcf26b.c6b3ed8" 223 | ], 224 | [ 225 | "ec93c76f.ccbc9" 226 | ], 227 | [ 228 | "ba6796e7.10f0d" 229 | ] 230 | ] 231 | }, 232 | { 233 | "id": "ec93c76f.ccbc9", 234 | "type": "cloudant out", 235 | "z": "19be5ee2.ff2ff9", 236 | "name": "", 237 | "cloudant": "", 238 | "database": "historicaldata1", 239 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 240 | "payonly": true, 241 | "operation": "insert", 242 | "x": 780, 243 | "y": 520, 244 | "wires": [] 245 | }, 246 | { 247 | "id": "ba6796e7.10f0d", 248 | "type": "cloudant out", 249 | "z": "19be5ee2.ff2ff9", 250 | "name": "", 251 | "cloudant": "", 252 | "database": "historicaldata2", 253 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 254 | "payonly": true, 255 | "operation": "insert", 256 | "x": 780, 257 | "y": 560, 258 | "wires": [] 259 | }, 260 | { 261 | "id": "be4c613.7e2012", 262 | "type": "cloudant out", 263 | "z": "19be5ee2.ff2ff9", 264 | "name": "", 265 | "cloudant": "", 266 | "database": "historicaldata", 267 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 268 | "payonly": true, 269 | "operation": "insert", 270 | "x": 580, 271 | "y": 460, 272 | "wires": [] 273 | }, 274 | { 275 | "id": "b6eb769c.a5079", 276 | "type": "ui_text", 277 | "z": "19be5ee2.ff2ff9", 278 | "group": "f9661b60.25bf98", 279 | "order": 1, 280 | "width": 0, 281 | "height": 0, 282 | "name": "", 283 | "label": "", 284 | "format": "{{msg.payload}}", 285 | "layout": "row-spread", 286 | "x": 270, 287 | "y": 60, 288 | "wires": [] 289 | }, 290 | { 291 | "id": "3f75e974.626b46", 292 | "type": "inject", 293 | "z": "19be5ee2.ff2ff9", 294 | "name": "Instructions", 295 | "topic": "", 296 | "payload": "Use the toggle switch to start / stop the generation of random numbers", 297 | "payloadType": "str", 298 | "repeat": "", 299 | "crontab": "", 300 | "once": true, 301 | "x": 110, 302 | "y": 60, 303 | "wires": [ 304 | [ 305 | "b6eb769c.a5079" 306 | ] 307 | ] 308 | }, 309 | { 310 | "id": "d02570ff.b8e37", 311 | "type": "ui_toast", 312 | "z": "19be5ee2.ff2ff9", 313 | "position": "top right", 314 | "displayTime": "5", 315 | "highlight": "", 316 | "outputs": 0, 317 | "ok": "OK", 318 | "cancel": "", 319 | "topic": "", 320 | "name": "", 321 | "x": 790, 322 | "y": 400, 323 | "wires": [] 324 | }, 325 | { 326 | "id": "6cfa6003.e8658", 327 | "type": "switch", 328 | "z": "19be5ee2.ff2ff9", 329 | "name": "Warn on High Values", 330 | "property": "payload", 331 | "propertyType": "msg", 332 | "rules": [ 333 | { 334 | "t": "gt", 335 | "v": "80", 336 | "vt": "num" 337 | } 338 | ], 339 | "checkall": "true", 340 | "outputs": 1, 341 | "x": 400, 342 | "y": 400, 343 | "wires": [ 344 | [ 345 | "e79aba0f.8bfa98" 346 | ] 347 | ] 348 | }, 349 | { 350 | "id": "e79aba0f.8bfa98", 351 | "type": "template", 352 | "z": "19be5ee2.ff2ff9", 353 | "name": "Alert Msg", 354 | "field": "payload", 355 | "fieldType": "msg", 356 | "format": "handlebars", 357 | "syntax": "mustache", 358 | "template": "Alert : Critical Value Detected {{payload}}", 359 | "output": "str", 360 | "x": 600, 361 | "y": 400, 362 | "wires": [ 363 | [ 364 | "d02570ff.b8e37" 365 | ] 366 | ] 367 | }, 368 | { 369 | "id": "5177e366.baac1c", 370 | "type": "link out", 371 | "z": "19be5ee2.ff2ff9", 372 | "name": "", 373 | "links": [ 374 | "7f90fe78.29a6a" 375 | ], 376 | "x": 555, 377 | "y": 140, 378 | "wires": [] 379 | }, 380 | { 381 | "id": "7f90fe78.29a6a", 382 | "type": "link in", 383 | "z": "19be5ee2.ff2ff9", 384 | "name": "", 385 | "links": [ 386 | "5177e366.baac1c" 387 | ], 388 | "x": 95, 389 | "y": 360, 390 | "wires": [ 391 | [ 392 | "b1c0c80b.60b228", 393 | "e3c5862b.3bcbe8", 394 | "282f9f47.6b0978", 395 | "5bc82e5b.f48f98", 396 | "6cfa6003.e8658", 397 | "cc587759.3be438" 398 | ] 399 | ] 400 | }, 401 | { 402 | "id": "309b41b2.77ed86", 403 | "type": "ui_group", 404 | "z": "19be5ee2.ff2ff9", 405 | "name": "Dashboard Controls", 406 | "tab": "744ce3c9.d4c3fc", 407 | "order": 2, 408 | "disp": true, 409 | "width": "6" 410 | }, 411 | { 412 | "id": "f9661b60.25bf98", 413 | "type": "ui_group", 414 | "z": "", 415 | "name": "Start / Stop", 416 | "tab": "744ce3c9.d4c3fc", 417 | "order": 1, 418 | "disp": true, 419 | "width": "6" 420 | }, 421 | { 422 | "id": "744ce3c9.d4c3fc", 423 | "type": "ui_tab", 424 | "z": "19be5ee2.ff2ff9", 425 | "name": "Introduction", 426 | "icon": "dashboard", 427 | "order": 2 428 | } 429 | ] 430 | -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/screenshots/NRD-Intro-Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/screenshots/NRD-Intro-Example.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/screenshots/NRD-Intro-ExampleFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/screenshots/NRD-Intro-ExampleFlow.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED Lecture 1 2 | Lecture 1 - Introduction to Node-RED Dashboard Slides 3 | ![Node-RED Dashboard Intro Slide 1](nrdi-title.png?raw=true "Node-RED Dashboard Chart") 4 | ![Node-RED Dashboard Intro Slide 2](nrdi-agenda.png?raw=true "Node-RED Dashboard Chart") 5 | ![Node-RED Dashboard Intro Slide 3](nrdi-palette1.png?raw=true "Node-RED Dashboard Chart") 6 | ![Node-RED Dashboard Intro Slide 4](nrdi-dashboard.png?raw=true "Node-RED Dashboard Chart") 7 | ![Node-RED Dashboard Intro Slide 5](nrdi-dashtext.png?raw=true "Node-RED Dashboard Chart") 8 | ![Node-RED Dashboard Intro Slide 6](nrdi-text.png?raw=true "Node-RED Dashboard Chart") 9 | ![Node-RED Dashboard Intro Slide 7](nrdi-dashswitch.png?raw=true "Node-RED Dashboard Chart") 10 | ![Node-RED Dashboard Intro Slide 8](nrdi-switch.png?raw=true "Node-RED Dashboard Chart") 11 | ![Node-RED Dashboard Intro Slide 9](nrdi-dashchart.png?raw=true "Node-RED Dashboard Chart") 12 | ![Node-RED Dashboard Intro Slide 10](nrdi-chart.png?raw=true "Node-RED Dashboard Chart") 13 | ![Node-RED Dashboard Intro Slide 11](nrdi-dashgauge.png?raw=true "Node-RED Dashboard Chart") 14 | ![Node-RED Dashboard Intro Slide 12](nrdi-gauge.png?raw=true "Node-RED Dashboard Chart") 15 | ![Node-RED Dashboard Intro Slide 13](nrdi-dashslider.png?raw=true "Node-RED Dashboard Chart") 16 | ![Node-RED Dashboard Intro Slide 14](nrdi-slider.png?raw=true "Node-RED Dashboard Chart") 17 | ![Node-RED Dashboard Intro Slide 15](nrdi-dashnotify.png?raw=true "Node-RED Dashboard Chart") 18 | ![Node-RED Dashboard Intro Slide 16](nrdi-notify.png?raw=true "Node-RED Dashboard Chart") 19 | ![Node-RED Dashboard Intro Slide 17](nrdi-flow.png?raw=true "Node-RED Dashboard Chart") 20 | ![Node-RED Dashboard Intro Slide 18](nrdi-dashboard.png?raw=true "Node-RED Dashboard Chart") 21 | ![Node-RED Dashboard Intro Slide 19](nrdi-palette.png?raw=true "Node-RED Dashboard Chart") 22 | ![Node-RED Dashboard Intro Slide 20](closing.png?raw=true "Node-RED Dashboard Chart") 23 | -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/closing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/closing.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-agenda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-agenda.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-chart.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashboard.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashchart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashchart.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashgauge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashgauge.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashnotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashnotify.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashslider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashslider.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashswitch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashswitch.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashtext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-dashtext.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-gauge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-gauge.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-notify.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-palette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-palette.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-palette1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-palette1.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-slider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-slider.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-switch.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-text.png -------------------------------------------------------------------------------- /Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture1-Node-RED-Dashboard-Intro/slides/nrdi-title.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED 2 | Lecture 2 - Node-RED Dashboard Layout and Configuration - *Resources* 3 | 4 | ## Review the Lecture 2 Node-RED Dashboard Layout and Configuration slides 5 | [Slides](slides/README.md) 6 | 7 | ## Download the Lecture 2 Twitter Image Analysis Example flow 8 | [Lecture 2 Twitter Image Analysis Example flow](flows/NRD-Layout-TwitterImageAnalysis-Example.json) 9 | 10 | ## Screenshots of Lecture 2 Node-RED 11 | ![Node-RED Layout Twitter Image Analysis Dashboard](screenshots/NRD-Layout-TwitterExample.png?raw=true "Node-RED Dashboard Twitter Example") 12 | ![Node-RED Layout Twitter Flow](screenshots/NRD-Layout-TwitterExampleFlow.png?raw=true "Node-RED Dashboard Twitter Example Flow") 13 | 14 | -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/flows/NRD-Layout-TwitterImageAnalysis-Example.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "d7960f6f.32922", 4 | "type": "tab", 5 | "label": "Twitter Image Analysis", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "719866fa.611578", 11 | "type": "ui_template", 12 | "z": "d7960f6f.32922", 13 | "group": "ae40ee.11eabf1", 14 | "name": "Photo", 15 | "order": 3, 16 | "width": "9", 17 | "height": "8", 18 | "format": "
\n\"Twitter", 19 | "storeOutMessages": false, 20 | "fwdInMessages": false, 21 | "templateScope": "local", 22 | "x": 570, 23 | "y": 280, 24 | "wires": [ 25 | [ 26 | "6a7c7ce7.95586c" 27 | ] 28 | ] 29 | }, 30 | { 31 | "id": "4c4350d1.545708", 32 | "type": "comment", 33 | "z": "d7960f6f.32922", 34 | "name": "Reload picture into Node-RED Dashboard", 35 | "info": "", 36 | "x": 1060, 37 | "y": 280, 38 | "wires": [] 39 | }, 40 | { 41 | "id": "72ac291.8b545d8", 42 | "type": "function", 43 | "z": "d7960f6f.32922", 44 | "name": "Extract Twitter Image URL", 45 | "func": "msg.payload = \"\";\nif (typeof msg.tweet.entities.media !== 'undefined') {\n if (typeof msg.tweet.entities.media[0].media_url !== 'undefined') {\n msg.payload = msg.tweet.entities.media[0].media_url;\n } \n}\n\nif (typeof msg.tweet.extended_tweet !== 'undefined') {\n if (typeof msg.tweet.extended_tweet.entities !== 'undefined') {\n if (typeof msg.tweet.extended_tweet.entities.media !== 'undefined') {\n if (typeof msg.tweet.extended_tweet.entities.media[0].media_url !== 'undefined') {\n msg.payload = msg.tweet.entities.media[0].media_url;\n }\n }\n }\n}\n\nif(typeof msg.tweet.retweeted_status !== 'undefined') {\n if( typeof msg.tweet.retweeted_status.extended_tweet !== 'undefined') {\n if( typeof msg.tweet.retweeted_status.extended_tweet.entities !== 'undefined') {\n if( typeof msg.tweet.retweeted_status.extended_tweet.entities.media[0].media_url !== 'undefined') {\n msg.payload = msg.tweet.retweeted_status.extended_tweet.entities.media[0].media_url;\n }\n }\n }\n}\n\n\nif( msg.payload.length ) {\n return [ msg, null ];\n} else {\n return [ null, msg ];\n}", 46 | "outputs": "2", 47 | "noerr": 0, 48 | "x": 370, 49 | "y": 240, 50 | "wires": [ 51 | [ 52 | "6411acb4.cf82ec", 53 | "fc2667a3.11a148", 54 | "719866fa.611578", 55 | "3326e141.b60ade", 56 | "ab7a352a.af168", 57 | "e87a0d51.5ab72" 58 | ], 59 | [] 60 | ] 61 | }, 62 | { 63 | "id": "6411acb4.cf82ec", 64 | "type": "debug", 65 | "z": "d7960f6f.32922", 66 | "name": "Image URL to analyze", 67 | "active": true, 68 | "console": "false", 69 | "complete": "payload", 70 | "x": 620, 71 | "y": 240, 72 | "wires": [] 73 | }, 74 | { 75 | "id": "1396daac.4ea22d", 76 | "type": "debug", 77 | "z": "d7960f6f.32922", 78 | "name": "", 79 | "active": true, 80 | "console": "false", 81 | "complete": "result", 82 | "x": 830, 83 | "y": 360, 84 | "wires": [] 85 | }, 86 | { 87 | "id": "fc2667a3.11a148", 88 | "type": "visual-recognition-v3", 89 | "z": "d7960f6f.32922", 90 | "name": "", 91 | "apikey": "", 92 | "image-feature": "classifyImage", 93 | "lang": "en", 94 | "x": 610, 95 | "y": 320, 96 | "wires": [ 97 | [ 98 | "1396daac.4ea22d", 99 | "f5dd7c91.b43ff8" 100 | ] 101 | ] 102 | }, 103 | { 104 | "id": "9f82c714.f98cb8", 105 | "type": "twitter in", 106 | "z": "d7960f6f.32922", 107 | "twitter": "", 108 | "tags": "", 109 | "user": "false", 110 | "name": "", 111 | "topic": "tweets", 112 | "inputs": 1, 113 | "x": 110, 114 | "y": 80, 115 | "wires": [ 116 | [ 117 | "69bd043c.43690c" 118 | ] 119 | ] 120 | }, 121 | { 122 | "id": "cde1d941.2c6918", 123 | "type": "debug", 124 | "z": "d7960f6f.32922", 125 | "name": "", 126 | "active": true, 127 | "console": "false", 128 | "complete": "tweet", 129 | "x": 580, 130 | "y": 80, 131 | "wires": [] 132 | }, 133 | { 134 | "id": "c584a65f.927a5", 135 | "type": "inject", 136 | "z": "d7960f6f.32922", 137 | "name": "", 138 | "topic": "", 139 | "payload": "{\"created_at\":\"Sat Sep 23 14:19:37 +0000 2017\",\"id\":911595915168899100,\"id_str\":\"911595915168899072\",\"text\":\"RT @IBM: Watch how a new solution is harnessing the power of #IBMIot to combat the poaching of endangered 🦏:… \",\"source\":\"Twitter Web Client\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":2577403879,\"id_str\":\"2577403879\",\"name\":\"John Walicki\",\"screen_name\":\"johnwalicki\",\"location\":\"New Jersey, USA\",\"url\":null,\"description\":\"IBM Watson Internet of Things Developer Advocate, Über Geek, Family Guy. #IoT #OpenSource, #Linux, #AI My tweets are my own.\",\"translator_type\":\"none\",\"protected\":false,\"verified\":false,\"followers_count\":646,\"friends_count\":850,\"listed_count\":153,\"favourites_count\":1770,\"statuses_count\":1473,\"created_at\":\"Thu Jun 19 19:54:32 +0000 2014\",\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http://abs.twimg.com/images/themes/theme1/bg.png\",\"profile_background_image_url_https\":\"https://abs.twimg.com/images/themes/theme1/bg.png\",\"profile_background_tile\":false,\"profile_link_color\":\"1DA1F2\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"profile_image_url\":\"http://pbs.twimg.com/profile_images/711615965721718784/7My0kbZI_normal.jpg\",\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/711615965721718784/7My0kbZI_normal.jpg\",\"profile_banner_url\":\"https://pbs.twimg.com/profile_banners/2577403879/1476478381\",\"default_profile\":true,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Fri Sep 22 13:15:04 +0000 2017\",\"id\":911217282067714000,\"id_str\":\"911217282067714048\",\"text\":\"Watch how a new solution is harnessing the power of #IBMIot to combat the poaching of endangered 🦏:… https://t.co/91BD2uZqFk\",\"display_text_range\":[0,140],\"source\":\"Sprinklr\",\"truncated\":true,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":18994444,\"id_str\":\"18994444\",\"name\":\"IBM\",\"screen_name\":\"IBM\",\"location\":\"Armonk, New York\",\"url\":\"http://www.ibm.com\",\"description\":\"Official IBM Twitter account. Follows the IBM Social Computing Guidelines.\",\"translator_type\":\"none\",\"protected\":false,\"verified\":true,\"followers_count\":396044,\"friends_count\":6427,\"listed_count\":5154,\"favourites_count\":2637,\"statuses_count\":9814,\"created_at\":\"Wed Jan 14 20:41:57 +0000 2009\",\"utc_offset\":-14400,\"time_zone\":\"Eastern Time (US & Canada)\",\"geo_enabled\":false,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"FFFFFF\",\"profile_background_image_url\":\"http://pbs.twimg.com/profile_background_images/378800000152426467/Viwc1IvP.jpeg\",\"profile_background_image_url_https\":\"https://pbs.twimg.com/profile_background_images/378800000152426467/Viwc1IvP.jpeg\",\"profile_background_tile\":false,\"profile_link_color\":\"2FC2EF\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"252429\",\"profile_text_color\":\"666666\",\"profile_use_background_image\":false,\"profile_image_url\":\"http://pbs.twimg.com/profile_images/875111316821651456/AmZkYTWP_normal.jpg\",\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/875111316821651456/AmZkYTWP_normal.jpg\",\"profile_banner_url\":\"https://pbs.twimg.com/profile_banners/18994444/1495457811\",\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"is_quote_status\":false,\"extended_tweet\":{\"full_text\":\"Watch how a new solution is harnessing the power of #IBMIot to combat the poaching of endangered 🦏: https://t.co/zL55BXKLFq #WorldRhinoDay https://t.co/eBpZmbbnB7\",\"display_text_range\":[0,138],\"entities\":{\"hashtags\":[{\"text\":\"IBMIot\",\"indices\":[52,59]},{\"text\":\"WorldRhinoDay\",\"indices\":[124,138]}],\"urls\":[{\"url\":\"https://t.co/zL55BXKLFq\",\"expanded_url\":\"http://bitly.com/2hknTRt\",\"display_url\":\"bitly.com/2hknTRt\",\"indices\":[100,123]}],\"user_mentions\":[],\"symbols\":[],\"media\":[{\"id\":911217279353880600,\"id_str\":\"911217279353880576\",\"indices\":[139,162],\"media_url\":\"http://pbs.twimg.com/media/DKVLSakWAAAc3Fl.jpg\",\"media_url_https\":\"https://pbs.twimg.com/media/DKVLSakWAAAc3Fl.jpg\",\"url\":\"https://t.co/eBpZmbbnB7\",\"display_url\":\"pic.twitter.com/eBpZmbbnB7\",\"expanded_url\":\"https://twitter.com/IBM/status/911217282067714048/photo/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":911217279353880600,\"id_str\":\"911217279353880576\",\"indices\":[139,162],\"media_url\":\"http://pbs.twimg.com/media/DKVLSakWAAAc3Fl.jpg\",\"media_url_https\":\"https://pbs.twimg.com/media/DKVLSakWAAAc3Fl.jpg\",\"url\":\"https://t.co/eBpZmbbnB7\",\"display_url\":\"pic.twitter.com/eBpZmbbnB7\",\"expanded_url\":\"https://twitter.com/IBM/status/911217282067714048/photo/1\",\"type\":\"photo\",\"sizes\":{\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"},\"medium\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"},\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1024,\"h\":682,\"resize\":\"fit\"}}}]}},\"quote_count\":2,\"reply_count\":0,\"retweet_count\":35,\"favorite_count\":46,\"entities\":{\"hashtags\":[{\"text\":\"IBMIot\",\"indices\":[52,59]}],\"urls\":[{\"url\":\"https://t.co/91BD2uZqFk\",\"expanded_url\":\"https://twitter.com/i/web/status/911217282067714048\",\"display_url\":\"twitter.com/i/web/status/9…\",\"indices\":[101,124]}],\"user_mentions\":[],\"symbols\":[]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"low\",\"lang\":\"en\"},\"is_quote_status\":false,\"quote_count\":0,\"reply_count\":0,\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[{\"text\":\"IBMIot\",\"indices\":[61,68]}],\"urls\":[],\"user_mentions\":[{\"screen_name\":\"IBM\",\"name\":\"IBM\",\"id\":18994444,\"id_str\":\"18994444\",\"indices\":[3,7]}],\"symbols\":[]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"low\",\"lang\":\"en\",\"timestamp_ms\":\"1506176377466\"}", 140 | "payloadType": "json", 141 | "repeat": "", 142 | "crontab": "", 143 | "once": false, 144 | "x": 110, 145 | "y": 460, 146 | "wires": [ 147 | [ 148 | "d6afeeee.4aa088" 149 | ] 150 | ] 151 | }, 152 | { 153 | "id": "d6afeeee.4aa088", 154 | "type": "change", 155 | "z": "d7960f6f.32922", 156 | "name": "", 157 | "rules": [ 158 | { 159 | "t": "set", 160 | "p": "tweet", 161 | "pt": "msg", 162 | "to": "payload", 163 | "tot": "msg" 164 | } 165 | ], 166 | "action": "", 167 | "property": "", 168 | "from": "", 169 | "to": "", 170 | "reg": false, 171 | "x": 300, 172 | "y": 440, 173 | "wires": [ 174 | [ 175 | "72ac291.8b545d8", 176 | "7eaf6775.b46e4", 177 | "ab7a352a.af168" 178 | ] 179 | ] 180 | }, 181 | { 182 | "id": "424a428d.7c1e14", 183 | "type": "comment", 184 | "z": "d7960f6f.32922", 185 | "name": "Sample Tweets", 186 | "info": "", 187 | "x": 120, 188 | "y": 380, 189 | "wires": [] 190 | }, 191 | { 192 | "id": "f5dd7c91.b43ff8", 193 | "type": "function", 194 | "z": "d7960f6f.32922", 195 | "name": "Process Results", 196 | "func": "if (typeof msg.result == 'undefined') {\n return null;\n}\n\n// Text Extraction\nif (typeof msg.result.images[0].text != 'undefined') {\n var image_text = msg.result.images[0].text;\n msg.payload = image_text;\n msg.template = image_text;\n if( image_text.length >0 ) {\n msg.template= \"Watson found the words: \"+image_text;\n }\n return msg;\n}\n\nvar bestcolor = -1;\nvar colorscore = 0;\nvar c_id = 0;\nvar say = \"\";\nvar item;\n\nfor ( c_id=0; c_id < (msg.result.images[0].classifiers.length); c_id++ ){\n // find the best color, if any\n for( i =0; i<(msg.result.images[0].classifiers[c_id].classes.length); i++ ){\n var object = msg.result.images[0].classifiers[c_id].classes[i].class;\n if ( object.includes(\"color\") ) {\n if( msg.result.images[0].classifiers[c_id].classes[i].score > colorscore){\n bestcolor = i;\n colorscore = msg.result.images[0].classifiers[c_id].classes[i].score;\n }\n }\n }\n \n var bestItem = 0;\n var itemScore = 0;\n for( i =0; i<(msg.result.images[0].classifiers[c_id].classes.length); i++ ){\n var object = msg.result.images[0].classifiers[c_id].classes[i].class;\n if ( !object.includes(\"color\") ) {\n if( msg.result.images[0].classifiers[c_id].classes[i].score > itemScore){\n// bestItem = i;\n bestItem = 0;\n itemScore = msg.result.images[0].classifiers[c_id].classes[i].score;\n }\n }\n }\n \n if( bestcolor != \"-1\") {\n // found a color\n item = msg.result.images[0].classifiers[c_id].classes[bestcolor].class + \" \" + msg.result.images[0].classifiers[c_id].classes[bestItem].class;\n bestcolor = -1;\n } else {\n item = msg.result.images[0].classifiers[c_id].classes[bestItem].class;\n }\n// say = say + \" Watson's \" + msg.result.images[0].classifiers[c_id].name + \" classifier thinks this picture contains a \" + item +\".\";\n say = say + \" Watson thinks this picture contains a \" + item +\".\";\n}\nmsg.payload = say;\n\nvar picInfo = msg.result.images[0].classifiers[0].classes;\nvar arrayLength = picInfo.length;\n\nmsg.template=\"\";\n\nmsg.template=msg.template+\"

\"+say+\"

\";\nfor (var i = 0; i < arrayLength; i++) {\n msg.template = msg.template + \"\";\n}\nmsg.template = msg.template + \"
ClassConfidence
\" + picInfo[i].class + \"\" + picInfo[i].score + \"
\"\n\n\nreturn msg;", 197 | "outputs": 1, 198 | "noerr": 0, 199 | "x": 840, 200 | "y": 320, 201 | "wires": [ 202 | [ 203 | "7bc3d5f3.2f1354", 204 | "ddd43261.4edde" 205 | ] 206 | ] 207 | }, 208 | { 209 | "id": "7bc3d5f3.2f1354", 210 | "type": "debug", 211 | "z": "d7960f6f.32922", 212 | "name": "What did Watson find?", 213 | "active": true, 214 | "console": "false", 215 | "complete": "payload", 216 | "x": 1080, 217 | "y": 360, 218 | "wires": [] 219 | }, 220 | { 221 | "id": "3326e141.b60ade", 222 | "type": "change", 223 | "z": "d7960f6f.32922", 224 | "name": "Tweet Text", 225 | "rules": [ 226 | { 227 | "t": "set", 228 | "p": "payload", 229 | "pt": "msg", 230 | "to": "tweet.text", 231 | "tot": "msg" 232 | } 233 | ], 234 | "action": "", 235 | "property": "", 236 | "from": "", 237 | "to": "", 238 | "reg": false, 239 | "x": 590, 240 | "y": 200, 241 | "wires": [ 242 | [ 243 | "b32e795f.a7f23", 244 | "1bc67f6e.dd4791" 245 | ] 246 | ] 247 | }, 248 | { 249 | "id": "b32e795f.a7f23", 250 | "type": "ui_text", 251 | "z": "d7960f6f.32922", 252 | "group": "ae40ee.11eabf1", 253 | "order": 2, 254 | "width": 0, 255 | "height": 0, 256 | "name": "Tweet Text", 257 | "label": "", 258 | "format": "{{msg.payload}}", 259 | "layout": "row-spread", 260 | "x": 830, 261 | "y": 200, 262 | "wires": [] 263 | }, 264 | { 265 | "id": "ddd43261.4edde", 266 | "type": "ui_template", 267 | "z": "d7960f6f.32922", 268 | "group": "b2527f39.a0a148", 269 | "name": "Results Table", 270 | "order": 1, 271 | "width": "9", 272 | "height": "10", 273 | "format": "
", 274 | "storeOutMessages": true, 275 | "fwdInMessages": true, 276 | "templateScope": "local", 277 | "x": 1060, 278 | "y": 320, 279 | "wires": [ 280 | [] 281 | ] 282 | }, 283 | { 284 | "id": "b9519923.896fd8", 285 | "type": "inject", 286 | "z": "d7960f6f.32922", 287 | "name": "", 288 | "topic": "", 289 | "payload": "{\"created_at\":\"Sat Sep 23 17:48:40 +0000 2017\",\"id\":911648524663709700,\"id_str\":\"911648524663709698\",\"text\":\"Breaking 2 @NikeRunning @NatGeo https://t.co/aAygp48EAq\",\"display_text_range\":[0,31],\"source\":\"Twitter for iPhone\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":109308126,\"id_str\":\"109308126\",\"name\":\"Jrmi\",\"screen_name\":\"JeremieRoturier\",\"location\":\"London, England\",\"url\":\"http://jeremieroturier.com\",\"description\":\"Sportsaholic and writing junkie. Member of @JolieFoulee, founder of @EtoileFO. Take pics for quality football magazines. Work at @Apple x @beatsbydre. Ex @Nike.\",\"translator_type\":\"none\",\"protected\":false,\"verified\":false,\"followers_count\":472,\"friends_count\":665,\"listed_count\":24,\"favourites_count\":631,\"statuses_count\":4333,\"created_at\":\"Thu Jan 28 16:42:30 +0000 2010\",\"utc_offset\":7200,\"time_zone\":\"Paris\",\"geo_enabled\":true,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"8C12FF\",\"profile_background_image_url\":\"http://pbs.twimg.com/profile_background_images/106316656/chat_noir.jpg\",\"profile_background_image_url_https\":\"https://pbs.twimg.com/profile_background_images/106316656/chat_noir.jpg\",\"profile_background_tile\":true,\"profile_link_color\":\"85459E\",\"profile_sidebar_border_color\":\"8956B3\",\"profile_sidebar_fill_color\":\"030303\",\"profile_text_color\":\"17BEE8\",\"profile_use_background_image\":true,\"profile_image_url\":\"http://pbs.twimg.com/profile_images/730899031162036224/_8p6sEXu_normal.jpg\",\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/730899031162036224/_8p6sEXu_normal.jpg\",\"profile_banner_url\":\"https://pbs.twimg.com/profile_banners/109308126/1472307658\",\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":{\"id\":\"3078869807f9dd36\",\"url\":\"https://api.twitter.com/1.1/geo/id/3078869807f9dd36.json\",\"place_type\":\"city\",\"name\":\"Berlin\",\"full_name\":\"Berlin, Germany\",\"country_code\":\"DE\",\"country\":\"Germany\",\"bounding_box\":{\"type\":\"Polygon\",\"coordinates\":[[[13.088304,52.338079],[13.088304,52.675323],[13.760909,52.675323],[13.760909,52.338079]]]},\"attributes\":{}},\"contributors\":null,\"is_quote_status\":false,\"quote_count\":0,\"reply_count\":0,\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"urls\":[],\"user_mentions\":[{\"screen_name\":\"NikeRunning\",\"name\":\"Nike+ Run Club\",\"id\":337726224,\"id_str\":\"337726224\",\"indices\":[11,23]},{\"screen_name\":\"NatGeo\",\"name\":\"National Geographic\",\"id\":17471979,\"id_str\":\"17471979\",\"indices\":[24,31]}],\"symbols\":[],\"media\":[{\"id\":911648512970051600,\"id_str\":\"911648512970051585\",\"indices\":[32,55],\"media_url\":\"http://pbs.twimg.com/media/DKbTfg-X0AEAI9P.jpg\",\"media_url_https\":\"https://pbs.twimg.com/media/DKbTfg-X0AEAI9P.jpg\",\"url\":\"https://t.co/aAygp48EAq\",\"display_url\":\"pic.twitter.com/aAygp48EAq\",\"expanded_url\":\"https://twitter.com/JeremieRoturier/status/911648524663709698/photo/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1776,\"h\":1184,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"extended_entities\":{\"media\":[{\"id\":911648512970051600,\"id_str\":\"911648512970051585\",\"indices\":[32,55],\"media_url\":\"http://pbs.twimg.com/media/DKbTfg-X0AEAI9P.jpg\",\"media_url_https\":\"https://pbs.twimg.com/media/DKbTfg-X0AEAI9P.jpg\",\"url\":\"https://t.co/aAygp48EAq\",\"display_url\":\"pic.twitter.com/aAygp48EAq\",\"expanded_url\":\"https://twitter.com/JeremieRoturier/status/911648524663709698/photo/1\",\"type\":\"photo\",\"sizes\":{\"thumb\":{\"w\":150,\"h\":150,\"resize\":\"crop\"},\"large\":{\"w\":1776,\"h\":1184,\"resize\":\"fit\"},\"medium\":{\"w\":1200,\"h\":800,\"resize\":\"fit\"},\"small\":{\"w\":680,\"h\":453,\"resize\":\"fit\"}}}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"low\",\"lang\":\"en\",\"timestamp_ms\":\"1506188920547\"}", 290 | "payloadType": "json", 291 | "repeat": "", 292 | "crontab": "", 293 | "once": false, 294 | "x": 110, 295 | "y": 420, 296 | "wires": [ 297 | [ 298 | "d6afeeee.4aa088" 299 | ] 300 | ] 301 | }, 302 | { 303 | "id": "d7b640d.dd860c", 304 | "type": "comment", 305 | "z": "d7960f6f.32922", 306 | "name": "Paste API keys for Visual Recognition", 307 | "info": "1. Log into IBM Cloud\n2. Create an instance of the \nWatson Visual Recognition service.\n3. Visit the Service Credentials tab\n4. Click on View Credentials\n5. Copy/Paste the password and username into\nthis Node-RED node.", 308 | "x": 570, 309 | "y": 360, 310 | "wires": [] 311 | }, 312 | { 313 | "id": "7eaf6775.b46e4", 314 | "type": "debug", 315 | "z": "d7960f6f.32922", 316 | "name": "", 317 | "active": true, 318 | "console": "false", 319 | "complete": "false", 320 | "x": 530, 321 | "y": 440, 322 | "wires": [] 323 | }, 324 | { 325 | "id": "69bd043c.43690c", 326 | "type": "delay", 327 | "z": "d7960f6f.32922", 328 | "name": "", 329 | "pauseType": "rate", 330 | "timeout": "5", 331 | "timeoutUnits": "seconds", 332 | "rate": "1", 333 | "nbRateUnits": "10", 334 | "rateUnits": "second", 335 | "randomFirst": "1", 336 | "randomLast": "5", 337 | "randomUnits": "seconds", 338 | "drop": false, 339 | "x": 300, 340 | "y": 80, 341 | "wires": [ 342 | [ 343 | "72ac291.8b545d8", 344 | "cde1d941.2c6918" 345 | ] 346 | ] 347 | }, 348 | { 349 | "id": "1bc67f6e.dd4791", 350 | "type": "sentiment", 351 | "z": "d7960f6f.32922", 352 | "name": "", 353 | "x": 820, 354 | "y": 160, 355 | "wires": [ 356 | [ 357 | "d191cafb.c9143" 358 | ] 359 | ] 360 | }, 361 | { 362 | "id": "d25d922b.d2931", 363 | "type": "ui_gauge", 364 | "z": "d7960f6f.32922", 365 | "name": "", 366 | "group": "594f7eff.57134", 367 | "order": 0, 368 | "width": 0, 369 | "height": 0, 370 | "gtype": "gage", 371 | "title": "Sentiment Score", 372 | "label": "", 373 | "format": "{{value}}", 374 | "min": "-10", 375 | "max": 10, 376 | "colors": [ 377 | "#ff0000", 378 | "#e6e600", 379 | "#008040" 380 | ], 381 | "seg1": "", 382 | "seg2": "", 383 | "x": 1230, 384 | "y": 160, 385 | "wires": [] 386 | }, 387 | { 388 | "id": "d191cafb.c9143", 389 | "type": "change", 390 | "z": "d7960f6f.32922", 391 | "name": "Sentiment Score", 392 | "rules": [ 393 | { 394 | "t": "set", 395 | "p": "payload", 396 | "pt": "msg", 397 | "to": "sentiment.score", 398 | "tot": "msg" 399 | } 400 | ], 401 | "action": "", 402 | "property": "", 403 | "from": "", 404 | "to": "", 405 | "reg": false, 406 | "x": 1010, 407 | "y": 160, 408 | "wires": [ 409 | [ 410 | "d25d922b.d2931", 411 | "7a0fe77.644fc98" 412 | ] 413 | ] 414 | }, 415 | { 416 | "id": "7a0fe77.644fc98", 417 | "type": "debug", 418 | "z": "d7960f6f.32922", 419 | "name": "", 420 | "active": true, 421 | "console": "false", 422 | "complete": "false", 423 | "x": 1210, 424 | "y": 200, 425 | "wires": [] 426 | }, 427 | { 428 | "id": "ab7a352a.af168", 429 | "type": "change", 430 | "z": "d7960f6f.32922", 431 | "name": "Twitter Handle", 432 | "rules": [ 433 | { 434 | "t": "set", 435 | "p": "payload", 436 | "pt": "msg", 437 | "to": "tweet.user.screen_name", 438 | "tot": "msg" 439 | } 440 | ], 441 | "action": "", 442 | "property": "", 443 | "from": "", 444 | "to": "", 445 | "reg": false, 446 | "x": 600, 447 | "y": 400, 448 | "wires": [ 449 | [ 450 | "6f96b982.1ed5c8" 451 | ] 452 | ] 453 | }, 454 | { 455 | "id": "6f96b982.1ed5c8", 456 | "type": "ui_text", 457 | "z": "d7960f6f.32922", 458 | "group": "ae40ee.11eabf1", 459 | "order": 1, 460 | "width": 0, 461 | "height": 0, 462 | "name": "", 463 | "label": "User: ", 464 | "format": "{{msg.payload}}", 465 | "layout": "row-left", 466 | "x": 810, 467 | "y": 400, 468 | "wires": [] 469 | }, 470 | { 471 | "id": "6a7c7ce7.95586c", 472 | "type": "ui_ui_control", 473 | "z": "d7960f6f.32922", 474 | "name": "", 475 | "x": 820, 476 | "y": 280, 477 | "wires": [ 478 | [] 479 | ] 480 | }, 481 | { 482 | "id": "e87a0d51.5ab72", 483 | "type": "function", 484 | "z": "d7960f6f.32922", 485 | "name": "Tweet URL", 486 | "func": "msg.payload = \"Open Tweet\";\nif( typeof msg.payload.retweeted_status != 'undefined') {\n msg.payload = \"Open Tweet\";\n}\nreturn msg;", 487 | "outputs": 1, 488 | "noerr": 0, 489 | "x": 590, 490 | "y": 120, 491 | "wires": [ 492 | [ 493 | "b35854f2.84548", 494 | "62654956.719388" 495 | ] 496 | ] 497 | }, 498 | { 499 | "id": "b35854f2.84548", 500 | "type": "ui_template", 501 | "z": "d7960f6f.32922", 502 | "group": "594f7eff.57134", 503 | "name": "Open Tweet", 504 | "order": 0, 505 | "width": 0, 506 | "height": 0, 507 | "format": "
", 508 | "storeOutMessages": true, 509 | "fwdInMessages": true, 510 | "templateScope": "local", 511 | "x": 830, 512 | "y": 120, 513 | "wires": [ 514 | [] 515 | ] 516 | }, 517 | { 518 | "id": "62654956.719388", 519 | "type": "debug", 520 | "z": "d7960f6f.32922", 521 | "name": "", 522 | "active": true, 523 | "console": "false", 524 | "complete": "false", 525 | "x": 830, 526 | "y": 80, 527 | "wires": [] 528 | }, 529 | { 530 | "id": "ae40ee.11eabf1", 531 | "type": "ui_group", 532 | "z": "d7960f6f.32922", 533 | "name": "Tweet", 534 | "tab": "4a137c76.fb1364", 535 | "order": 1, 536 | "disp": true, 537 | "width": "9" 538 | }, 539 | { 540 | "id": "b2527f39.a0a148", 541 | "type": "ui_group", 542 | "z": "", 543 | "name": "Results", 544 | "tab": "4a137c76.fb1364", 545 | "order": 2, 546 | "disp": true, 547 | "width": "9" 548 | }, 549 | { 550 | "id": "594f7eff.57134", 551 | "type": "ui_group", 552 | "z": "", 553 | "name": "Sentiment", 554 | "tab": "4a137c76.fb1364", 555 | "order": 3, 556 | "disp": false, 557 | "width": "8" 558 | }, 559 | { 560 | "id": "4a137c76.fb1364", 561 | "type": "ui_tab", 562 | "z": "d7960f6f.32922", 563 | "name": "Twitter Image Analysis", 564 | "icon": "dashboard", 565 | "order": 3 566 | } 567 | ] 568 | -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/screenshots/NRD-Layout-TwitterExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/screenshots/NRD-Layout-TwitterExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/screenshots/NRD-Layout-TwitterExampleFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/screenshots/NRD-Layout-TwitterExampleFlow.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddGroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddGroup.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddLink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddLink.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddTab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddTab.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddWidget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-AddWidget.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashTab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashTab.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashTwitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashTwitter.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashWidget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-DashWidget.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Launch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Launch.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-MoveWidget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-MoveWidget.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-PaletteBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-PaletteBlank.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Resize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Resize.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-SiteConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-SiteConfig.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Theme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Theme.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Title.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Trailer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture2-Node-RED-Layout-Config/slides/NRD-Layout-Trailer.png -------------------------------------------------------------------------------- /Dashboard/Lecture2-Node-RED-Layout-Config/slides/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED Lecture 2 2 | Lecture 2 - Node-RED Dashboard Layout and Configuration Slides 3 | ![Node-RED Dashboard Layout Slide 1](NRD-Layout-Title.png?raw=true "Node-RED Dashboard Chart") 4 | ![Node-RED Dashboard Layout Slide 2](NRD-Layout-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 5 | ![Node-RED Dashboard Layout Slide 3](NRD-Layout-DashTab.png?raw=true "Node-RED Dashboard Chart") 6 | ![Node-RED Dashboard Layout Slide 4](NRD-Layout-DashTwitter.png?raw=true "Node-RED Dashboard Chart") 7 | ![Node-RED Dashboard Layout Slide 5](NRD-Layout-DashWidget.png?raw=true "Node-RED Dashboard Chart") 8 | ![Node-RED Dashboard Layout Slide 6](NRD-Layout-AddTab.png?raw=true "Node-RED Dashboard Chart") 9 | ![Node-RED Dashboard Layout Slide 7](NRD-Layout-AddGroup.png?raw=true "Node-RED Dashboard Chart") 10 | ![Node-RED Dashboard Layout Slide 8](NRD-Layout-AddWidget.png?raw=true "Node-RED Dashboard Chart") 11 | ![Node-RED Dashboard Layout Slide 9](NRD-Layout-MoveWidget.png?raw=true "Node-RED Dashboard Chart") 12 | ![Node-RED Dashboard Layout Slide 10](NRD-Layout-Resize.png?raw=true "Node-RED Dashboard Chart") 13 | ![Node-RED Dashboard Layout Slide 11](NRD-Layout-Theme.png?raw=true "Node-RED Dashboard Chart") 14 | ![Node-RED Dashboard Layout Slide 12](NRD-Layout-SiteConfig.png?raw=true "Node-RED Dashboard Chart") 15 | ![Node-RED Dashboard Layout Slide 13](NRD-Layout-AddLink.png?raw=true "Node-RED Dashboard Chart") 16 | ![Node-RED Dashboard Layout Slide 14](NRD-Layout-Launch.png?raw=true "Node-RED Dashboard Chart") 17 | ![Node-RED Dashboard Layout Slide 15](NRD-Layout-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 18 | ![Node-RED Dashboard Layout Slide 16](NRD-Layout-Trailer.png?raw=true "Node-RED Dashboard Chart") 19 | -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/README.md: -------------------------------------------------------------------------------- 1 | # Coursera Node-RED Dashboard Charts 2 | ## Developers Guide to Node-RED 3 | 4 | This lecture introduces Node-RED Dashboard Chart features 5 | 6 | ## Review the Lecture 3 Node-RED Dashboard Charts slides 7 | [Slides](slides/README.md) 8 | 9 | ## Download the Lecture 3 Node-RED Dashboard Example flows 10 | * Get the Dashboard Chart Intro flow [here](flows/Dashboard-Chart-Intro.json) 11 | * Get the Dashboard Advanced Chart flow [here](flows/Dashboard-Chart-Advanced.json) 12 | * Get the Dashboard Historical flow [here](flows/Dashboard-Chart-Historical.json) 13 | 14 | ## Screenshots of Lecture 3 Node-RED Dashboard Charts 15 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Flow.png?raw=true "Node-RED Dashboard Chart") 16 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Dashboard.png?raw=true "Node-RED Dashboard Chart") 17 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Dashboard-Line.png?raw=true "Node-RED Dashboard Chart") 18 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Dashboard-bar.png?raw=true "Node-RED Dashboard Chart") 19 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Dashboard-pie.png?raw=true "Node-RED Dashboard Chart") 20 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Flow-LineChartArray.png?raw=true "Node-RED Dashboard Chart") 21 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Flow-LineChartArrayM.png?raw=true "Node-RED Dashboard Chart") 22 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Flow-BarArray.png?raw=true "Node-RED Dashboard Chart") 23 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Intro-Flow-PieArray.png?raw=true "Node-RED Dashboard Chart") 24 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Historical-Flow.png?raw=true "Node-RED Dashboard Chart") 25 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Historical-Dashboard.png?raw=true "Node-RED Dashboard Chart") 26 | ![Node-RED Dashboard Chart](screenshots/NRD-Charts-Historical-Flow-LineChartArray.png?raw=true "Node-RED Dashboard Chart") 27 | ![Node-RED Dashboard Chart](screenshots/NRD-AdvancedCharts.png?raw=true "Node-RED Dashboard Chart") 28 | ![Node-RED Dashboard Chart](screenshots/NRD-AdvancedCharts-Flow.png?raw=true "Node-RED Dashboard Chart") 29 | 30 | -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/flows/Dashboard-Chart-Advanced.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "2da00948.a80b3e", 4 | "type": "tab", 5 | "label": "Advanced Historical Chart", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "3877a7c.cbc1cd8", 11 | "type": "debug", 12 | "z": "2da00948.a80b3e", 13 | "name": "", 14 | "active": true, 15 | "console": "false", 16 | "complete": "false", 17 | "x": 1250, 18 | "y": 300, 19 | "wires": [] 20 | }, 21 | { 22 | "id": "3ea4bea1.273f02", 23 | "type": "ui_chart", 24 | "z": "2da00948.a80b3e", 25 | "name": "", 26 | "group": "accfc4c.c4a8438", 27 | "order": 0, 28 | "width": 0, 29 | "height": 0, 30 | "label": "A Chart of Random DataSets", 31 | "chartType": "line", 32 | "legend": "false", 33 | "xformat": "HH:mm:ss", 34 | "interpolate": "linear", 35 | "nodata": "", 36 | "dot": false, 37 | "ymin": "", 38 | "ymax": "", 39 | "removeOlder": 1, 40 | "removeOlderPoints": "5000", 41 | "removeOlderUnit": "3600", 42 | "cutout": 0, 43 | "useOneColor": false, 44 | "colors": [ 45 | "#1f77b4", 46 | "#aec7e8", 47 | "#ff7f0e", 48 | "#2ca02c", 49 | "#98df8a", 50 | "#d62728", 51 | "#ff9896", 52 | "#9467bd", 53 | "#c5b0d5" 54 | ], 55 | "useOldStyle": false, 56 | "x": 1300, 57 | "y": 260, 58 | "wires": [ 59 | [], 60 | [] 61 | ] 62 | }, 63 | { 64 | "id": "75923f47.dd13b8", 65 | "type": "function", 66 | "z": "2da00948.a80b3e", 67 | "name": "Create a Chart Array for Chart.js", 68 | "func": "var starttime = flow.get(\"StartTime\");\nvar endtime = flow.get(\"EndTime\");\nvar PlotSeries0 = flow.get(\"PlotSeries0\");\nvar PlotSeries1 = flow.get(\"PlotSeries1\"); // Switch can be True / False\nvar PlotSeries2 = flow.get(\"PlotSeries2\");\nvar Series0Data = flow.get(\"Series0Data\");\nvar Series1Data = flow.get(\"Series1Data\");\nvar Series2Data = flow.get(\"Series2Data\");\n\n// Example Chart Data\n// [{\"series\":[\"A\",\"B\",\"C\"],\"data\":[[{\"x\":1504029632890,\"y\":5},{\"x\":1504029636001,\"y\":4}]],\"labels\":[\"\"]}]\n// The Array has this structure, inserting the first element as a template.\nvar ChartData = [ {\"series\":[\"Series0\",\"Series1\",\"Series2\"],\n \"data\":[\n [{\"x\":starttime,\"y\":0}],\n [{\"x\":starttime,\"y\":0}],\n [{\"x\":starttime,\"y\":0}]\n ],\n \"labels\":[\"Data 0\",\"Data 1\",\"Data 2\"]}];\n \n// Now that the json object is defined, remove the bogus first data {x,y} object.\n// This triggers an odd bug in node-red-dashboard chart however when data[0] array has zero elements.\nChartData[0].data[0].shift(); \nChartData[0].data[1].shift(); \nChartData[0].data[2].shift(); \n \n \nif( PlotSeries0 === true ) {\n for( var i=0; i < Series0Data.length; i++ ) {\n // Filter on the selected timestamp range\n if( (Series0Data[i].time > starttime) && (Series0Data[i].time < endtime)) {\n ChartData[0].data[0].push( { \"x\":Series0Data[i].time,\"y\":Series0Data[i].data } );\n }\n }\n // Now we need to sort on the time so that we give the Chart node an array in time order\n ChartData[0].data[0].sort(function sortNumber(a,b) { return a.x - b.x; });\n}\nif( PlotSeries1 === true ) {\n for( var i=0; i < Series1Data.length; i++ ) {\n // Filter on the selected timestamp range\n if( (Series1Data[i].time > starttime) && (Series1Data[i].time < endtime)) {\n ChartData[0].data[1].push( { \"x\":Series1Data[i].time,\"y\":Series1Data[i].data } );\n }\n }\n // Now we need to sort on the time so that we give the Chart node an array in time order\n ChartData[0].data[1].sort(function sortNumber(a,b) { return a.x - b.x; });\n}\nif( PlotSeries2 === true ) {\n for( var i=0; i < Series2Data.length; i++ ) {\n // Filter on the selected timestamp range\n if( (Series2Data[i].time > starttime) && (Series2Data[i].time < endtime)) {\n ChartData[0].data[2].push( { \"x\":Series2Data[i].time,\"y\":Series2Data[i].data } );\n }\n }\n // Now we need to sort on the time so that we give the Chart node an array in time order\n ChartData[0].data[2].sort(function sortNumber(a,b) { return a.x - b.x; });\n}\nmsg.payload = ChartData;\nreturn msg;", 69 | "outputs": 1, 70 | "noerr": 0, 71 | "x": 1000, 72 | "y": 280, 73 | "wires": [ 74 | [ 75 | "3ea4bea1.273f02", 76 | "3877a7c.cbc1cd8" 77 | ] 78 | ] 79 | }, 80 | { 81 | "id": "e79b4a61.c10278", 82 | "type": "cloudant in", 83 | "z": "2da00948.a80b3e", 84 | "name": "", 85 | "cloudant": "", 86 | "database": "historicaldata0", 87 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 88 | "search": "_all_", 89 | "design": "", 90 | "index": "", 91 | "x": 520, 92 | "y": 220, 93 | "wires": [ 94 | [ 95 | "f7e3137d.e321d" 96 | ] 97 | ] 98 | }, 99 | { 100 | "id": "777369e5.b10768", 101 | "type": "ui_date_picker", 102 | "z": "2da00948.a80b3e", 103 | "name": "", 104 | "label": "Start Date", 105 | "group": "79893d76.03a0dc", 106 | "order": 5, 107 | "width": 0, 108 | "height": 0, 109 | "passthru": true, 110 | "topic": "", 111 | "x": 500, 112 | "y": 80, 113 | "wires": [ 114 | [ 115 | "e37273c3.4711f8" 116 | ] 117 | ] 118 | }, 119 | { 120 | "id": "4ca42419.06fa54", 121 | "type": "ui_date_picker", 122 | "z": "2da00948.a80b3e", 123 | "name": "", 124 | "label": "End Date", 125 | "group": "79893d76.03a0dc", 126 | "order": 6, 127 | "width": 0, 128 | "height": 0, 129 | "passthru": true, 130 | "topic": "", 131 | "x": 500, 132 | "y": 120, 133 | "wires": [ 134 | [ 135 | "207f73b.a5b1a8c" 136 | ] 137 | ] 138 | }, 139 | { 140 | "id": "784164e.50c171c", 141 | "type": "comment", 142 | "z": "2da00948.a80b3e", 143 | "name": "Select Date Range", 144 | "info": "", 145 | "x": 310, 146 | "y": 40, 147 | "wires": [] 148 | }, 149 | { 150 | "id": "becc10a8.6080e8", 151 | "type": "ui_text", 152 | "z": "2da00948.a80b3e", 153 | "group": "79893d76.03a0dc", 154 | "order": 4, 155 | "width": "6", 156 | "height": "2", 157 | "name": "Blank text", 158 | "label": "", 159 | "format": "", 160 | "layout": "row-spread", 161 | "x": 500, 162 | "y": 40, 163 | "wires": [] 164 | }, 165 | { 166 | "id": "90d40017.1ab34", 167 | "type": "debug", 168 | "z": "2da00948.a80b3e", 169 | "name": "", 170 | "active": true, 171 | "console": "false", 172 | "complete": "false", 173 | "x": 910, 174 | "y": 80, 175 | "wires": [] 176 | }, 177 | { 178 | "id": "1cd5274e.0b5181", 179 | "type": "debug", 180 | "z": "2da00948.a80b3e", 181 | "name": "", 182 | "active": true, 183 | "console": "false", 184 | "complete": "false", 185 | "x": 910, 186 | "y": 120, 187 | "wires": [] 188 | }, 189 | { 190 | "id": "9586e5b6.7d6408", 191 | "type": "change", 192 | "z": "2da00948.a80b3e", 193 | "name": "Start Date - 11/01/2017", 194 | "rules": [ 195 | { 196 | "t": "set", 197 | "p": "payload", 198 | "pt": "msg", 199 | "to": "1509580800000", 200 | "tot": "num" 201 | } 202 | ], 203 | "action": "", 204 | "property": "", 205 | "from": "", 206 | "to": "", 207 | "reg": false, 208 | "x": 290, 209 | "y": 80, 210 | "wires": [ 211 | [ 212 | "777369e5.b10768" 213 | ] 214 | ] 215 | }, 216 | { 217 | "id": "dd681895.de181", 218 | "type": "change", 219 | "z": "2da00948.a80b3e", 220 | "name": "End Date - 11/07/2017", 221 | "rules": [ 222 | { 223 | "t": "set", 224 | "p": "payload", 225 | "pt": "msg", 226 | "to": "1510099200000", 227 | "tot": "num" 228 | } 229 | ], 230 | "action": "", 231 | "property": "", 232 | "from": "", 233 | "to": "", 234 | "reg": false, 235 | "x": 290, 236 | "y": 120, 237 | "wires": [ 238 | [ 239 | "4ca42419.06fa54" 240 | ] 241 | ] 242 | }, 243 | { 244 | "id": "e37273c3.4711f8", 245 | "type": "change", 246 | "z": "2da00948.a80b3e", 247 | "name": "Set Start Time Range", 248 | "rules": [ 249 | { 250 | "t": "set", 251 | "p": "StartTime", 252 | "pt": "flow", 253 | "to": "payload", 254 | "tot": "msg" 255 | } 256 | ], 257 | "action": "", 258 | "property": "", 259 | "from": "", 260 | "to": "", 261 | "reg": false, 262 | "x": 700, 263 | "y": 80, 264 | "wires": [ 265 | [ 266 | "90d40017.1ab34" 267 | ] 268 | ] 269 | }, 270 | { 271 | "id": "207f73b.a5b1a8c", 272 | "type": "change", 273 | "z": "2da00948.a80b3e", 274 | "name": "Set End Time Range", 275 | "rules": [ 276 | { 277 | "t": "set", 278 | "p": "EndTime", 279 | "pt": "flow", 280 | "to": "payload", 281 | "tot": "msg" 282 | } 283 | ], 284 | "action": "", 285 | "property": "", 286 | "from": "", 287 | "to": "", 288 | "reg": false, 289 | "x": 700, 290 | "y": 120, 291 | "wires": [ 292 | [ 293 | "1cd5274e.0b5181" 294 | ] 295 | ] 296 | }, 297 | { 298 | "id": "3e4b0246.d4ea5e", 299 | "type": "inject", 300 | "z": "2da00948.a80b3e", 301 | "name": "", 302 | "topic": "", 303 | "payload": "true", 304 | "payloadType": "bool", 305 | "repeat": "", 306 | "crontab": "", 307 | "once": true, 308 | "x": 90, 309 | "y": 100, 310 | "wires": [ 311 | [ 312 | "9586e5b6.7d6408", 313 | "dd681895.de181" 314 | ] 315 | ] 316 | }, 317 | { 318 | "id": "d37bc5ad.816138", 319 | "type": "cloudant in", 320 | "z": "2da00948.a80b3e", 321 | "name": "", 322 | "cloudant": "", 323 | "database": "historicaldata1", 324 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 325 | "search": "_all_", 326 | "design": "", 327 | "index": "", 328 | "x": 520, 329 | "y": 280, 330 | "wires": [ 331 | [ 332 | "c2180ed1.a5dc88" 333 | ] 334 | ] 335 | }, 336 | { 337 | "id": "8ccb3b9b.72796", 338 | "type": "cloudant in", 339 | "z": "2da00948.a80b3e", 340 | "name": "", 341 | "cloudant": "", 342 | "database": "historicaldata2", 343 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 344 | "search": "_all_", 345 | "design": "", 346 | "index": "", 347 | "x": 520, 348 | "y": 340, 349 | "wires": [ 350 | [ 351 | "5dcd2013.7801b8" 352 | ] 353 | ] 354 | }, 355 | { 356 | "id": "5aabcf1b.6735a8", 357 | "type": "ui_switch", 358 | "z": "2da00948.a80b3e", 359 | "name": "", 360 | "label": "Random Data #0", 361 | "group": "79893d76.03a0dc", 362 | "order": 1, 363 | "width": 0, 364 | "height": 0, 365 | "passthru": true, 366 | "decouple": "false", 367 | "topic": "Series0", 368 | "style": "", 369 | "onvalue": "true", 370 | "onvalueType": "bool", 371 | "onicon": "", 372 | "oncolor": "", 373 | "offvalue": "false", 374 | "offvalueType": "bool", 375 | "officon": "", 376 | "offcolor": "", 377 | "x": 110, 378 | "y": 220, 379 | "wires": [ 380 | [ 381 | "237bce55.43d4a2" 382 | ] 383 | ] 384 | }, 385 | { 386 | "id": "5c675908.786168", 387 | "type": "ui_switch", 388 | "z": "2da00948.a80b3e", 389 | "name": "", 390 | "label": "Random Data #1", 391 | "group": "79893d76.03a0dc", 392 | "order": 2, 393 | "width": 0, 394 | "height": 0, 395 | "passthru": true, 396 | "decouple": "false", 397 | "topic": "Series1", 398 | "style": "", 399 | "onvalue": "true", 400 | "onvalueType": "bool", 401 | "onicon": "", 402 | "oncolor": "", 403 | "offvalue": "false", 404 | "offvalueType": "bool", 405 | "officon": "", 406 | "offcolor": "", 407 | "x": 110, 408 | "y": 280, 409 | "wires": [ 410 | [ 411 | "4a49d756.4dc0f" 412 | ] 413 | ] 414 | }, 415 | { 416 | "id": "72ac68c0.62e1e", 417 | "type": "ui_switch", 418 | "z": "2da00948.a80b3e", 419 | "name": "", 420 | "label": "Random Data #2", 421 | "group": "79893d76.03a0dc", 422 | "order": 3, 423 | "width": 0, 424 | "height": 0, 425 | "passthru": true, 426 | "decouple": "false", 427 | "topic": "", 428 | "style": "", 429 | "onvalue": "true", 430 | "onvalueType": "bool", 431 | "onicon": "", 432 | "oncolor": "", 433 | "offvalue": "false", 434 | "offvalueType": "bool", 435 | "officon": "", 436 | "offcolor": "", 437 | "x": 110, 438 | "y": 340, 439 | "wires": [ 440 | [ 441 | "ff0a1878.557288" 442 | ] 443 | ] 444 | }, 445 | { 446 | "id": "237bce55.43d4a2", 447 | "type": "change", 448 | "z": "2da00948.a80b3e", 449 | "name": "", 450 | "rules": [ 451 | { 452 | "t": "set", 453 | "p": "PlotSeries0", 454 | "pt": "flow", 455 | "to": "payload", 456 | "tot": "msg" 457 | } 458 | ], 459 | "action": "", 460 | "property": "", 461 | "from": "", 462 | "to": "", 463 | "reg": false, 464 | "x": 310, 465 | "y": 220, 466 | "wires": [ 467 | [ 468 | "e79b4a61.c10278" 469 | ] 470 | ] 471 | }, 472 | { 473 | "id": "4a49d756.4dc0f", 474 | "type": "change", 475 | "z": "2da00948.a80b3e", 476 | "name": "", 477 | "rules": [ 478 | { 479 | "t": "set", 480 | "p": "PlotSeries1", 481 | "pt": "flow", 482 | "to": "payload", 483 | "tot": "msg" 484 | } 485 | ], 486 | "action": "", 487 | "property": "", 488 | "from": "", 489 | "to": "", 490 | "reg": false, 491 | "x": 310, 492 | "y": 280, 493 | "wires": [ 494 | [ 495 | "d37bc5ad.816138" 496 | ] 497 | ] 498 | }, 499 | { 500 | "id": "ff0a1878.557288", 501 | "type": "change", 502 | "z": "2da00948.a80b3e", 503 | "name": "", 504 | "rules": [ 505 | { 506 | "t": "set", 507 | "p": "PlotSeries2", 508 | "pt": "flow", 509 | "to": "payload", 510 | "tot": "msg" 511 | } 512 | ], 513 | "action": "", 514 | "property": "", 515 | "from": "", 516 | "to": "", 517 | "reg": false, 518 | "x": 310, 519 | "y": 340, 520 | "wires": [ 521 | [ 522 | "8ccb3b9b.72796" 523 | ] 524 | ] 525 | }, 526 | { 527 | "id": "f7e3137d.e321d", 528 | "type": "change", 529 | "z": "2da00948.a80b3e", 530 | "name": "", 531 | "rules": [ 532 | { 533 | "t": "set", 534 | "p": "Series0Data", 535 | "pt": "flow", 536 | "to": "payload", 537 | "tot": "msg" 538 | } 539 | ], 540 | "action": "", 541 | "property": "", 542 | "from": "", 543 | "to": "", 544 | "reg": false, 545 | "x": 720, 546 | "y": 220, 547 | "wires": [ 548 | [ 549 | "75923f47.dd13b8" 550 | ] 551 | ] 552 | }, 553 | { 554 | "id": "c2180ed1.a5dc88", 555 | "type": "change", 556 | "z": "2da00948.a80b3e", 557 | "name": "", 558 | "rules": [ 559 | { 560 | "t": "set", 561 | "p": "Series1Data", 562 | "pt": "flow", 563 | "to": "payload", 564 | "tot": "msg" 565 | } 566 | ], 567 | "action": "", 568 | "property": "", 569 | "from": "", 570 | "to": "", 571 | "reg": false, 572 | "x": 720, 573 | "y": 280, 574 | "wires": [ 575 | [ 576 | "75923f47.dd13b8" 577 | ] 578 | ] 579 | }, 580 | { 581 | "id": "5dcd2013.7801b8", 582 | "type": "change", 583 | "z": "2da00948.a80b3e", 584 | "name": "", 585 | "rules": [ 586 | { 587 | "t": "set", 588 | "p": "Series2Data", 589 | "pt": "flow", 590 | "to": "payload", 591 | "tot": "msg" 592 | } 593 | ], 594 | "action": "", 595 | "property": "", 596 | "from": "", 597 | "to": "", 598 | "reg": false, 599 | "x": 720, 600 | "y": 340, 601 | "wires": [ 602 | [ 603 | "75923f47.dd13b8" 604 | ] 605 | ] 606 | }, 607 | { 608 | "id": "accfc4c.c4a8438", 609 | "type": "ui_group", 610 | "z": "", 611 | "name": "Historical Data", 612 | "tab": "6a569670.96b548", 613 | "order": 1, 614 | "disp": true, 615 | "width": "18" 616 | }, 617 | { 618 | "id": "79893d76.03a0dc", 619 | "type": "ui_group", 620 | "z": "", 621 | "name": "Chart Controls", 622 | "tab": "6a569670.96b548", 623 | "order": 2, 624 | "disp": true, 625 | "width": "6" 626 | }, 627 | { 628 | "id": "6a569670.96b548", 629 | "type": "ui_tab", 630 | "z": "", 631 | "name": "Advanced Charts", 632 | "icon": "dashboard", 633 | "order": 4 634 | } 635 | ] 636 | -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/flows/Dashboard-Chart-Historical.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "bbee03f2.5d15c", 4 | "type": "tab", 5 | "label": "Historical Chart", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "60a9bb2.7c76744", 11 | "type": "debug", 12 | "z": "bbee03f2.5d15c", 13 | "name": "", 14 | "active": true, 15 | "console": "false", 16 | "complete": "false", 17 | "x": 910, 18 | "y": 100, 19 | "wires": [] 20 | }, 21 | { 22 | "id": "b425187b.f4f928", 23 | "type": "ui_chart", 24 | "z": "bbee03f2.5d15c", 25 | "name": "", 26 | "group": "dfcb4ecc.ad5b48", 27 | "order": 0, 28 | "width": 0, 29 | "height": 0, 30 | "label": "A Chart of Random Data", 31 | "chartType": "line", 32 | "legend": "false", 33 | "xformat": "HH:mm:ss", 34 | "interpolate": "linear", 35 | "nodata": "", 36 | "dot": false, 37 | "ymin": "", 38 | "ymax": "", 39 | "removeOlder": 1, 40 | "removeOlderPoints": "5000", 41 | "removeOlderUnit": "3600", 42 | "cutout": 0, 43 | "useOneColor": false, 44 | "colors": [ 45 | "#1f77b4", 46 | "#aec7e8", 47 | "#ff7f0e", 48 | "#2ca02c", 49 | "#98df8a", 50 | "#d62728", 51 | "#ff9896", 52 | "#9467bd", 53 | "#c5b0d5" 54 | ], 55 | "useOldStyle": false, 56 | "x": 950, 57 | "y": 60, 58 | "wires": [ 59 | [], 60 | [] 61 | ] 62 | }, 63 | { 64 | "id": "7687d18b.9f3958", 65 | "type": "function", 66 | "z": "bbee03f2.5d15c", 67 | "name": "Create a Chart Array for Chart.js", 68 | "func": "// This function reformats the timeseries data into an array that \n// Chart.js (See http://www.chartjs.org/ ) will plot\n// The node-red-dashboard Chart node uses Chart.js \n\n// The Array has this structure, inserting the first element as a template.\nvar ChartData = [ {\"series\":[\"Data\"],\n \"data\":[[{\"x\":msg.payload[0].time,\"y\":msg.payload[0].data}]],\n \"labels\":[\"Data\"]}];\n\n// Start at 1 because we've already added element 0 in the initial array definition\nfor( var i=1; i < msg.payload.length; i++ ) {\n ChartData[0].data[0].push( { \"x\":msg.payload[i].time,\"y\":msg.payload[i].data } );\n}\n// Now we need to sort on the time so that we give the Chart node an array in time order\nChartData[0].data[0].sort(function sortNumber(a,b) { return a.x - b.x; });\n\nmsg.payload = ChartData;\nreturn msg;", 69 | "outputs": 1, 70 | "noerr": 0, 71 | "x": 630, 72 | "y": 60, 73 | "wires": [ 74 | [ 75 | "b425187b.f4f928", 76 | "60a9bb2.7c76744" 77 | ] 78 | ] 79 | }, 80 | { 81 | "id": "3a6c7023.a11ae", 82 | "type": "cloudant in", 83 | "z": "bbee03f2.5d15c", 84 | "name": "", 85 | "cloudant": "", 86 | "database": "historicaldata", 87 | "service": "coursera-advanced-nodered-cloudantNoSQLDB", 88 | "search": "_all_", 89 | "design": "", 90 | "index": "", 91 | "x": 360, 92 | "y": 60, 93 | "wires": [ 94 | [ 95 | "2ce9238f.6eec24", 96 | "7687d18b.9f3958" 97 | ] 98 | ] 99 | }, 100 | { 101 | "id": "2ce9238f.6eec24", 102 | "type": "debug", 103 | "z": "bbee03f2.5d15c", 104 | "name": "", 105 | "active": true, 106 | "console": "false", 107 | "complete": "false", 108 | "x": 570, 109 | "y": 100, 110 | "wires": [] 111 | }, 112 | { 113 | "id": "3adf71ec.51bea6", 114 | "type": "ui_button", 115 | "z": "bbee03f2.5d15c", 116 | "name": "", 117 | "group": "dca2d7d4.d33f98", 118 | "order": 0, 119 | "width": 0, 120 | "height": 0, 121 | "passthru": false, 122 | "label": "Random Data", 123 | "color": "", 124 | "bgcolor": "", 125 | "icon": "", 126 | "payload": "", 127 | "payloadType": "str", 128 | "topic": "", 129 | "x": 120, 130 | "y": 60, 131 | "wires": [ 132 | [ 133 | "3a6c7023.a11ae" 134 | ] 135 | ] 136 | }, 137 | { 138 | "id": "dfcb4ecc.ad5b48", 139 | "type": "ui_group", 140 | "z": "", 141 | "name": "Historical Data", 142 | "tab": "ce519f65.146028", 143 | "order": 1, 144 | "disp": true, 145 | "width": "18" 146 | }, 147 | { 148 | "id": "dca2d7d4.d33f98", 149 | "type": "ui_group", 150 | "z": "", 151 | "name": "Chart Controls", 152 | "tab": "ce519f65.146028", 153 | "order": 2, 154 | "disp": true, 155 | "width": "6" 156 | }, 157 | { 158 | "id": "ce519f65.146028", 159 | "type": "ui_tab", 160 | "z": "", 161 | "name": "Historical Data", 162 | "icon": "dashboard", 163 | "order": 3 164 | } 165 | ] 166 | -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/flows/Dashboard-Chart-Intro.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "9781ef05.ee8f38", 4 | "type": "tab", 5 | "label": "Chart Intro", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "de322574.f34f68", 11 | "type": "ui_chart", 12 | "z": "9781ef05.ee8f38", 13 | "name": "", 14 | "group": "4b78ff21.a7a458", 15 | "order": 0, 16 | "width": 0, 17 | "height": 0, 18 | "label": "Single Line Plot", 19 | "chartType": "line", 20 | "legend": "false", 21 | "xformat": "HH:mm:ss", 22 | "interpolate": "linear", 23 | "nodata": "", 24 | "dot": false, 25 | "ymin": "", 26 | "ymax": "", 27 | "removeOlder": 1, 28 | "removeOlderPoints": "", 29 | "removeOlderUnit": "3600", 30 | "cutout": 0, 31 | "useOneColor": false, 32 | "colors": [ 33 | "#1f77b4", 34 | "#aec7e8", 35 | "#ff7f0e", 36 | "#2ca02c", 37 | "#98df8a", 38 | "#d62728", 39 | "#ff9896", 40 | "#9467bd", 41 | "#c5b0d5" 42 | ], 43 | "useOldStyle": false, 44 | "x": 600, 45 | "y": 120, 46 | "wires": [ 47 | [], 48 | [] 49 | ] 50 | }, 51 | { 52 | "id": "1dbd2cca.5f75e3", 53 | "type": "function", 54 | "z": "9781ef05.ee8f38", 55 | "name": "Fill Single Chart Array", 56 | "func": "var chart = [{\n \"series\":[\"A\"],\n \"data\":[[{\"x\":1504029632890,\"y\":5},\n {\"x\":1504029633514,\"y\":8},\n {\"x\":1504029634400,\"y\":3}]],\n \"labels\":[\"\"]\n}];\nmsg.payload = chart;\n\nreturn msg;", 57 | "outputs": 1, 58 | "noerr": 0, 59 | "x": 320, 60 | "y": 120, 61 | "wires": [ 62 | [ 63 | "de322574.f34f68", 64 | "9a60424a.b51a9" 65 | ] 66 | ] 67 | }, 68 | { 69 | "id": "9a60424a.b51a9", 70 | "type": "debug", 71 | "z": "9781ef05.ee8f38", 72 | "name": "", 73 | "active": true, 74 | "console": "false", 75 | "complete": "false", 76 | "x": 590, 77 | "y": 160, 78 | "wires": [] 79 | }, 80 | { 81 | "id": "ea61a1dd.439ff", 82 | "type": "comment", 83 | "z": "9781ef05.ee8f38", 84 | "name": "Sample Dashboard that plots various Chart types", 85 | "info": "", 86 | "x": 250, 87 | "y": 60, 88 | "wires": [] 89 | }, 90 | { 91 | "id": "52c5b242.79d1ec", 92 | "type": "ui_chart", 93 | "z": "9781ef05.ee8f38", 94 | "name": "", 95 | "group": "4b78ff21.a7a458", 96 | "order": 0, 97 | "width": 0, 98 | "height": 0, 99 | "label": "Multiple Line Plots", 100 | "chartType": "line", 101 | "legend": "false", 102 | "xformat": "HH:mm:ss", 103 | "interpolate": "linear", 104 | "nodata": "", 105 | "dot": false, 106 | "ymin": "", 107 | "ymax": "", 108 | "removeOlder": 1, 109 | "removeOlderPoints": "", 110 | "removeOlderUnit": "3600", 111 | "cutout": 0, 112 | "useOneColor": false, 113 | "colors": [ 114 | "#1f77b4", 115 | "#aec7e8", 116 | "#ff7f0e", 117 | "#2ca02c", 118 | "#98df8a", 119 | "#d62728", 120 | "#ff9896", 121 | "#9467bd", 122 | "#c5b0d5" 123 | ], 124 | "useOldStyle": false, 125 | "x": 610, 126 | "y": 220, 127 | "wires": [ 128 | [], 129 | [] 130 | ] 131 | }, 132 | { 133 | "id": "5c600274.25b0ec", 134 | "type": "function", 135 | "z": "9781ef05.ee8f38", 136 | "name": "Fill Multiple Line Chart Array", 137 | "func": "var chart = [ {\"series\":[\"A\",\"B\",\"C\"],\n \"data\":[\n [{\"x\":1504029632890,\"y\":5},\n {\"x\":1504029636001,\"y\":4},\n {\"x\":1504029638656,\"y\":2}],\n [{\"x\":1504029633514,\"y\":6},\n {\"x\":1504029636622,\"y\":7},\n {\"x\":1504029639539,\"y\":6}],\n [{\"x\":1504029634400,\"y\":7},\n {\"x\":1504029637959,\"y\":9},\n {\"x\":1504029640317,\"y\":7}]\n ],\n \"labels\":[\"\"]}];\nmsg.payload = chart;\n\nreturn msg;", 138 | "outputs": 1, 139 | "noerr": 0, 140 | "x": 340, 141 | "y": 220, 142 | "wires": [ 143 | [ 144 | "52c5b242.79d1ec", 145 | "3f84a4a4.49b724" 146 | ] 147 | ] 148 | }, 149 | { 150 | "id": "3f84a4a4.49b724", 151 | "type": "debug", 152 | "z": "9781ef05.ee8f38", 153 | "name": "", 154 | "active": true, 155 | "console": "false", 156 | "complete": "false", 157 | "x": 590, 158 | "y": 260, 159 | "wires": [] 160 | }, 161 | { 162 | "id": "36292836.481028", 163 | "type": "ui_chart", 164 | "z": "9781ef05.ee8f38", 165 | "name": "", 166 | "group": "c01ba52a.67bb", 167 | "order": 0, 168 | "width": 0, 169 | "height": 0, 170 | "label": "Vertical Bar Chart", 171 | "chartType": "bar", 172 | "legend": "false", 173 | "xformat": "HH:mm:ss", 174 | "interpolate": "linear", 175 | "nodata": "", 176 | "dot": false, 177 | "ymin": "0", 178 | "ymax": "100", 179 | "removeOlder": 1, 180 | "removeOlderPoints": "", 181 | "removeOlderUnit": "3600", 182 | "cutout": 0, 183 | "useOneColor": false, 184 | "colors": [ 185 | "#1f77b4", 186 | "#aec7e8", 187 | "#ff7f0e", 188 | "#2ca02c", 189 | "#98df8a", 190 | "#d62728", 191 | "#ff9896", 192 | "#9467bd", 193 | "#c5b0d5" 194 | ], 195 | "useOldStyle": false, 196 | "x": 610, 197 | "y": 540, 198 | "wires": [ 199 | [], 200 | [] 201 | ] 202 | }, 203 | { 204 | "id": "6f43d8f4.8088b8", 205 | "type": "inject", 206 | "z": "9781ef05.ee8f38", 207 | "name": "", 208 | "topic": "", 209 | "payload": "true", 210 | "payloadType": "bool", 211 | "repeat": "", 212 | "crontab": "", 213 | "once": true, 214 | "x": 130, 215 | "y": 120, 216 | "wires": [ 217 | [ 218 | "1dbd2cca.5f75e3" 219 | ] 220 | ] 221 | }, 222 | { 223 | "id": "6d542a0f.ce81ac", 224 | "type": "inject", 225 | "z": "9781ef05.ee8f38", 226 | "name": "", 227 | "topic": "", 228 | "payload": "true", 229 | "payloadType": "bool", 230 | "repeat": "", 231 | "crontab": "", 232 | "once": true, 233 | "x": 130, 234 | "y": 220, 235 | "wires": [ 236 | [ 237 | "5c600274.25b0ec" 238 | ] 239 | ] 240 | }, 241 | { 242 | "id": "9503a2cc.3ad51", 243 | "type": "inject", 244 | "z": "9781ef05.ee8f38", 245 | "name": "", 246 | "topic": "", 247 | "payload": "true", 248 | "payloadType": "bool", 249 | "repeat": "", 250 | "crontab": "", 251 | "once": true, 252 | "x": 130, 253 | "y": 540, 254 | "wires": [ 255 | [ 256 | "484a00a6.c4efc8" 257 | ] 258 | ] 259 | }, 260 | { 261 | "id": "484a00a6.c4efc8", 262 | "type": "function", 263 | "z": "9781ef05.ee8f38", 264 | "name": "Fill Bar Chart Array", 265 | "func": "var bar={};\nbar.labels = [\"Q1 16\",\"Q2 16\",\"Q3 16\",\"Q4 16\",\"Q1 17\",\"Q2 17\",\"Q3 17\"];\nbar.series = ['Sales A', 'Sales B', 'Sales C', 'Sales D'];\n// An array of 4 arrays of 7 elements\nbar.data = [\n [65, 59, 80, 81, 56, 55, 40],\n [28, 48, 40, 19, 86, 27, 90],\n [38, 28, 20, 49, 45, 60, 20],\n [58, 18, 40, 29, 15, 30, 60]\n ];\nreturn {payload:[bar]};", 266 | "outputs": 1, 267 | "noerr": 0, 268 | "x": 310, 269 | "y": 540, 270 | "wires": [ 271 | [ 272 | "36292836.481028", 273 | "deb3d985.497c68", 274 | "e57aa881.bf64b" 275 | ] 276 | ] 277 | }, 278 | { 279 | "id": "deb3d985.497c68", 280 | "type": "debug", 281 | "z": "9781ef05.ee8f38", 282 | "name": "", 283 | "active": true, 284 | "console": "false", 285 | "complete": "false", 286 | "x": 590, 287 | "y": 620, 288 | "wires": [] 289 | }, 290 | { 291 | "id": "e57aa881.bf64b", 292 | "type": "ui_chart", 293 | "z": "9781ef05.ee8f38", 294 | "name": "", 295 | "group": "c01ba52a.67bb", 296 | "order": 0, 297 | "width": 0, 298 | "height": 0, 299 | "label": "Horizontal Bar Chart", 300 | "chartType": "horizontalBar", 301 | "legend": "false", 302 | "xformat": "HH:mm:ss", 303 | "interpolate": "linear", 304 | "nodata": "", 305 | "dot": false, 306 | "ymin": "0", 307 | "ymax": "100", 308 | "removeOlder": 1, 309 | "removeOlderPoints": "", 310 | "removeOlderUnit": "3600", 311 | "cutout": 0, 312 | "useOneColor": false, 313 | "colors": [ 314 | "#1f77b4", 315 | "#aec7e8", 316 | "#ff7f0e", 317 | "#2ca02c", 318 | "#98df8a", 319 | "#d62728", 320 | "#ff9896", 321 | "#9467bd", 322 | "#c5b0d5" 323 | ], 324 | "useOldStyle": false, 325 | "x": 610, 326 | "y": 580, 327 | "wires": [ 328 | [], 329 | [] 330 | ] 331 | }, 332 | { 333 | "id": "3cd5b8af.71708", 334 | "type": "ui_chart", 335 | "z": "9781ef05.ee8f38", 336 | "name": "", 337 | "group": "a99459cd.12661", 338 | "order": 1, 339 | "width": 0, 340 | "height": 0, 341 | "label": "Pie Chart", 342 | "chartType": "pie", 343 | "legend": "true", 344 | "xformat": "HH:mm:ss", 345 | "interpolate": "linear", 346 | "nodata": "", 347 | "dot": false, 348 | "ymin": "", 349 | "ymax": "", 350 | "removeOlder": 1, 351 | "removeOlderPoints": "", 352 | "removeOlderUnit": "3600", 353 | "cutout": 0, 354 | "useOneColor": false, 355 | "colors": [ 356 | "#1f77b4", 357 | "#aec7e8", 358 | "#ff7f0e", 359 | "#2ca02c", 360 | "#98df8a", 361 | "#d62728", 362 | "#ff9896", 363 | "#9467bd", 364 | "#c5b0d5" 365 | ], 366 | "useOldStyle": false, 367 | "x": 580, 368 | "y": 320, 369 | "wires": [ 370 | [], 371 | [] 372 | ] 373 | }, 374 | { 375 | "id": "6e18a34.2f216dc", 376 | "type": "function", 377 | "z": "9781ef05.ee8f38", 378 | "name": "Fill Pie Chart Array", 379 | "func": "var pie={};\npie.labels = [\"Geo1\",\"Geo2\",\"Geo3\",\"Geo4\",\"Geo5\"];\npie.series = ['Sales A', 'Sales B', 'Sales C', 'Sales D'];\npie.data = [ [16, 27, 42, 65, 89] ];\n//return {payload:[pie]};\n\nvar pie={ \"labels\" : [\"Geo1\",\"Geo2\",\"Geo3\",\"Geo4\",\"Geo5\"],\n \"series\" : ['Sales A', 'Sales B', 'Sales C', 'Sales D'],\n \"data\" : [ [16, 27, 42, 65, 89] ]\n };\nmsg.payload = [pie];\nreturn msg;", 380 | "outputs": 1, 381 | "noerr": 0, 382 | "x": 310, 383 | "y": 320, 384 | "wires": [ 385 | [ 386 | "3cd5b8af.71708", 387 | "105175e5.8a2c4a", 388 | "2f1d8f57.4b21d8", 389 | "4320a082.d081c8", 390 | "6400193d.43bab" 391 | ] 392 | ] 393 | }, 394 | { 395 | "id": "bbdd7914.8f73b8", 396 | "type": "inject", 397 | "z": "9781ef05.ee8f38", 398 | "name": "", 399 | "topic": "", 400 | "payload": "true", 401 | "payloadType": "bool", 402 | "repeat": "", 403 | "crontab": "", 404 | "once": true, 405 | "x": 130, 406 | "y": 320, 407 | "wires": [ 408 | [ 409 | "6e18a34.2f216dc" 410 | ] 411 | ] 412 | }, 413 | { 414 | "id": "105175e5.8a2c4a", 415 | "type": "debug", 416 | "z": "9781ef05.ee8f38", 417 | "name": "", 418 | "active": true, 419 | "console": "false", 420 | "complete": "false", 421 | "x": 590, 422 | "y": 480, 423 | "wires": [] 424 | }, 425 | { 426 | "id": "2f1d8f57.4b21d8", 427 | "type": "ui_chart", 428 | "z": "9781ef05.ee8f38", 429 | "name": "", 430 | "group": "a99459cd.12661", 431 | "order": 3, 432 | "width": 0, 433 | "height": 0, 434 | "label": "Polar Area Chart", 435 | "chartType": "polar-area", 436 | "legend": "false", 437 | "xformat": "HH:mm:ss", 438 | "interpolate": "linear", 439 | "nodata": "", 440 | "dot": false, 441 | "ymin": "", 442 | "ymax": "", 443 | "removeOlder": 1, 444 | "removeOlderPoints": "", 445 | "removeOlderUnit": "3600", 446 | "cutout": 0, 447 | "useOneColor": false, 448 | "colors": [ 449 | "#1f77b4", 450 | "#aec7e8", 451 | "#ff7f0e", 452 | "#2ca02c", 453 | "#98df8a", 454 | "#d62728", 455 | "#ff9896", 456 | "#9467bd", 457 | "#c5b0d5" 458 | ], 459 | "useOldStyle": false, 460 | "x": 600, 461 | "y": 400, 462 | "wires": [ 463 | [], 464 | [] 465 | ] 466 | }, 467 | { 468 | "id": "6400193d.43bab", 469 | "type": "ui_chart", 470 | "z": "9781ef05.ee8f38", 471 | "name": "", 472 | "group": "a99459cd.12661", 473 | "order": 4, 474 | "width": 0, 475 | "height": 0, 476 | "label": "Radar Chart", 477 | "chartType": "radar", 478 | "legend": "false", 479 | "xformat": "HH:mm:ss", 480 | "interpolate": "linear", 481 | "nodata": "", 482 | "dot": false, 483 | "ymin": "", 484 | "ymax": "", 485 | "removeOlder": 1, 486 | "removeOlderPoints": "", 487 | "removeOlderUnit": "3600", 488 | "cutout": 0, 489 | "useOneColor": false, 490 | "colors": [ 491 | "#1f77b4", 492 | "#aec7e8", 493 | "#ff7f0e", 494 | "#2ca02c", 495 | "#98df8a", 496 | "#d62728", 497 | "#ff9896", 498 | "#9467bd", 499 | "#c5b0d5" 500 | ], 501 | "useOldStyle": false, 502 | "x": 590, 503 | "y": 440, 504 | "wires": [ 505 | [], 506 | [] 507 | ] 508 | }, 509 | { 510 | "id": "4320a082.d081c8", 511 | "type": "ui_chart", 512 | "z": "9781ef05.ee8f38", 513 | "name": "", 514 | "group": "a99459cd.12661", 515 | "order": 2, 516 | "width": 0, 517 | "height": 0, 518 | "label": "Donut Chart", 519 | "chartType": "pie", 520 | "legend": "false", 521 | "xformat": "HH:mm:ss", 522 | "interpolate": "linear", 523 | "nodata": "", 524 | "dot": false, 525 | "ymin": "", 526 | "ymax": "", 527 | "removeOlder": 1, 528 | "removeOlderPoints": "", 529 | "removeOlderUnit": "3600", 530 | "cutout": "40", 531 | "useOneColor": false, 532 | "colors": [ 533 | "#1f77b4", 534 | "#aec7e8", 535 | "#ff7f0e", 536 | "#2ca02c", 537 | "#98df8a", 538 | "#d62728", 539 | "#ff9896", 540 | "#9467bd", 541 | "#c5b0d5" 542 | ], 543 | "useOldStyle": false, 544 | "x": 590, 545 | "y": 360, 546 | "wires": [ 547 | [], 548 | [] 549 | ] 550 | }, 551 | { 552 | "id": "4b78ff21.a7a458", 553 | "type": "ui_group", 554 | "z": "", 555 | "name": "Line Chart Examples", 556 | "tab": "37891d11.65a522", 557 | "disp": true, 558 | "width": "8" 559 | }, 560 | { 561 | "id": "c01ba52a.67bb", 562 | "type": "ui_group", 563 | "z": "", 564 | "name": "Bar Chart Examples", 565 | "tab": "37891d11.65a522", 566 | "order": 3, 567 | "disp": true, 568 | "width": "8" 569 | }, 570 | { 571 | "id": "a99459cd.12661", 572 | "type": "ui_group", 573 | "z": "", 574 | "name": "Pie Chart Examples", 575 | "tab": "37891d11.65a522", 576 | "order": 2, 577 | "disp": true, 578 | "width": "6" 579 | }, 580 | { 581 | "id": "37891d11.65a522", 582 | "type": "ui_tab", 583 | "z": "", 584 | "name": "Chart Examples", 585 | "icon": "dashboard", 586 | "order": 1 587 | } 588 | ] 589 | -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-AdvancedCharts-Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-AdvancedCharts-Flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-AdvancedCharts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-AdvancedCharts.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Dashboard.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Flow-LineChartArray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Flow-LineChartArray.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Historical-Flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-Line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-Line.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-bar.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-pie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard-pie.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Dashboard.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-BarArray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-BarArray.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-LineChartArray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-LineChartArray.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-LineChartArrayM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-LineChartArrayM.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-PieArray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow-PieArray.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/screenshots/NRD-Charts-Intro-Flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-1LineExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-1LineExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistDash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistDash.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistDatePick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistDatePick.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-AdvHistFlow.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-BarExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-BarExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-ChartNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-ChartNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-DatePickNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-DatePickNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-ExampleFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-ExampleFlow.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-HistoricalExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-HistoricalExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-MLineExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-MLineExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-PaletteBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-PaletteBlank.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-PieExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-PieExample.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-Title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-Title.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-Trailer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Chart-Trailer.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Charts-ExampleDashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture3-Node-RED-Charts/slides/NRD-Charts-ExampleDashboard.png -------------------------------------------------------------------------------- /Dashboard/Lecture3-Node-RED-Charts/slides/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED Lecture 3 2 | Lecture 3 - Node-RED Dashboard Chart Slides 3 | ![Node-RED Dashboard Chart Slide 1](NRD-Chart-Title.png?raw=true "Node-RED Dashboard Chart") 4 | ![Node-RED Dashboard Chart Slide 2](NRD-Chart-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 5 | ![Node-RED Dashboard Chart Slide 3](NRD-Chart-ExampleDashboard.png?raw=true "Node-RED Dashboard Chart") 6 | ![Node-RED Dashboard Chart Slide 4](NRD-Chart-ExampleFlow.png?raw=true "Node-RED Dashboard Chart") 7 | ![Node-RED Dashboard Chart Slide 5](NRD-Chart-ChartNode.png?raw=true "Node-RED Dashboard Chart") 8 | ![Node-RED Dashboard Chart Slide 6](NRD-Chart-1LineExample.png?raw=true "Node-RED Dashboard Chart") 9 | ![Node-RED Dashboard Chart Slide 7](NRD-Chart-MLineExample.png?raw=true "Node-RED Dashboard Chart") 10 | ![Node-RED Dashboard Chart Slide 8](NRD-Chart-BarExample.png?raw=true "Node-RED Dashboard Chart") 11 | ![Node-RED Dashboard Chart Slide 9](NRD-Chart-PieExample.png?raw=true "Node-RED Dashboard Chart") 12 | ![Node-RED Dashboard Chart Slide 10](NRD-Chart-HistoricalExample.png?raw=true "Node-RED Dashboard Chart") 13 | ![Node-RED Dashboard Chart Slide 11](NRD-Chart-AdvHistDash.png?raw=true "Node-RED Dashboard Chart") 14 | ![Node-RED Dashboard Chart Slide 12](NRD-Chart-AdvHitsFlow.png?raw=true "Node-RED Dashboard Chart") 15 | ![Node-RED Dashboard Chart Slide 13](NRD-Chart-AdvHistDatePick.png?raw=true "Node-RED Dashboard Chart") 16 | ![Node-RED Dashboard Chart Slide 14](NRD-Chart-DatePickNode.png?raw=true "Node-RED Dashboard Chart") 17 | ![Node-RED Dashboard Chart Slide 15](NRD-Chart-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 18 | ![Node-RED Dashboard Chart Slide 16](NRD-Chart-Trailer.png?raw=true "Node-RED Dashboard Chart") 19 | 20 | -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED 2 | Lecture 4 - Node-RED Dashboard Forms and Templates - *Resources* 3 | 4 | ## Review the Lecture 4 Node-RED Dashboard Forms and Template slides 5 | [Slides](slides/README.md) 6 | 7 | ## Download the Lecture 4 Example flows 8 | * [Lecture 4 Asset Registration Form Example flow](flows/NRD-FT-AssetRegForm-Example.json) 9 | * [Lecture 4 International Space Station Template Example flow](flows/NRD-FT-ISS-Template-Example.json) 10 | 11 | ## Screenshots of Lecture 4 Node-RED Forms and Templates 12 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-AssetReg.png?raw=true "Node-RED Dashboard Form Template Example") 13 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-Flow.png?raw=true "Node-RED Dashboard Form Template Example") 14 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-AssetReg-Form.png?raw=true "Node-RED Dashboard Form Template Example") 15 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-AssetReg-Button.png?raw=true "Node-RED Dashboard Form Template Example") 16 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-AssetReg-Template.png?raw=true "Node-RED Dashboard Form Template Example") 17 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-AssetReg-Dropdown.png?raw=true "Node-RED Dashboard Form Template Example") 18 | ![Node-RED Dashboad Form Example](screenshots/NRD-Forms-Nodedetails.png?raw=true "Node-RED Dashboard Form Template Example") 19 | ![Node-RED Dashboad Form Example](screenshots/NRD-ISS-TemplateWorldMap-Dashboard.png?raw=true "Node-RED Dashboard Form Template Example") 20 | ![Node-RED Dashboad Form Example](screenshots/NRD-ISS-TemplateWorldMap-flow-annotated-.png?raw=true "Node-RED Dashboard Form Template Example") 21 | 22 | 23 | -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/flows/NRD-FT-AssetRegForm-Example.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "7d2a397e.55e91", 4 | "type": "tab", 5 | "label": "Dashboard Form", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "463ff91d.77c5f8", 11 | "type": "inject", 12 | "z": "7d2a397e.55e91", 13 | "name": "Reset Database load", 14 | "topic": "", 15 | "payload": "true", 16 | "payloadType": "bool", 17 | "repeat": "", 18 | "crontab": "", 19 | "once": true, 20 | "x": 180, 21 | "y": 80, 22 | "wires": [ 23 | [ 24 | "fb148e72.d2301" 25 | ] 26 | ] 27 | }, 28 | { 29 | "id": "fb148e72.d2301", 30 | "type": "change", 31 | "z": "7d2a397e.55e91", 32 | "name": "", 33 | "rules": [ 34 | { 35 | "t": "set", 36 | "p": "db-loaded", 37 | "pt": "flow", 38 | "to": "false", 39 | "tot": "bool" 40 | } 41 | ], 42 | "action": "", 43 | "property": "", 44 | "from": "", 45 | "to": "", 46 | "reg": false, 47 | "x": 410, 48 | "y": 100, 49 | "wires": [ 50 | [ 51 | "194e3484.cc827b" 52 | ] 53 | ] 54 | }, 55 | { 56 | "id": "5ac4932c.12e164", 57 | "type": "inject", 58 | "z": "7d2a397e.55e91", 59 | "name": "", 60 | "topic": "", 61 | "payload": "true", 62 | "payloadType": "bool", 63 | "repeat": "", 64 | "crontab": "", 65 | "once": true, 66 | "x": 130, 67 | "y": 160, 68 | "wires": [ 69 | [ 70 | "194e3484.cc827b" 71 | ] 72 | ] 73 | }, 74 | { 75 | "id": "194e3484.cc827b", 76 | "type": "switch", 77 | "z": "7d2a397e.55e91", 78 | "name": "Load Asset Database", 79 | "property": "db-loaded", 80 | "propertyType": "flow", 81 | "rules": [ 82 | { 83 | "t": "false" 84 | }, 85 | { 86 | "t": "true" 87 | } 88 | ], 89 | "checkall": "true", 90 | "outputs": 2, 91 | "x": 340, 92 | "y": 160, 93 | "wires": [ 94 | [ 95 | "58808077.7fe168" 96 | ], 97 | [] 98 | ], 99 | "outputLabels": [ 100 | "IoTP Target DB not loaded", 101 | "IoTP Target DB loaded" 102 | ] 103 | }, 104 | { 105 | "id": "58808077.7fe168", 106 | "type": "cloudant in", 107 | "z": "7d2a397e.55e91", 108 | "name": "", 109 | "cloudant": "", 110 | "database": "assets", 111 | "service": "your-nodered-cloudantNoSQLDB", 112 | "search": "_all_", 113 | "design": "", 114 | "index": "", 115 | "x": 570, 116 | "y": 160, 117 | "wires": [ 118 | [ 119 | "cacf1515.4840c8", 120 | "19fe7368.545c85" 121 | ] 122 | ] 123 | }, 124 | { 125 | "id": "72786345.d1af84", 126 | "type": "debug", 127 | "z": "7d2a397e.55e91", 128 | "name": "", 129 | "active": true, 130 | "console": "false", 131 | "complete": "false", 132 | "x": 1070, 133 | "y": 160, 134 | "wires": [] 135 | }, 136 | { 137 | "id": "e10934e2.116278", 138 | "type": "ui_form", 139 | "z": "7d2a397e.55e91", 140 | "name": "", 141 | "label": "Add a new Asset", 142 | "group": "1564c20b.a3bce6", 143 | "order": 0, 144 | "width": 0, 145 | "height": 0, 146 | "options": [ 147 | { 148 | "label": "Asset Name", 149 | "value": "AssetName", 150 | "type": "text", 151 | "required": true 152 | }, 153 | { 154 | "label": "Asset Type", 155 | "value": "AssetType", 156 | "type": "text", 157 | "required": true 158 | }, 159 | { 160 | "label": "Asset ID", 161 | "value": "AssetID", 162 | "type": "text", 163 | "required": true 164 | }, 165 | { 166 | "label": "Location", 167 | "value": "Location", 168 | "type": "text", 169 | "required": true 170 | } 171 | ], 172 | "formValue": { 173 | "AssetName": "", 174 | "AssetType": "", 175 | "AssetID": "", 176 | "Location": "" 177 | }, 178 | "payload": "", 179 | "topic": "", 180 | "x": 120, 181 | "y": 260, 182 | "wires": [ 183 | [ 184 | "4bd0efec.74978", 185 | "aa282796.3d8f98" 186 | ] 187 | ] 188 | }, 189 | { 190 | "id": "4bd0efec.74978", 191 | "type": "debug", 192 | "z": "7d2a397e.55e91", 193 | "name": "", 194 | "active": true, 195 | "console": "false", 196 | "complete": "false", 197 | "x": 350, 198 | "y": 300, 199 | "wires": [] 200 | }, 201 | { 202 | "id": "df774808.3edcd", 203 | "type": "ui_dropdown", 204 | "z": "7d2a397e.55e91", 205 | "name": "", 206 | "label": "Select an Asset to Delete", 207 | "place": "Existing Asset", 208 | "group": "606a860d.2e36a", 209 | "order": 0, 210 | "width": 0, 211 | "height": 0, 212 | "passthru": true, 213 | "options": [ 214 | { 215 | "label": "AssetName", 216 | "value": "Asset Name", 217 | "type": "str" 218 | } 219 | ], 220 | "payload": "", 221 | "topic": "", 222 | "x": 500, 223 | "y": 560, 224 | "wires": [ 225 | [ 226 | "44737136.97dab" 227 | ] 228 | ] 229 | }, 230 | { 231 | "id": "9b1993f4.026798", 232 | "type": "function", 233 | "z": "7d2a397e.55e91", 234 | "name": "Load Dropdown list", 235 | "func": "var AssetList = global.get(\"Assets\");\nif (typeof AssetList == 'undefined') {\n return null;\n}\nvar DropDownList = [];\n\n// Just load the list of Asset in the dropdown, not the Asset details\nfor (i=0; i < AssetList.length; i++) {\n DropDownList.push(AssetList[i].AssetName);\n}\nmsg.options = DropDownList;\nreturn msg;", 236 | "outputs": 1, 237 | "noerr": 0, 238 | "x": 250, 239 | "y": 560, 240 | "wires": [ 241 | [ 242 | "df774808.3edcd", 243 | "bef01044.a097a8" 244 | ] 245 | ] 246 | }, 247 | { 248 | "id": "bef01044.a097a8", 249 | "type": "debug", 250 | "z": "7d2a397e.55e91", 251 | "name": "", 252 | "active": true, 253 | "console": "false", 254 | "complete": "options", 255 | "x": 460, 256 | "y": 520, 257 | "wires": [] 258 | }, 259 | { 260 | "id": "aa282796.3d8f98", 261 | "type": "function", 262 | "z": "7d2a397e.55e91", 263 | "name": "Add to Asset Array", 264 | "func": "var AssetList = global.get(\"Assets\") || [];\n\n// Add the new Asset / Asset Details as an json object to the array of Assets\nAssetList.push(msg.payload);\n\nglobal.set(\"Assets\",AssetList);\nreturn msg;", 265 | "outputs": 1, 266 | "noerr": 0, 267 | "x": 370, 268 | "y": 260, 269 | "wires": [ 270 | [ 271 | "1d8a9128.0127af", 272 | "c8a1d4ab.2345d8" 273 | ] 274 | ] 275 | }, 276 | { 277 | "id": "c8a1d4ab.2345d8", 278 | "type": "cloudant out", 279 | "z": "7d2a397e.55e91", 280 | "name": "", 281 | "cloudant": "", 282 | "database": "assets", 283 | "service": "your-nodered-cloudantNoSQLDB", 284 | "payonly": true, 285 | "operation": "insert", 286 | "x": 570, 287 | "y": 300, 288 | "wires": [] 289 | }, 290 | { 291 | "id": "697c066e.69b338", 292 | "type": "cloudant out", 293 | "z": "7d2a397e.55e91", 294 | "name": "", 295 | "cloudant": "", 296 | "database": "assets", 297 | "service": "your-nodered-cloudantNoSQLDB", 298 | "payonly": false, 299 | "operation": "delete", 300 | "x": 1050, 301 | "y": 400, 302 | "wires": [] 303 | }, 304 | { 305 | "id": "357caef2.4ed1aa", 306 | "type": "function", 307 | "z": "7d2a397e.55e91", 308 | "name": "Remove Asset from Array", 309 | "func": "// If the Delete Asset button has been pressed\nif( msg.payload === true ) {\n var AssetList = global.get(\"Assets\");\n if (typeof Assets == 'undefined') {\n return null;\n }\n var SelectedAsset = flow.get(\"SelectedAsset\");\n var Asset2Delete = {};\n // Dropdown will return just the \"AssetName\" in the flow.SelectedOrg variable\n // Iterate through the list, looking for the entry to remove\n for (i=0; i < AssetList.length; i++) {\n if( AssetList[i].AssetName === SelectedAsset ) {\n Asset2Delete = AssetList[i];\n // Remove the Asset json object to the AssetList array\n AssetList.splice(i,1);\n }\n }\n // Update the global array\n global.set(\"Assets\",AssetList);\n \n\n // To delete documents from the database, provide values for \n // _id and _rev and select the remove option in the Cloudant node. \n // You can pass these values in the msg object itself or as an object in the msg.payload.\n // Asset2Delete will contain :\n // {\"_id\":\"6c8e321192522d363c7d439993529cac\",\n // \"_rev\":\"1-1fbb9d32a306748e63e11f023cf3c4db\",\n // \"AssetName\":\"JWJWJW\",\n // \"key\":\"value\"}\n \n msg.payload = Asset2Delete;\n return msg;\n} else { \n return null;\n}", 310 | "outputs": 1, 311 | "noerr": 0, 312 | "x": 820, 313 | "y": 400, 314 | "wires": [ 315 | [ 316 | "139ba24.47b1f5e", 317 | "1d8a9128.0127af", 318 | "697c066e.69b338" 319 | ] 320 | ] 321 | }, 322 | { 323 | "id": "139ba24.47b1f5e", 324 | "type": "debug", 325 | "z": "7d2a397e.55e91", 326 | "name": "", 327 | "active": true, 328 | "console": "false", 329 | "complete": "false", 330 | "x": 1070, 331 | "y": 440, 332 | "wires": [] 333 | }, 334 | { 335 | "id": "44737136.97dab", 336 | "type": "change", 337 | "z": "7d2a397e.55e91", 338 | "name": "", 339 | "rules": [ 340 | { 341 | "t": "set", 342 | "p": "SelectedAsset", 343 | "pt": "flow", 344 | "to": "payload", 345 | "tot": "msg" 346 | } 347 | ], 348 | "action": "", 349 | "property": "", 350 | "from": "", 351 | "to": "", 352 | "reg": false, 353 | "x": 760, 354 | "y": 560, 355 | "wires": [ 356 | [ 357 | "4f87e63f.bc6048" 358 | ] 359 | ] 360 | }, 361 | { 362 | "id": "4f87e63f.bc6048", 363 | "type": "ui_button", 364 | "z": "7d2a397e.55e91", 365 | "name": "", 366 | "group": "606a860d.2e36a", 367 | "order": 0, 368 | "width": "8", 369 | "height": "1", 370 | "passthru": false, 371 | "label": "Delete this Asset", 372 | "color": "", 373 | "bgcolor": "", 374 | "icon": "", 375 | "payload": "true", 376 | "payloadType": "bool", 377 | "topic": "", 378 | "x": 990, 379 | "y": 560, 380 | "wires": [ 381 | [ 382 | "357caef2.4ed1aa" 383 | ] 384 | ] 385 | }, 386 | { 387 | "id": "8c4d880b.abfdc8", 388 | "type": "link in", 389 | "z": "7d2a397e.55e91", 390 | "name": "", 391 | "links": [ 392 | "1d8a9128.0127af" 393 | ], 394 | "x": 95, 395 | "y": 560, 396 | "wires": [ 397 | [ 398 | "9b1993f4.026798" 399 | ] 400 | ] 401 | }, 402 | { 403 | "id": "1d8a9128.0127af", 404 | "type": "link out", 405 | "z": "7d2a397e.55e91", 406 | "name": "", 407 | "links": [ 408 | "8c4d880b.abfdc8" 409 | ], 410 | "x": 1005, 411 | "y": 260, 412 | "wires": [] 413 | }, 414 | { 415 | "id": "cacf1515.4840c8", 416 | "type": "debug", 417 | "z": "7d2a397e.55e91", 418 | "name": "", 419 | "active": false, 420 | "console": "false", 421 | "complete": "true", 422 | "x": 810, 423 | "y": 120, 424 | "wires": [] 425 | }, 426 | { 427 | "id": "ff1c6f61.043948", 428 | "type": "inject", 429 | "z": "7d2a397e.55e91", 430 | "name": "", 431 | "topic": "", 432 | "payload": "", 433 | "payloadType": "date", 434 | "repeat": "10", 435 | "crontab": "", 436 | "once": false, 437 | "x": 150, 438 | "y": 660, 439 | "wires": [ 440 | [ 441 | "a6363278.a24bc8" 442 | ] 443 | ] 444 | }, 445 | { 446 | "id": "a6363278.a24bc8", 447 | "type": "function", 448 | "z": "7d2a397e.55e91", 449 | "name": "Build an Inventory Table", 450 | "func": "var AssetList = global.get(\"Assets\");\nif (typeof AssetList == 'undefined') {\n return null;\n}\n\nmsg.template=\"\";\n\nmsg.template=msg.template+\"\";\n\nfor (var i = 0; i < AssetList.length; i++) {\n msg.template = msg.template + \"\";\n}\nmsg.template = msg.template + \"
AssetsTypeIDLocation
\" + AssetList[i].AssetName + \"\" + AssetList[i].AssetType + \"\" + AssetList[i].AssetID + \"\" +AssetList[i].Location + \"
\"\n\nreturn msg;", 451 | "outputs": 1, 452 | "noerr": 0, 453 | "x": 370, 454 | "y": 660, 455 | "wires": [ 456 | [ 457 | "959ed280.bff25", 458 | "a3f36e89.29e2a8" 459 | ] 460 | ] 461 | }, 462 | { 463 | "id": "959ed280.bff25", 464 | "type": "ui_template", 465 | "z": "7d2a397e.55e91", 466 | "group": "48c6a879.78bc38", 467 | "name": "", 468 | "order": 0, 469 | "width": "12", 470 | "height": "7", 471 | "format": "
", 472 | "storeOutMessages": false, 473 | "fwdInMessages": false, 474 | "templateScope": "local", 475 | "x": 580, 476 | "y": 640, 477 | "wires": [ 478 | [] 479 | ] 480 | }, 481 | { 482 | "id": "a3f36e89.29e2a8", 483 | "type": "debug", 484 | "z": "7d2a397e.55e91", 485 | "name": "", 486 | "active": false, 487 | "console": "false", 488 | "complete": "template", 489 | "x": 600, 490 | "y": 680, 491 | "wires": [] 492 | }, 493 | { 494 | "id": "19fe7368.545c85", 495 | "type": "change", 496 | "z": "7d2a397e.55e91", 497 | "name": "Store DB in Global variable", 498 | "rules": [ 499 | { 500 | "t": "set", 501 | "p": "Assets", 502 | "pt": "global", 503 | "to": "payload", 504 | "tot": "msg" 505 | }, 506 | { 507 | "t": "set", 508 | "p": "db-loaded", 509 | "pt": "flow", 510 | "to": "true", 511 | "tot": "bool" 512 | } 513 | ], 514 | "action": "", 515 | "property": "", 516 | "from": "", 517 | "to": "", 518 | "reg": false, 519 | "x": 810, 520 | "y": 160, 521 | "wires": [ 522 | [ 523 | "1d8a9128.0127af", 524 | "72786345.d1af84" 525 | ] 526 | ] 527 | }, 528 | { 529 | "id": "1564c20b.a3bce6", 530 | "type": "ui_group", 531 | "z": "", 532 | "name": "Add an Asset", 533 | "tab": "d428e4e4.018dd8", 534 | "order": 1, 535 | "disp": true, 536 | "width": "6" 537 | }, 538 | { 539 | "id": "606a860d.2e36a", 540 | "type": "ui_group", 541 | "z": "", 542 | "name": "Select an Asset to Delete", 543 | "tab": "d428e4e4.018dd8", 544 | "order": 2, 545 | "disp": true, 546 | "width": "8" 547 | }, 548 | { 549 | "id": "48c6a879.78bc38", 550 | "type": "ui_group", 551 | "z": "", 552 | "name": "Inventory List", 553 | "tab": "d428e4e4.018dd8", 554 | "order": 3, 555 | "disp": true, 556 | "width": "12" 557 | }, 558 | { 559 | "id": "d428e4e4.018dd8", 560 | "type": "ui_tab", 561 | "z": "", 562 | "name": "Asset Registration", 563 | "icon": "dashboard", 564 | "order": 7 565 | } 566 | ] 567 | -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/flows/NRD-FT-ISS-Template-Example.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "f46adcd0.a3fd6", 4 | "type": "tab", 5 | "label": "Space Station", 6 | "disabled": false, 7 | "info": "" 8 | }, 9 | { 10 | "id": "58e10a37.fdb854", 11 | "type": "inject", 12 | "z": "f46adcd0.a3fd6", 13 | "name": "Every 5 sec", 14 | "topic": "", 15 | "payload": "", 16 | "payloadType": "date", 17 | "repeat": "5", 18 | "crontab": "", 19 | "once": false, 20 | "x": 130, 21 | "y": 180, 22 | "wires": [ 23 | [ 24 | "fbfe51ef.c8f33" 25 | ] 26 | ] 27 | }, 28 | { 29 | "id": "ca6c89d0.35dc5", 30 | "type": "http request", 31 | "z": "f46adcd0.a3fd6", 32 | "name": "", 33 | "method": "GET", 34 | "ret": "obj", 35 | "url": "http://api.open-notify.org/iss-now.json", 36 | "tls": "", 37 | "x": 610, 38 | "y": 180, 39 | "wires": [ 40 | [ 41 | "92d3a151.7e9a8", 42 | "205dfcd6.e46eec" 43 | ] 44 | ] 45 | }, 46 | { 47 | "id": "92d3a151.7e9a8", 48 | "type": "debug", 49 | "z": "f46adcd0.a3fd6", 50 | "name": "", 51 | "active": false, 52 | "console": "false", 53 | "complete": "false", 54 | "x": 790, 55 | "y": 240, 56 | "wires": [] 57 | }, 58 | { 59 | "id": "205dfcd6.e46eec", 60 | "type": "function", 61 | "z": "f46adcd0.a3fd6", 62 | "name": "Extract ISS Location", 63 | "func": "var iss_location = msg.payload.iss_position;\n\nmsg.payload = { \n name : \"International Space Station\",\n lat : parseFloat(iss_location.latitude),\n lon : parseFloat(iss_location.longitude),\n icon:\"iss\",\n iconColor:'#900000',\n command : { \"zoom\" : 5 }\n};\n\nreturn msg;", 64 | "outputs": 1, 65 | "noerr": 0, 66 | "x": 820, 67 | "y": 180, 68 | "wires": [ 69 | [ 70 | "2585f620.3048ca", 71 | "ec1b2e44.eb46b", 72 | "837b3d01.4eb418" 73 | ] 74 | ] 75 | }, 76 | { 77 | "id": "2585f620.3048ca", 78 | "type": "debug", 79 | "z": "f46adcd0.a3fd6", 80 | "name": "", 81 | "active": true, 82 | "console": "false", 83 | "complete": "false", 84 | "x": 1030, 85 | "y": 240, 86 | "wires": [] 87 | }, 88 | { 89 | "id": "ec1b2e44.eb46b", 90 | "type": "worldmap", 91 | "z": "f46adcd0.a3fd6", 92 | "name": "", 93 | "lat": "", 94 | "lon": "", 95 | "zoom": "5", 96 | "layer": "Esri Satellite", 97 | "cluster": "", 98 | "maxage": "", 99 | "usermenu": "show", 100 | "panit": "true", 101 | "x": 1050, 102 | "y": 180, 103 | "wires": [] 104 | }, 105 | { 106 | "id": "d67f427e.81297", 107 | "type": "ui_template", 108 | "z": "f46adcd0.a3fd6", 109 | "group": "ec94d4cd.2fd47", 110 | "name": "Embedded Map", 111 | "order": 0, 112 | "width": "20", 113 | "height": "15", 114 | "format": "
", 115 | "storeOutMessages": true, 116 | "fwdInMessages": true, 117 | "templateScope": "local", 118 | "x": 780, 119 | "y": 100, 120 | "wires": [ 121 | [] 122 | ] 123 | }, 124 | { 125 | "id": "4efaeffb.81abf8", 126 | "type": "template", 127 | "z": "f46adcd0.a3fd6", 128 | "name": "Add Map to Dashboard", 129 | "field": "payload", 130 | "fieldType": "msg", 131 | "format": "handlebars", 132 | "syntax": "mustache", 133 | "template": "", 134 | "x": 550, 135 | "y": 100, 136 | "wires": [ 137 | [ 138 | "d67f427e.81297" 139 | ] 140 | ] 141 | }, 142 | { 143 | "id": "b94ec401.977e68", 144 | "type": "comment", 145 | "z": "f46adcd0.a3fd6", 146 | "name": "One time - Add Map to Dashboard", 147 | "info": "", 148 | "x": 180, 149 | "y": 60, 150 | "wires": [] 151 | }, 152 | { 153 | "id": "6a74391e.73ba5", 154 | "type": "inject", 155 | "z": "f46adcd0.a3fd6", 156 | "name": "Init WorldMap", 157 | "topic": "", 158 | "payload": "true", 159 | "payloadType": "bool", 160 | "repeat": "", 161 | "crontab": "", 162 | "once": true, 163 | "x": 130, 164 | "y": 100, 165 | "wires": [ 166 | [ 167 | "b7822e81.e33958" 168 | ] 169 | ] 170 | }, 171 | { 172 | "id": "b7822e81.e33958", 173 | "type": "function", 174 | "z": "f46adcd0.a3fd6", 175 | "name": "Inject /worldmap", 176 | "func": "msg.payload = {};\nmsg.payload.url = \"/worldmap\";\nmsg.payload.command = {};\n\nmsg.payload.command = {\n layer:\"Esri Satellite\",\n lat:40.978679,\n lon:-74.1015797,\n zoom:5,\n map: { name: \"Esri Satellite\" }\n };\nreturn msg;\n", 177 | "outputs": 1, 178 | "noerr": 0, 179 | "x": 320, 180 | "y": 100, 181 | "wires": [ 182 | [ 183 | "4efaeffb.81abf8" 184 | ] 185 | ] 186 | }, 187 | { 188 | "id": "be6ebb31.73a5e", 189 | "type": "comment", 190 | "z": "f46adcd0.a3fd6", 191 | "name": "Query the location of the International Space Station", 192 | "info": "", 193 | "x": 234.44444444444446, 194 | "y": 144.44444444444443, 195 | "wires": [] 196 | }, 197 | { 198 | "id": "fbfe51ef.c8f33", 199 | "type": "ui_switch", 200 | "z": "f46adcd0.a3fd6", 201 | "name": "", 202 | "label": "switch", 203 | "group": "126ac135.b186df", 204 | "order": 0, 205 | "width": 0, 206 | "height": 0, 207 | "passthru": true, 208 | "decouple": "false", 209 | "topic": "", 210 | "style": "", 211 | "onvalue": "true", 212 | "onvalueType": "bool", 213 | "onicon": "", 214 | "oncolor": "", 215 | "offvalue": "false", 216 | "offvalueType": "bool", 217 | "officon": "", 218 | "offcolor": "", 219 | "x": 290, 220 | "y": 180, 221 | "wires": [ 222 | [ 223 | "5f1285cc.c4f7ec" 224 | ] 225 | ] 226 | }, 227 | { 228 | "id": "5f1285cc.c4f7ec", 229 | "type": "switch", 230 | "z": "f46adcd0.a3fd6", 231 | "name": "Switch On", 232 | "property": "payload", 233 | "propertyType": "msg", 234 | "rules": [ 235 | { 236 | "t": "true" 237 | } 238 | ], 239 | "checkall": "true", 240 | "outputs": 1, 241 | "x": 440, 242 | "y": 180, 243 | "wires": [ 244 | [ 245 | "ca6c89d0.35dc5" 246 | ] 247 | ] 248 | }, 249 | { 250 | "id": "837b3d01.4eb418", 251 | "type": "worldmap-tracks", 252 | "z": "f46adcd0.a3fd6", 253 | "depth": "20", 254 | "name": "", 255 | "x": 950, 256 | "y": 120, 257 | "wires": [ 258 | [ 259 | "ec1b2e44.eb46b" 260 | ] 261 | ] 262 | }, 263 | { 264 | "id": "ec94d4cd.2fd47", 265 | "type": "ui_group", 266 | "z": "f46adcd0.a3fd6", 267 | "name": "Space Station", 268 | "tab": "e5c442af.9d2358", 269 | "order": 2, 270 | "disp": true, 271 | "width": "20" 272 | }, 273 | { 274 | "id": "126ac135.b186df", 275 | "type": "ui_group", 276 | "z": "", 277 | "name": "Start/Stop", 278 | "tab": "e5c442af.9d2358", 279 | "order": 1, 280 | "disp": true, 281 | "width": "3" 282 | }, 283 | { 284 | "id": "e5c442af.9d2358", 285 | "type": "ui_tab", 286 | "z": "f46adcd0.a3fd6", 287 | "name": "International Space Station Location", 288 | "icon": "fa-space-shuttle", 289 | "order": 10 290 | } 291 | ] 292 | -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Button.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Dropdown.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Form.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg-Template.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-AssetReg.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-Flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-Nodedetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-Forms-Nodedetails.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-ISS-TemplateWorldMap-Dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-ISS-TemplateWorldMap-Dashboard.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-ISS-TemplateWorldMap-flow-annotated-.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/screenshots/NRD-ISS-TemplateWorldMap-flow-annotated-.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Button.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Dropdown.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Form.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetReg-Template.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetRegDash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetRegDash.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetRegFlow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-AssetRegFlow.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ButtonNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ButtonNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-DropdownNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-DropdownNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-FormNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-FormNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ISS-Dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ISS-Dash.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ISS-Flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-ISS-Flow.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-PaletteBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-PaletteBlank.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-TemplateNode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-TemplateNode.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-title.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-trailer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/johnwalicki/Coursera-Developer-Guide-Advanced-Node-RED/24401271003e4c03d99b0911af849067e08ec790/Dashboard/Lecture4-Node-RED-Forms-Templates/slides/NRD-FT-trailer.png -------------------------------------------------------------------------------- /Dashboard/Lecture4-Node-RED-Forms-Templates/slides/README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED Lecture 4 2 | Lecture 4 - Node-RED Dashboard Forms and Templates 3 | ![Node-RED Dashboard Forms Slide 1](NRD-FT-title.png?raw=true "Node-RED Dashboard Chart") 4 | ![Node-RED Dashboard Forms Slide 2](NRD-FT-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 5 | ![Node-RED Dashboard Forms Slide 3](NRD-FT-AssetRegDash.png?raw=true "Node-RED Dashboard Chart") 6 | ![Node-RED Dashboard Forms Slide 4](NRD-FT-AssetRegFlow.png?raw=true "Node-RED Dashboard Chart") 7 | ![Node-RED Dashboard Forms Slide 5](NRD-FT-AssetReg-Form.png?raw=true "Node-RED Dashboard Chart") 8 | ![Node-RED Dashboard Forms Slide 6](NRD-FT-FormNode.png?raw=true "Node-RED Dashboard Chart") 9 | ![Node-RED Dashboard Forms Slide 7](NRD-FT-AssetReg-Template.png?raw=true "Node-RED Dashboard Chart") 10 | ![Node-RED Dashboard Forms Slide 8](NRD-FT-TemplateNode.png?raw=true "Node-RED Dashboard Chart") 11 | ![Node-RED Dashboard Forms Slide 9](NRD-FT-AssetReg-Dropdown.png?raw=true "Node-RED Dashboard Chart") 12 | ![Node-RED Dashboard Forms Slide 10](NRD-FT-DropdownNode.png?raw=true "Node-RED Dashboard Chart") 13 | ![Node-RED Dashboard Forms Slide 11](NRD-FT-AssetReg-Button.png?raw=true "Node-RED Dashboard Chart") 14 | ![Node-RED Dashboard Forms Slide 12](NRD-FT-ButtonNode.png?raw=true "Node-RED Dashboard Chart") 15 | ![Node-RED Dashboard Forms Slide 13](NRD-FT-ISS-Dash.png?raw=true "Node-RED Dashboard Chart") 16 | ![Node-RED Dashboard Forms Slide 14](NRD-FT-ISS-Flow.png?raw=true "Node-RED Dashboard Chart") 17 | ![Node-RED Dashboard Forms Slide 15](NRD-FT-PaletteBlank.png?raw=true "Node-RED Dashboard Chart") 18 | ![Node-RED Dashboard Forms Slide 16](NRD-FT-trailer.png?raw=true "Node-RED Dashboard Chart") 19 | 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Coursera - Developers Guide to Node-RED 2 | 3 | ## Start the [A Developer's Guide to Node-RED](https://www.coursera.org/learn/developer-nodered) Course 4 | 5 | Node-RED is a flow-based programming environment from the JS Foundation. It provides a palette of nodes that allow users to very quickly wire up IoT applications that can combine streams of both physical and digital events. Its Node.JS runtime is easy to install on both devices and the cloud, and provides a framework for extending its capabilities. 6 |   7 | In this [course](https://www.coursera.org/learn/developer-nodered), learners will be introduced to many of Node-RED's core features, learn how to create dashboards for their data, access external systems and create new nodes for the palette. Once they have completed the course, they will be able to leverage the full power of Node-RED to continue their IoT development experience. 8 | 9 | The Node-RED Dashboard chapter is split into four Lectures 10 | * Lecture 1 - [Node-RED Dashboard Introduction](Dashboard/Lecture1-Node-RED-Dashboard-Intro/README.md) 11 | * Lecture 2 - [Node-RED Dashboard Layout](Dashboard/Lecture2-Node-RED-Layout-Config/README.md) 12 | * Lecture 3 - [Node-RED Dashboard Charts](Dashboard/Lecture3-Node-RED-Charts/README.md) 13 | * Lecture 4 - [Node-RED Dashboard Forms and Templates](Dashboard/Lecture4-Node-RED-Forms-Templates/README.md) 14 | --------------------------------------------------------------------------------