├── .gitignore ├── LICENSE ├── README.md ├── examples ├── Example1 │ ├── Flow1.json │ └── README.md └── Example2 │ ├── Flow1.json │ └── README.md ├── icons ├── OledBattery.png ├── OledBluetooth.png ├── OledClear.png ├── OledClock.png ├── OledClockWhite.png ├── OledDim.png ├── OledImage.png ├── OledInvert.png ├── OledLine.png ├── OledOneWhite.png ├── OledPixel.png ├── OledRectangle.png ├── OledScroll.png ├── OledString.png ├── OledTurnOff.png ├── OledTurnOn.png └── OledWifi.png ├── locales ├── de │ ├── oled.html │ └── oled.json ├── en-US │ ├── oled.html │ └── oled.json ├── es │ ├── oled.html │ └── oled.json ├── fr │ ├── oled.html │ └── oled.json └── it │ ├── oled.html │ └── oled.json ├── oled.html ├── oled.js ├── package.json ├── resources ├── OledBattery.png ├── OledBluetooth.png ├── OledCleardigit.png ├── OledClock.png ├── OledClockWhite.png ├── OledDim.png ├── OledEight.png ├── OledEightWhite.png ├── OledEightWhiteT.png ├── OledFive.png ├── OledFiveWhite.png ├── OledFiveWhiteT.png ├── OledFour.png ├── OledFourWhite.png ├── OledFourWhiteT.png ├── OledImage.png ├── OledInvert.png ├── OledLine.png ├── OledNine.png ├── OledNineWhite.png ├── OledNineWhiteT.png ├── OledOne.png ├── OledOneWhite.png ├── OledOneWhiteT.png ├── OledPixel.png ├── OledRectangle.png ├── OledScroll.png ├── OledSeven.png ├── OledSevenWhite.png ├── OledSevenWhiteT.png ├── OledSix.png ├── OledSixWhite.png ├── OledSixWhiteT.png ├── OledString.png ├── OledThree.png ├── OledThreeWhite.png ├── OledThreeWhiteT.png ├── OledTurnOff.png ├── OledTurnOn.png ├── OledTwo.png ├── OledTwoWhite.png ├── OledTwoWhiteT.png ├── OledTwopoints.png ├── OledTwopointsWhite.png ├── OledWifi.png ├── OledZero.png ├── OledZeroWhite.png ├── OledZeroWhiteT.png ├── Oledrpi32x32.png ├── Oledrpi48x48.png ├── Oledrpi64x64.png ├── WaterBrain.png ├── notafile.png ├── raspberrypi-logo.png ├── rpi frambuesa.png ├── rpi-frambuesa.png ├── yahabommlogo-2-102x16.png └── yahabommlogo-2-128x20.png └── screen example.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | package-lock.json 61 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Hendrik Roth 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | node-red-contrib-oled 2 | ===================== 3 | ![Image text](https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/master/screen%20example.png) 4 | 5 | 6 | 7 | Node-Red node to talk to OLED displays, connected by i2c. 8 | 9 | ## now maintained 10 | 11 | ``` 12 | npm install node-red-contrib-oled 13 | ``` 14 | 15 | # Features 16 | 17 | * Perfectly compatible with Raspberry Pi 4B/3B+/3B. 18 | 19 | * In the examples/Example1 directory there is a flow that you can use for testing. 20 | 21 | * Support OLED display, which can display the running status of Raspberry Pi in real-time or anything you want. 22 | 23 | # Please Contact Us 24 | If you have any problem when using our package, please contact us.. 25 | -------------------------------------------------------------------------------- /examples/Example1/Flow1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "1fbc83566a03a07b", 4 | "type": "subflow", 5 | "name": "Oled Status", 6 | "info": "", 7 | "category": "", 8 | "in": [ 9 | { 10 | "x": 40, 11 | "y": 140, 12 | "wires": [ 13 | { 14 | "id": "a1c3dcf60f15f95d" 15 | } 16 | ] 17 | } 18 | ], 19 | "out": [], 20 | "env": [], 21 | "meta": { 22 | "module": "oledstatus", 23 | "version": "0.0.3", 24 | "author": "Antonio Maza waterbrain@pelaire.com", 25 | "desc": "Display raspi status in i2c Oled 128x64", 26 | "keywords": "oled, i2c", 27 | "license": "MIT" 28 | }, 29 | "color": "#3FADB5", 30 | "inputLabels": [ 31 | "msg imput" 32 | ], 33 | "icon": "node-red/cog.svg" 34 | }, 35 | { 36 | "id": "167d8c0db2fbf5cc", 37 | "type": "change", 38 | "z": "1fbc83566a03a07b", 39 | "name": "titulo", 40 | "rules": [ 41 | { 42 | "t": "set", 43 | "p": "payload", 44 | "pt": "msg", 45 | "to": "{\"size\":2,\"x\":4,\"y\":1,\"text\":\"Rpi4 Status\"}", 46 | "tot": "json" 47 | } 48 | ], 49 | "action": "", 50 | "property": "", 51 | "from": "", 52 | "to": "", 53 | "reg": false, 54 | "x": 770, 55 | "y": 140, 56 | "wires": [ 57 | [ 58 | "c61f1b52f35ae706", 59 | "1a4baae390763ddd" 60 | ] 61 | ] 62 | }, 63 | { 64 | "id": "c61f1b52f35ae706", 65 | "type": "String", 66 | "z": "1fbc83566a03a07b", 67 | "name": "", 68 | "display": "9a288fe6eaa83734", 69 | "x": 530, 70 | "y": 40, 71 | "wires": [] 72 | }, 73 | { 74 | "id": "4e8ed591713b4e21", 75 | "type": "change", 76 | "z": "1fbc83566a03a07b", 77 | "name": "rectangulo", 78 | "rules": [ 79 | { 80 | "t": "set", 81 | "p": "payload", 82 | "pt": "msg", 83 | "to": "{\"x\":0,\"y\":17,\"w\":128,\"h\":48,\"color\":1}", 84 | "tot": "json" 85 | } 86 | ], 87 | "action": "", 88 | "property": "", 89 | "from": "", 90 | "to": "", 91 | "reg": false, 92 | "x": 530, 93 | "y": 280, 94 | "wires": [ 95 | [ 96 | "375ba257f60a9883", 97 | "d582297c8e899b07" 98 | ] 99 | ] 100 | }, 101 | { 102 | "id": "375ba257f60a9883", 103 | "type": "FillRectangle", 104 | "z": "1fbc83566a03a07b", 105 | "name": "", 106 | "display": "9a288fe6eaa83734", 107 | "x": 770, 108 | "y": 300, 109 | "wires": [] 110 | }, 111 | { 112 | "id": "b6fbfb898434cc27", 113 | "type": "change", 114 | "z": "1fbc83566a03a07b", 115 | "name": "rectvacio", 116 | "rules": [ 117 | { 118 | "t": "set", 119 | "p": "payload", 120 | "pt": "msg", 121 | "to": "{\"x\":1,\"y\":18,\"w\":126,\"h\":44,\"color\":0}", 122 | "tot": "json" 123 | } 124 | ], 125 | "action": "", 126 | "property": "", 127 | "from": "", 128 | "to": "", 129 | "reg": false, 130 | "x": 520, 131 | "y": 320, 132 | "wires": [ 133 | [ 134 | "375ba257f60a9883" 135 | ] 136 | ] 137 | }, 138 | { 139 | "id": "1f43032e9f2f269c", 140 | "type": "NetworkIntf", 141 | "z": "1fbc83566a03a07b", 142 | "name": "", 143 | "x": 350, 144 | "y": 460, 145 | "wires": [ 146 | [ 147 | "5168c678562eaae2" 148 | ] 149 | ] 150 | }, 151 | { 152 | "id": "46e9f9818b9a0d38", 153 | "type": "exec", 154 | "z": "1fbc83566a03a07b", 155 | "command": "vcgencmd measure_temp", 156 | "addpay": false, 157 | "append": "", 158 | "useSpawn": "", 159 | "timer": "", 160 | "oldrc": false, 161 | "name": "CPU temp", 162 | "x": 470, 163 | "y": 820, 164 | "wires": [ 165 | [ 166 | "03fefb49d6f5f164", 167 | "4ee887a95db529ad" 168 | ], 169 | [], 170 | [] 171 | ] 172 | }, 173 | { 174 | "id": "03fefb49d6f5f164", 175 | "type": "change", 176 | "z": "1fbc83566a03a07b", 177 | "name": "getCPUTemp", 178 | "rules": [ 179 | { 180 | "t": "set", 181 | "p": "payload", 182 | "pt": "msg", 183 | "to": "\"CPU Temp: \" & $substring(msg.payload, 5, 4) & \" °C\"", 184 | "tot": "jsonata" 185 | } 186 | ], 187 | "action": "", 188 | "property": "", 189 | "from": "", 190 | "to": "", 191 | "reg": false, 192 | "x": 620, 193 | "y": 740, 194 | "wires": [ 195 | [ 196 | "8704f628f05cf6c8" 197 | ] 198 | ] 199 | }, 200 | { 201 | "id": "8704f628f05cf6c8", 202 | "type": "change", 203 | "z": "1fbc83566a03a07b", 204 | "name": "CPU Temp", 205 | "rules": [ 206 | { 207 | "t": "set", 208 | "p": "payload", 209 | "pt": "msg", 210 | "to": "{ \"size\": 1, \"x\": 6, \"y\": 37, \"text\": msg.payload}", 211 | "tot": "jsonata" 212 | } 213 | ], 214 | "action": "", 215 | "property": "", 216 | "from": "", 217 | "to": "", 218 | "reg": false, 219 | "x": 810, 220 | "y": 740, 221 | "wires": [ 222 | [ 223 | "689f5bb2d49fc665", 224 | "2504551d82fa4ad1" 225 | ] 226 | ] 227 | }, 228 | { 229 | "id": "4ee887a95db529ad", 230 | "type": "debug", 231 | "z": "1fbc83566a03a07b", 232 | "name": "", 233 | "active": false, 234 | "tosidebar": true, 235 | "console": false, 236 | "tostatus": false, 237 | "complete": "true", 238 | "targetType": "full", 239 | "statusVal": "", 240 | "statusType": "auto", 241 | "x": 610, 242 | "y": 820, 243 | "wires": [] 244 | }, 245 | { 246 | "id": "5168c678562eaae2", 247 | "type": "change", 248 | "z": "1fbc83566a03a07b", 249 | "name": "getEthaddress", 250 | "rules": [ 251 | { 252 | "t": "set", 253 | "p": "conexion", 254 | "pt": "flow", 255 | "to": "\"Eth0 \" & $substringBefore($replace($replace($replace($string(payload.networkInterfaces.eth0.address), '[', ''), '\"', ''), ']', ''), ',')", 256 | "tot": "jsonata" 257 | } 258 | ], 259 | "action": "", 260 | "property": "", 261 | "from": "", 262 | "to": "", 263 | "reg": false, 264 | "x": 540, 265 | "y": 460, 266 | "wires": [ 267 | [] 268 | ] 269 | }, 270 | { 271 | "id": "ed5d91d10fa1f792", 272 | "type": "change", 273 | "z": "1fbc83566a03a07b", 274 | "name": "conexion", 275 | "rules": [ 276 | { 277 | "t": "set", 278 | "p": "payload", 279 | "pt": "msg", 280 | "to": "{ \"size\": 1, \"x\": 6, \"y\": 29, \"text\": $flowContext(\"conexion\")\t}", 281 | "tot": "jsonata" 282 | } 283 | ], 284 | "action": "", 285 | "property": "", 286 | "from": "", 287 | "to": "", 288 | "reg": false, 289 | "x": 800, 290 | "y": 480, 291 | "wires": [ 292 | [ 293 | "689f5bb2d49fc665" 294 | ] 295 | ] 296 | }, 297 | { 298 | "id": "bf51e830acaab823", 299 | "type": "Loadavg", 300 | "z": "1fbc83566a03a07b", 301 | "name": "", 302 | "x": 440, 303 | "y": 980, 304 | "wires": [ 305 | [ 306 | "9ed89d1ab8b32ad7" 307 | ] 308 | ] 309 | }, 310 | { 311 | "id": "f7367a4a2e82e370", 312 | "type": "CPUs", 313 | "z": "1fbc83566a03a07b", 314 | "name": "", 315 | "x": 330, 316 | "y": 520, 317 | "wires": [ 318 | [ 319 | "0c1a14594fba319d", 320 | "025b034f3d0fa35f" 321 | ] 322 | ] 323 | }, 324 | { 325 | "id": "0c1a14594fba319d", 326 | "type": "change", 327 | "z": "1fbc83566a03a07b", 328 | "name": "getCPUTemp", 329 | "rules": [ 330 | { 331 | "t": "set", 332 | "p": "cpus", 333 | "pt": "flow", 334 | "to": "$count(payload.cpus)", 335 | "tot": "jsonata" 336 | } 337 | ], 338 | "action": "", 339 | "property": "", 340 | "from": "", 341 | "to": "", 342 | "reg": false, 343 | "x": 520, 344 | "y": 520, 345 | "wires": [ 346 | [] 347 | ] 348 | }, 349 | { 350 | "id": "025b034f3d0fa35f", 351 | "type": "change", 352 | "z": "1fbc83566a03a07b", 353 | "name": "getmodel", 354 | "rules": [ 355 | { 356 | "t": "set", 357 | "p": "model", 358 | "pt": "flow", 359 | "to": "payload.cpus[0].model", 360 | "tot": "jsonata" 361 | } 362 | ], 363 | "action": "", 364 | "property": "", 365 | "from": "", 366 | "to": "", 367 | "reg": false, 368 | "x": 500, 369 | "y": 560, 370 | "wires": [ 371 | [ 372 | "ed5d91d10fa1f792", 373 | "5c5dbcf6ff5291f4" 374 | ] 375 | ] 376 | }, 377 | { 378 | "id": "5c5dbcf6ff5291f4", 379 | "type": "change", 380 | "z": "1fbc83566a03a07b", 381 | "name": "mode y cpus", 382 | "rules": [ 383 | { 384 | "t": "set", 385 | "p": "payload", 386 | "pt": "msg", 387 | "to": "{ \"size\": 1, \"x\": 6, \"y\": 21, \"text\": \"Mod: \" & $substring($flowContext(\"model\"),0,6) & \"Procs: \" & $flowContext(\"cpus\")\t}", 388 | "tot": "jsonata" 389 | } 390 | ], 391 | "action": "", 392 | "property": "", 393 | "from": "", 394 | "to": "", 395 | "reg": false, 396 | "x": 810, 397 | "y": 520, 398 | "wires": [ 399 | [ 400 | "689f5bb2d49fc665" 401 | ] 402 | ] 403 | }, 404 | { 405 | "id": "9ed89d1ab8b32ad7", 406 | "type": "change", 407 | "z": "1fbc83566a03a07b", 408 | "name": "loadavg", 409 | "rules": [ 410 | { 411 | "t": "set", 412 | "p": "payload", 413 | "pt": "msg", 414 | "to": "{\t \"size\": 1,\t \"x\": 6,\t \"y\": 45,\t \"text\": \"Avg: \" & msg.payload.loadavg[0] & \" \" & msg.payload.loadavg[1] & \" \" & msg.payload.loadavg[2] \t}", 415 | "tot": "jsonata" 416 | } 417 | ], 418 | "action": "", 419 | "property": "", 420 | "from": "", 421 | "to": "", 422 | "reg": false, 423 | "x": 680, 424 | "y": 900, 425 | "wires": [ 426 | [ 427 | "689f5bb2d49fc665" 428 | ] 429 | ] 430 | }, 431 | { 432 | "id": "405f47e89e436e5e", 433 | "type": "Image", 434 | "z": "1fbc83566a03a07b", 435 | "name": "", 436 | "display": "9a288fe6eaa83734", 437 | "x": 530, 438 | "y": 120, 439 | "wires": [] 440 | }, 441 | { 442 | "id": "5e3868b3bd8f4fe7", 443 | "type": "change", 444 | "z": "1fbc83566a03a07b", 445 | "name": "rectangulo", 446 | "rules": [ 447 | { 448 | "t": "set", 449 | "p": "payload", 450 | "pt": "msg", 451 | "to": "{\"x\":0,\"y\":0,\"w\":128,\"h\":16,\"color\":1}", 452 | "tot": "json" 453 | } 454 | ], 455 | "action": "", 456 | "property": "", 457 | "from": "", 458 | "to": "", 459 | "reg": false, 460 | "x": 530, 461 | "y": 360, 462 | "wires": [ 463 | [ 464 | "375ba257f60a9883" 465 | ] 466 | ] 467 | }, 468 | { 469 | "id": "501a31e1ec486505", 470 | "type": "change", 471 | "z": "1fbc83566a03a07b", 472 | "name": "rectvacio", 473 | "rules": [ 474 | { 475 | "t": "set", 476 | "p": "payload", 477 | "pt": "msg", 478 | "to": "{\"x\":1,\"y\":1,\"w\":126,\"h\":14,\"color\":0}", 479 | "tot": "json" 480 | } 481 | ], 482 | "action": "", 483 | "property": "", 484 | "from": "", 485 | "to": "", 486 | "reg": false, 487 | "x": 520, 488 | "y": 400, 489 | "wires": [ 490 | [ 491 | "375ba257f60a9883" 492 | ] 493 | ] 494 | }, 495 | { 496 | "id": "804745fe4ab4e68d", 497 | "type": "OS", 498 | "z": "1fbc83566a03a07b", 499 | "name": "", 500 | "x": 330, 501 | "y": 580, 502 | "wires": [ 503 | [ 504 | "283079f10dc2dcfe", 505 | "b48fbcf8cd1f942f" 506 | ] 507 | ] 508 | }, 509 | { 510 | "id": "283079f10dc2dcfe", 511 | "type": "change", 512 | "z": "1fbc83566a03a07b", 513 | "name": "gethostname", 514 | "rules": [ 515 | { 516 | "t": "set", 517 | "p": "hostname", 518 | "pt": "flow", 519 | "to": "payload.hostname", 520 | "tot": "jsonata" 521 | } 522 | ], 523 | "action": "", 524 | "property": "", 525 | "from": "", 526 | "to": "", 527 | "reg": false, 528 | "x": 510, 529 | "y": 600, 530 | "wires": [ 531 | [ 532 | "dd2be036e3a37080" 533 | ] 534 | ] 535 | }, 536 | { 537 | "id": "b48fbcf8cd1f942f", 538 | "type": "change", 539 | "z": "1fbc83566a03a07b", 540 | "name": "gettype", 541 | "rules": [ 542 | { 543 | "t": "set", 544 | "p": "ostype", 545 | "pt": "flow", 546 | "to": "payload.type", 547 | "tot": "jsonata" 548 | } 549 | ], 550 | "action": "", 551 | "property": "", 552 | "from": "", 553 | "to": "", 554 | "reg": false, 555 | "x": 500, 556 | "y": 640, 557 | "wires": [ 558 | [ 559 | "d496e258932b8a86" 560 | ] 561 | ] 562 | }, 563 | { 564 | "id": "dd2be036e3a37080", 565 | "type": "change", 566 | "z": "1fbc83566a03a07b", 567 | "name": "hostname", 568 | "rules": [ 569 | { 570 | "t": "set", 571 | "p": "payload", 572 | "pt": "msg", 573 | "to": "{ \"size\": 1, \"x\": 1, \"y\": 1, \"text\": \" HM: \" & $flowContext(\"hostname\")\t}", 574 | "tot": "jsonata" 575 | } 576 | ], 577 | "action": "", 578 | "property": "", 579 | "from": "", 580 | "to": "", 581 | "reg": false, 582 | "x": 700, 583 | "y": 600, 584 | "wires": [ 585 | [ 586 | "689f5bb2d49fc665" 587 | ] 588 | ] 589 | }, 590 | { 591 | "id": "d496e258932b8a86", 592 | "type": "change", 593 | "z": "1fbc83566a03a07b", 594 | "name": "ostype", 595 | "rules": [ 596 | { 597 | "t": "set", 598 | "p": "payload", 599 | "pt": "msg", 600 | "to": "{ \"size\": 1, \"x\": 1, \"y\": 7, \"text\": \" OS: \" & $flowContext(\"ostype\")\t}", 601 | "tot": "jsonata" 602 | } 603 | ], 604 | "action": "", 605 | "property": "", 606 | "from": "", 607 | "to": "", 608 | "reg": false, 609 | "x": 690, 610 | "y": 640, 611 | "wires": [ 612 | [ 613 | "689f5bb2d49fc665" 614 | ] 615 | ] 616 | }, 617 | { 618 | "id": "4e35834647931a59", 619 | "type": "switch", 620 | "z": "1fbc83566a03a07b", 621 | "name": "", 622 | "property": "animated", 623 | "propertyType": "global", 624 | "rules": [ 625 | { 626 | "t": "eq", 627 | "v": "false", 628 | "vt": "jsonata" 629 | } 630 | ], 631 | "checkall": "true", 632 | "repair": false, 633 | "outputs": 1, 634 | "x": 430, 635 | "y": 760, 636 | "wires": [ 637 | [ 638 | "ed5d91d10fa1f792", 639 | "5c5dbcf6ff5291f4", 640 | "d496e258932b8a86", 641 | "dd2be036e3a37080", 642 | "46e9f9818b9a0d38", 643 | "bf51e830acaab823", 644 | "68f0bc8a7e6bb044" 645 | ] 646 | ] 647 | }, 648 | { 649 | "id": "68f0bc8a7e6bb044", 650 | "type": "Drives", 651 | "z": "1fbc83566a03a07b", 652 | "name": "", 653 | "x": 430, 654 | "y": 1040, 655 | "wires": [ 656 | [ 657 | "1f7ef392ccc15556" 658 | ] 659 | ] 660 | }, 661 | { 662 | "id": "1f7ef392ccc15556", 663 | "type": "function", 664 | "z": "1fbc83566a03a07b", 665 | "name": "", 666 | "func": "\ntotal = msg.payload[0].size / 1024\nunits = \"M\"\nif (total > 1024) {\n units = \"G\"\n total = Math.round(total / 1024* 1 )/1;}\nelse {\n\n total = Math.round(total * 1 )/1;\n}\n\nused = msg.payload[0].used / 1024\nuunits = \"M\"\nif (used > 1024) {\n uunits = \"G\"\n used = Math.round(used / 1024* 10 )/10;}\nelse {\n\n used = Math.round(used * 10 )/10;\n}\n\ntexto = \"Disk: \" + total + units + \" \" + used + uunits + \" \" + Math.round(msg.payload[0].capacity * 100) + \"%\"\ntexto = texto.replace(\".\", \",\");\nmsg.payload = {\"size\": 1, \"x\": 6, \"y\": 53, \"text\": texto};\nreturn msg;", 667 | "outputs": 1, 668 | "noerr": 0, 669 | "initialize": "", 670 | "finalize": "", 671 | "libs": [], 672 | "x": 620, 673 | "y": 1040, 674 | "wires": [ 675 | [ 676 | "689f5bb2d49fc665" 677 | ] 678 | ] 679 | }, 680 | { 681 | "id": "a1c3dcf60f15f95d", 682 | "type": "switch", 683 | "z": "1fbc83566a03a07b", 684 | "name": "", 685 | "property": "payload", 686 | "propertyType": "msg", 687 | "rules": [ 688 | { 689 | "t": "eq", 690 | "v": "start", 691 | "vt": "str" 692 | }, 693 | { 694 | "t": "else" 695 | } 696 | ], 697 | "checkall": "true", 698 | "repair": false, 699 | "outputs": 2, 700 | "x": 150, 701 | "y": 180, 702 | "wires": [ 703 | [ 704 | "7d36691afa95bc5a" 705 | ], 706 | [ 707 | "05a8dcd859f3a1be" 708 | ] 709 | ] 710 | }, 711 | { 712 | "id": "5f61107fede7fc57", 713 | "type": "change", 714 | "z": "1fbc83566a03a07b", 715 | "name": "logo", 716 | "rules": [ 717 | { 718 | "t": "set", 719 | "p": "payload", 720 | "pt": "msg", 721 | "to": "{\"image\":\"yahabommlogo-2-128x20.png\",\"x\":0,\"y\":25,\"clear\":true}", 722 | "tot": "json" 723 | } 724 | ], 725 | "action": "", 726 | "property": "", 727 | "from": "", 728 | "to": "", 729 | "reg": false, 730 | "x": 370, 731 | "y": 120, 732 | "wires": [ 733 | [ 734 | "405f47e89e436e5e", 735 | "a3fce2f46084ce6b" 736 | ] 737 | ] 738 | }, 739 | { 740 | "id": "689f5bb2d49fc665", 741 | "type": "link out", 742 | "z": "1fbc83566a03a07b", 743 | "name": "string entra", 744 | "mode": "link", 745 | "links": [ 746 | "3dd98eccf1517932" 747 | ], 748 | "x": 965, 749 | "y": 740, 750 | "wires": [] 751 | }, 752 | { 753 | "id": "3dd98eccf1517932", 754 | "type": "link in", 755 | "z": "1fbc83566a03a07b", 756 | "name": "string salida", 757 | "links": [ 758 | "689f5bb2d49fc665" 759 | ], 760 | "x": 245, 761 | "y": 40, 762 | "wires": [ 763 | [ 764 | "c61f1b52f35ae706" 765 | ] 766 | ] 767 | }, 768 | { 769 | "id": "d582297c8e899b07", 770 | "type": "delay", 771 | "z": "1fbc83566a03a07b", 772 | "name": "bucle 5", 773 | "pauseType": "delay", 774 | "timeout": "10", 775 | "timeoutUnits": "minutes", 776 | "rate": "1", 777 | "nbRateUnits": "1", 778 | "rateUnits": "second", 779 | "randomFirst": "1", 780 | "randomLast": "5", 781 | "randomUnits": "seconds", 782 | "drop": false, 783 | "allowrate": false, 784 | "outputs": 1, 785 | "x": 140, 786 | "y": 320, 787 | "wires": [ 788 | [ 789 | "4e8ed591713b4e21", 790 | "b6fbfb898434cc27", 791 | "5e3868b3bd8f4fe7", 792 | "501a31e1ec486505", 793 | "1f43032e9f2f269c", 794 | "f7367a4a2e82e370", 795 | "804745fe4ab4e68d" 796 | ] 797 | ] 798 | }, 799 | { 800 | "id": "2504551d82fa4ad1", 801 | "type": "delay", 802 | "z": "1fbc83566a03a07b", 803 | "name": "bucle 2", 804 | "pauseType": "delay", 805 | "timeout": "2", 806 | "timeoutUnits": "seconds", 807 | "rate": "1", 808 | "nbRateUnits": "1", 809 | "rateUnits": "second", 810 | "randomFirst": "1", 811 | "randomLast": "5", 812 | "randomUnits": "seconds", 813 | "drop": false, 814 | "allowrate": false, 815 | "outputs": 1, 816 | "x": 120, 817 | "y": 660, 818 | "wires": [ 819 | [ 820 | "4e35834647931a59" 821 | ] 822 | ] 823 | }, 824 | { 825 | "id": "05a8dcd859f3a1be", 826 | "type": "change", 827 | "z": "1fbc83566a03a07b", 828 | "name": "reset", 829 | "rules": [ 830 | { 831 | "t": "set", 832 | "p": "reset", 833 | "pt": "msg", 834 | "to": "true", 835 | "tot": "bool" 836 | } 837 | ], 838 | "action": "", 839 | "property": "", 840 | "from": "", 841 | "to": "", 842 | "reg": false, 843 | "x": 310, 844 | "y": 200, 845 | "wires": [ 846 | [ 847 | "d582297c8e899b07", 848 | "2504551d82fa4ad1", 849 | "1384c14f43abdcd8" 850 | ] 851 | ] 852 | }, 853 | { 854 | "id": "1384c14f43abdcd8", 855 | "type": "change", 856 | "z": "1fbc83566a03a07b", 857 | "name": "rectangulo", 858 | "rules": [ 859 | { 860 | "t": "set", 861 | "p": "payload", 862 | "pt": "msg", 863 | "to": "{\"x\":0,\"y\":0,\"w\":128,\"h\":64,\"color\":0}", 864 | "tot": "json" 865 | } 866 | ], 867 | "action": "", 868 | "property": "", 869 | "from": "", 870 | "to": "", 871 | "reg": false, 872 | "x": 570, 873 | "y": 180, 874 | "wires": [ 875 | [ 876 | "375ba257f60a9883" 877 | ] 878 | ] 879 | }, 880 | { 881 | "id": "a3fce2f46084ce6b", 882 | "type": "delay", 883 | "z": "1fbc83566a03a07b", 884 | "name": "", 885 | "pauseType": "delay", 886 | "timeout": "10", 887 | "timeoutUnits": "milliseconds", 888 | "rate": "1", 889 | "nbRateUnits": "1", 890 | "rateUnits": "second", 891 | "randomFirst": "1", 892 | "randomLast": "5", 893 | "randomUnits": "seconds", 894 | "drop": false, 895 | "allowrate": false, 896 | "outputs": 1, 897 | "x": 630, 898 | "y": 140, 899 | "wires": [ 900 | [ 901 | "167d8c0db2fbf5cc" 902 | ] 903 | ] 904 | }, 905 | { 906 | "id": "8dd76ec78318298e", 907 | "type": "delay", 908 | "z": "1fbc83566a03a07b", 909 | "name": "", 910 | "pauseType": "delay", 911 | "timeout": "2", 912 | "timeoutUnits": "seconds", 913 | "rate": "1", 914 | "nbRateUnits": "1", 915 | "rateUnits": "second", 916 | "randomFirst": "1", 917 | "randomLast": "5", 918 | "randomUnits": "seconds", 919 | "drop": false, 920 | "allowrate": false, 921 | "outputs": 1, 922 | "x": 140, 923 | "y": 400, 924 | "wires": [ 925 | [ 926 | "2504551d82fa4ad1" 927 | ] 928 | ] 929 | }, 930 | { 931 | "id": "1a4baae390763ddd", 932 | "type": "delay", 933 | "z": "1fbc83566a03a07b", 934 | "name": "", 935 | "pauseType": "delay", 936 | "timeout": "10", 937 | "timeoutUnits": "seconds", 938 | "rate": "1", 939 | "nbRateUnits": "1", 940 | "rateUnits": "second", 941 | "randomFirst": "1", 942 | "randomLast": "5", 943 | "randomUnits": "seconds", 944 | "drop": false, 945 | "allowrate": false, 946 | "outputs": 1, 947 | "x": 920, 948 | "y": 180, 949 | "wires": [ 950 | [ 951 | "4e8ed591713b4e21", 952 | "b6fbfb898434cc27", 953 | "5e3868b3bd8f4fe7", 954 | "501a31e1ec486505", 955 | "8dd76ec78318298e", 956 | "1f43032e9f2f269c", 957 | "f7367a4a2e82e370", 958 | "804745fe4ab4e68d" 959 | ] 960 | ] 961 | }, 962 | { 963 | "id": "7d36691afa95bc5a", 964 | "type": "change", 965 | "z": "1fbc83566a03a07b", 966 | "name": "reset", 967 | "rules": [ 968 | { 969 | "t": "set", 970 | "p": "payload", 971 | "pt": "msg", 972 | "to": "{\"image\":\"rpi-frambuesa.png\",\"clear\":false,\"reset\":true}", 973 | "tot": "json" 974 | } 975 | ], 976 | "action": "", 977 | "property": "", 978 | "from": "", 979 | "to": "", 980 | "reg": false, 981 | "x": 170, 982 | "y": 100, 983 | "wires": [ 984 | [ 985 | "405f47e89e436e5e", 986 | "99e20edf0916b858" 987 | ] 988 | ] 989 | }, 990 | { 991 | "id": "99e20edf0916b858", 992 | "type": "delay", 993 | "z": "1fbc83566a03a07b", 994 | "name": "delay", 995 | "pauseType": "delay", 996 | "timeout": "10", 997 | "timeoutUnits": "milliseconds", 998 | "rate": "1", 999 | "nbRateUnits": "1", 1000 | "rateUnits": "second", 1001 | "randomFirst": "1", 1002 | "randomLast": "5", 1003 | "randomUnits": "seconds", 1004 | "drop": false, 1005 | "allowrate": false, 1006 | "outputs": 1, 1007 | "x": 290, 1008 | "y": 160, 1009 | "wires": [ 1010 | [ 1011 | "5f61107fede7fc57" 1012 | ] 1013 | ] 1014 | }, 1015 | { 1016 | "id": "bf0b31ad452185bc", 1017 | "type": "tab", 1018 | "label": "oled samples", 1019 | "disabled": false, 1020 | "info": "", 1021 | "env": [] 1022 | }, 1023 | { 1024 | "id": "07a9d6f4b3da2c25", 1025 | "type": "inject", 1026 | "z": "bf0b31ad452185bc", 1027 | "name": "", 1028 | "props": [], 1029 | "repeat": "", 1030 | "crontab": "", 1031 | "once": true, 1032 | "onceDelay": 0.1, 1033 | "topic": "", 1034 | "x": 210, 1035 | "y": 380, 1036 | "wires": [ 1037 | [ 1038 | "bd40e78e5e161fb7", 1039 | "c82ea57b5b2cc36b" 1040 | ] 1041 | ] 1042 | }, 1043 | { 1044 | "id": "4ae37cbd5b043d72", 1045 | "type": "inject", 1046 | "z": "bf0b31ad452185bc", 1047 | "name": "", 1048 | "props": [ 1049 | { 1050 | "p": "payload.x", 1051 | "v": "1", 1052 | "vt": "num" 1053 | }, 1054 | { 1055 | "p": "payload.y", 1056 | "v": "16", 1057 | "vt": "num" 1058 | }, 1059 | { 1060 | "p": "payload.w", 1061 | "v": "128", 1062 | "vt": "num" 1063 | }, 1064 | { 1065 | "p": "payload.h", 1066 | "v": "64", 1067 | "vt": "num" 1068 | }, 1069 | { 1070 | "p": "payload.color", 1071 | "v": "1", 1072 | "vt": "num" 1073 | } 1074 | ], 1075 | "repeat": "", 1076 | "crontab": "", 1077 | "once": false, 1078 | "onceDelay": 0.1, 1079 | "topic": "", 1080 | "x": 190, 1081 | "y": 560, 1082 | "wires": [ 1083 | [ 1084 | "755b5638a256dd79" 1085 | ] 1086 | ] 1087 | }, 1088 | { 1089 | "id": "936252af3768eb24", 1090 | "type": "inject", 1091 | "z": "bf0b31ad452185bc", 1092 | "name": "", 1093 | "props": [ 1094 | { 1095 | "p": "payload.x", 1096 | "v": "1", 1097 | "vt": "num" 1098 | }, 1099 | { 1100 | "p": "payload.y", 1101 | "v": "11", 1102 | "vt": "num" 1103 | }, 1104 | { 1105 | "p": "payload.p", 1106 | "v": "75", 1107 | "vt": "num" 1108 | }, 1109 | { 1110 | "p": "payload" 1111 | } 1112 | ], 1113 | "repeat": "", 1114 | "crontab": "", 1115 | "once": false, 1116 | "onceDelay": 0.1, 1117 | "topic": "", 1118 | "payload": "{\"x\":1,\"y\":1,\"p\":75}", 1119 | "payloadType": "json", 1120 | "x": 230, 1121 | "y": 480, 1122 | "wires": [ 1123 | [ 1124 | "22de7b1191839f21" 1125 | ] 1126 | ] 1127 | }, 1128 | { 1129 | "id": "ac35aea012b892de", 1130 | "type": "inject", 1131 | "z": "bf0b31ad452185bc", 1132 | "name": "", 1133 | "props": [ 1134 | { 1135 | "p": "payload" 1136 | } 1137 | ], 1138 | "repeat": "", 1139 | "crontab": "", 1140 | "once": false, 1141 | "onceDelay": "0.15", 1142 | "topic": "", 1143 | "payload": "{\"x\":2,\"y\":18,\"w\":125,\"h\":45,\"color\":0}", 1144 | "payloadType": "json", 1145 | "x": 190, 1146 | "y": 640, 1147 | "wires": [ 1148 | [ 1149 | "755b5638a256dd79" 1150 | ] 1151 | ] 1152 | }, 1153 | { 1154 | "id": "8d4826f5f49d11ad", 1155 | "type": "inject", 1156 | "z": "bf0b31ad452185bc", 1157 | "name": "", 1158 | "props": [ 1159 | { 1160 | "p": "payload.x", 1161 | "v": "40", 1162 | "vt": "num" 1163 | }, 1164 | { 1165 | "p": "payload.y", 1166 | "v": "11", 1167 | "vt": "num" 1168 | }, 1169 | { 1170 | "p": "payload.p", 1171 | "v": "75", 1172 | "vt": "num" 1173 | }, 1174 | { 1175 | "p": "payload" 1176 | } 1177 | ], 1178 | "repeat": "", 1179 | "crontab": "", 1180 | "once": false, 1181 | "onceDelay": 0.1, 1182 | "topic": "", 1183 | "payload": "{\"x\":108,\"y\":1,\"p\":25}", 1184 | "payloadType": "json", 1185 | "x": 180, 1186 | "y": 440, 1187 | "wires": [ 1188 | [ 1189 | "f0039e7ebb3ba50e" 1190 | ] 1191 | ] 1192 | }, 1193 | { 1194 | "id": "4673fbee4a4bcf61", 1195 | "type": "inject", 1196 | "z": "bf0b31ad452185bc", 1197 | "name": "", 1198 | "props": [ 1199 | { 1200 | "p": "payload" 1201 | } 1202 | ], 1203 | "repeat": "", 1204 | "crontab": "", 1205 | "once": false, 1206 | "onceDelay": "0.3", 1207 | "topic": "", 1208 | "payload": "{\"size\":2,\"x\":4,\"y\":1,\"text\":\"Rpi4 Status\"}", 1209 | "payloadType": "json", 1210 | "x": 210, 1211 | "y": 720, 1212 | "wires": [ 1213 | [ 1214 | "de5f61596848a2ea" 1215 | ] 1216 | ] 1217 | }, 1218 | { 1219 | "id": "b968d9118952720b", 1220 | "type": "inject", 1221 | "z": "bf0b31ad452185bc", 1222 | "name": "", 1223 | "props": [ 1224 | { 1225 | "p": "payload" 1226 | } 1227 | ], 1228 | "repeat": "", 1229 | "crontab": "", 1230 | "once": false, 1231 | "onceDelay": "0.3", 1232 | "topic": "", 1233 | "payload": "{\"size\":1,\"x\":4,\"y\":9,\"text\":\"Node Red Oled 2\"}", 1234 | "payloadType": "json", 1235 | "x": 210, 1236 | "y": 760, 1237 | "wires": [ 1238 | [ 1239 | "de5f61596848a2ea" 1240 | ] 1241 | ] 1242 | }, 1243 | { 1244 | "id": "935d0889a51def30", 1245 | "type": "inject", 1246 | "z": "bf0b31ad452185bc", 1247 | "name": "", 1248 | "props": [ 1249 | { 1250 | "p": "payload" 1251 | } 1252 | ], 1253 | "repeat": "", 1254 | "crontab": "", 1255 | "once": false, 1256 | "onceDelay": "0.3", 1257 | "topic": "", 1258 | "payload": "{\"size\":1,\"x\":4,\"y\":17,\"text\":\"Node Red Oled 3\"}", 1259 | "payloadType": "json", 1260 | "x": 210, 1261 | "y": 800, 1262 | "wires": [ 1263 | [ 1264 | "de5f61596848a2ea" 1265 | ] 1266 | ] 1267 | }, 1268 | { 1269 | "id": "e79c59c297280273", 1270 | "type": "inject", 1271 | "z": "bf0b31ad452185bc", 1272 | "name": "", 1273 | "props": [ 1274 | { 1275 | "p": "payload" 1276 | } 1277 | ], 1278 | "repeat": "", 1279 | "crontab": "", 1280 | "once": false, 1281 | "onceDelay": "0.3", 1282 | "topic": "", 1283 | "payload": "{\"size\":1,\"x\":4,\"y\":25,\"text\":\"Node Red Oled 4\"}", 1284 | "payloadType": "json", 1285 | "x": 210, 1286 | "y": 840, 1287 | "wires": [ 1288 | [ 1289 | "de5f61596848a2ea" 1290 | ] 1291 | ] 1292 | }, 1293 | { 1294 | "id": "682124b45f1a8f76", 1295 | "type": "inject", 1296 | "z": "bf0b31ad452185bc", 1297 | "name": "", 1298 | "props": [ 1299 | { 1300 | "p": "payload" 1301 | } 1302 | ], 1303 | "repeat": "", 1304 | "crontab": "", 1305 | "once": false, 1306 | "onceDelay": 0.1, 1307 | "topic": "", 1308 | "payload": "false", 1309 | "payloadType": "jsonata", 1310 | "x": 210, 1311 | "y": 1220, 1312 | "wires": [ 1313 | [ 1314 | "208d7cb9e935e59b" 1315 | ] 1316 | ] 1317 | }, 1318 | { 1319 | "id": "471c8acc563365bf", 1320 | "type": "inject", 1321 | "z": "bf0b31ad452185bc", 1322 | "name": "", 1323 | "props": [ 1324 | { 1325 | "p": "payload" 1326 | } 1327 | ], 1328 | "repeat": "", 1329 | "crontab": "", 1330 | "once": false, 1331 | "onceDelay": 0.1, 1332 | "topic": "", 1333 | "payload": "true", 1334 | "payloadType": "jsonata", 1335 | "x": 210, 1336 | "y": 1180, 1337 | "wires": [ 1338 | [ 1339 | "208d7cb9e935e59b" 1340 | ] 1341 | ] 1342 | }, 1343 | { 1344 | "id": "786043206e2df144", 1345 | "type": "inject", 1346 | "z": "bf0b31ad452185bc", 1347 | "name": "izq", 1348 | "props": [ 1349 | { 1350 | "p": "payload" 1351 | } 1352 | ], 1353 | "repeat": "", 1354 | "crontab": "", 1355 | "once": false, 1356 | "onceDelay": 0.1, 1357 | "topic": "", 1358 | "payload": "{\"direction\":\"left\",\"start\":0,\"stop\":15}", 1359 | "payloadType": "json", 1360 | "x": 990, 1361 | "y": 1540, 1362 | "wires": [ 1363 | [ 1364 | "c373b526da23d731" 1365 | ] 1366 | ] 1367 | }, 1368 | { 1369 | "id": "13a4bb2ce26456e8", 1370 | "type": "inject", 1371 | "z": "bf0b31ad452185bc", 1372 | "name": "", 1373 | "props": [ 1374 | { 1375 | "p": "payload" 1376 | } 1377 | ], 1378 | "repeat": "", 1379 | "crontab": "", 1380 | "once": false, 1381 | "onceDelay": 0.1, 1382 | "topic": "", 1383 | "payload": "false", 1384 | "payloadType": "jsonata", 1385 | "x": 190, 1386 | "y": 1380, 1387 | "wires": [ 1388 | [ 1389 | "d8e1d6260fea6b1a" 1390 | ] 1391 | ] 1392 | }, 1393 | { 1394 | "id": "00ddb4fda913481a", 1395 | "type": "inject", 1396 | "z": "bf0b31ad452185bc", 1397 | "name": "", 1398 | "props": [ 1399 | { 1400 | "p": "payload" 1401 | } 1402 | ], 1403 | "repeat": "", 1404 | "crontab": "", 1405 | "once": false, 1406 | "onceDelay": 0.1, 1407 | "topic": "", 1408 | "payload": "true", 1409 | "payloadType": "jsonata", 1410 | "x": 190, 1411 | "y": 1340, 1412 | "wires": [ 1413 | [ 1414 | "d8e1d6260fea6b1a" 1415 | ] 1416 | ] 1417 | }, 1418 | { 1419 | "id": "8bc1b8326ba8e64d", 1420 | "type": "inject", 1421 | "z": "bf0b31ad452185bc", 1422 | "name": "", 1423 | "props": [ 1424 | { 1425 | "p": "payload" 1426 | } 1427 | ], 1428 | "repeat": "", 1429 | "crontab": "", 1430 | "once": false, 1431 | "onceDelay": "0.4", 1432 | "topic": "", 1433 | "payload": "{\"x0\":1,\"y0\":1,\"x1\":128,\"y1\":1,\"color\":1}", 1434 | "payloadType": "json", 1435 | "x": 150, 1436 | "y": 1460, 1437 | "wires": [ 1438 | [ 1439 | "5ef56d42c580fb3f" 1440 | ] 1441 | ] 1442 | }, 1443 | { 1444 | "id": "69d5192171f54064", 1445 | "type": "inject", 1446 | "z": "bf0b31ad452185bc", 1447 | "name": "", 1448 | "props": [ 1449 | { 1450 | "p": "payload" 1451 | } 1452 | ], 1453 | "repeat": "", 1454 | "crontab": "", 1455 | "once": false, 1456 | "onceDelay": "0.4", 1457 | "topic": "", 1458 | "payload": "{\"x0\":4,\"y0\":8,\"x1\":128,\"y1\":8,\"color\":1}", 1459 | "payloadType": "json", 1460 | "x": 150, 1461 | "y": 1520, 1462 | "wires": [ 1463 | [ 1464 | "5ef56d42c580fb3f" 1465 | ] 1466 | ] 1467 | }, 1468 | { 1469 | "id": "51984429dbf1fb8c", 1470 | "type": "inject", 1471 | "z": "bf0b31ad452185bc", 1472 | "name": "der", 1473 | "props": [ 1474 | { 1475 | "p": "payload" 1476 | } 1477 | ], 1478 | "repeat": "", 1479 | "crontab": "", 1480 | "once": false, 1481 | "onceDelay": 0.1, 1482 | "topic": "", 1483 | "payload": "{\"direction\":\"right\",\"start\":0,\"stop\":15}", 1484 | "payloadType": "json", 1485 | "x": 990, 1486 | "y": 1580, 1487 | "wires": [ 1488 | [ 1489 | "c373b526da23d731" 1490 | ] 1491 | ] 1492 | }, 1493 | { 1494 | "id": "7f2a9ef032898730", 1495 | "type": "inject", 1496 | "z": "bf0b31ad452185bc", 1497 | "name": "", 1498 | "props": [ 1499 | { 1500 | "p": "payload" 1501 | } 1502 | ], 1503 | "repeat": "", 1504 | "crontab": "", 1505 | "once": false, 1506 | "onceDelay": 0.1, 1507 | "topic": "", 1508 | "payload": "true", 1509 | "payloadType": "bool", 1510 | "x": 730, 1511 | "y": 1200, 1512 | "wires": [ 1513 | [ 1514 | "e4cbe25ba19dee46" 1515 | ] 1516 | ] 1517 | }, 1518 | { 1519 | "id": "b46cc6f140789827", 1520 | "type": "inject", 1521 | "z": "bf0b31ad452185bc", 1522 | "name": "", 1523 | "props": [ 1524 | { 1525 | "p": "payload" 1526 | } 1527 | ], 1528 | "repeat": "", 1529 | "crontab": "", 1530 | "once": false, 1531 | "onceDelay": 0.1, 1532 | "topic": "", 1533 | "payload": "false", 1534 | "payloadType": "bool", 1535 | "x": 730, 1536 | "y": 1260, 1537 | "wires": [ 1538 | [ 1539 | "3da681d564c2227b" 1540 | ] 1541 | ] 1542 | }, 1543 | { 1544 | "id": "5776395cdd888417", 1545 | "type": "inject", 1546 | "z": "bf0b31ad452185bc", 1547 | "name": "stop", 1548 | "props": [ 1549 | { 1550 | "p": "payload" 1551 | } 1552 | ], 1553 | "repeat": "", 1554 | "crontab": "", 1555 | "once": false, 1556 | "onceDelay": 0.1, 1557 | "topic": "", 1558 | "payload": "false", 1559 | "payloadType": "bool", 1560 | "x": 990, 1561 | "y": 1620, 1562 | "wires": [ 1563 | [ 1564 | "c373b526da23d731" 1565 | ] 1566 | ] 1567 | }, 1568 | { 1569 | "id": "417be58331edbc5d", 1570 | "type": "inject", 1571 | "z": "bf0b31ad452185bc", 1572 | "name": "left diagonal", 1573 | "props": [ 1574 | { 1575 | "p": "payload" 1576 | } 1577 | ], 1578 | "repeat": "", 1579 | "crontab": "", 1580 | "once": false, 1581 | "onceDelay": 0.1, 1582 | "topic": "", 1583 | "payload": "{\"direction\":\"left_diagonal\",\"start\":0,\"stop\":128}", 1584 | "payloadType": "json", 1585 | "x": 990, 1586 | "y": 1660, 1587 | "wires": [ 1588 | [ 1589 | "c373b526da23d731" 1590 | ] 1591 | ] 1592 | }, 1593 | { 1594 | "id": "a414c5831af96fc8", 1595 | "type": "inject", 1596 | "z": "bf0b31ad452185bc", 1597 | "name": "right diagonal", 1598 | "props": [ 1599 | { 1600 | "p": "payload" 1601 | } 1602 | ], 1603 | "repeat": "", 1604 | "crontab": "", 1605 | "once": false, 1606 | "onceDelay": 0.1, 1607 | "topic": "", 1608 | "payload": "{\"direction\":\"right_diagonal\",\"start\":0,\"stop\":128}", 1609 | "payloadType": "json", 1610 | "x": 990, 1611 | "y": 1700, 1612 | "wires": [ 1613 | [ 1614 | "c373b526da23d731" 1615 | ] 1616 | ] 1617 | }, 1618 | { 1619 | "id": "2ca2778e7718b8ff", 1620 | "type": "inject", 1621 | "z": "bf0b31ad452185bc", 1622 | "name": "", 1623 | "props": [ 1624 | { 1625 | "p": "payload" 1626 | } 1627 | ], 1628 | "repeat": "", 1629 | "crontab": "", 1630 | "once": false, 1631 | "onceDelay": "0.4", 1632 | "topic": "", 1633 | "payload": "{\"x0\":4,\"y0\":16,\"x1\":128,\"y1\":16,\"color\":1}", 1634 | "payloadType": "json", 1635 | "x": 150, 1636 | "y": 1580, 1637 | "wires": [ 1638 | [ 1639 | "5ef56d42c580fb3f" 1640 | ] 1641 | ] 1642 | }, 1643 | { 1644 | "id": "bc103bfaf1d301c0", 1645 | "type": "inject", 1646 | "z": "bf0b31ad452185bc", 1647 | "name": "", 1648 | "props": [ 1649 | { 1650 | "p": "payload" 1651 | } 1652 | ], 1653 | "repeat": "", 1654 | "crontab": "", 1655 | "once": false, 1656 | "onceDelay": "0.4", 1657 | "topic": "", 1658 | "payload": "{\"x0\":4,\"y0\":24,\"x1\":128,\"y1\":24,\"color\":1}", 1659 | "payloadType": "json", 1660 | "x": 150, 1661 | "y": 1640, 1662 | "wires": [ 1663 | [ 1664 | "5ef56d42c580fb3f" 1665 | ] 1666 | ] 1667 | }, 1668 | { 1669 | "id": "de5f61596848a2ea", 1670 | "type": "String", 1671 | "z": "bf0b31ad452185bc", 1672 | "name": "", 1673 | "display": "9a288fe6eaa83734", 1674 | "x": 410, 1675 | "y": 720, 1676 | "wires": [] 1677 | }, 1678 | { 1679 | "id": "bd40e78e5e161fb7", 1680 | "type": "Clear", 1681 | "z": "bf0b31ad452185bc", 1682 | "name": "oled", 1683 | "display": "9a288fe6eaa83734", 1684 | "x": 410, 1685 | "y": 380, 1686 | "wires": [] 1687 | }, 1688 | { 1689 | "id": "208d7cb9e935e59b", 1690 | "type": "Dimmed", 1691 | "z": "bf0b31ad452185bc", 1692 | "name": "", 1693 | "display": "9a288fe6eaa83734", 1694 | "x": 440, 1695 | "y": 1180, 1696 | "wires": [] 1697 | }, 1698 | { 1699 | "id": "d8e1d6260fea6b1a", 1700 | "type": "Invertion", 1701 | "z": "bf0b31ad452185bc", 1702 | "name": "", 1703 | "display": "9a288fe6eaa83734", 1704 | "x": 460, 1705 | "y": 1360, 1706 | "wires": [] 1707 | }, 1708 | { 1709 | "id": "e4cbe25ba19dee46", 1710 | "type": "Turn-on", 1711 | "z": "bf0b31ad452185bc", 1712 | "name": "", 1713 | "display": "9a288fe6eaa83734", 1714 | "x": 860, 1715 | "y": 1200, 1716 | "wires": [] 1717 | }, 1718 | { 1719 | "id": "3da681d564c2227b", 1720 | "type": "Turn-off", 1721 | "z": "bf0b31ad452185bc", 1722 | "name": "", 1723 | "display": "9a288fe6eaa83734", 1724 | "x": 860, 1725 | "y": 1260, 1726 | "wires": [] 1727 | }, 1728 | { 1729 | "id": "c0c23cdd744335f2", 1730 | "type": "Pixel", 1731 | "z": "bf0b31ad452185bc", 1732 | "name": "", 1733 | "display": "9a288fe6eaa83734", 1734 | "x": 450, 1735 | "y": 1280, 1736 | "wires": [] 1737 | }, 1738 | { 1739 | "id": "5ef56d42c580fb3f", 1740 | "type": "Line", 1741 | "z": "bf0b31ad452185bc", 1742 | "name": "", 1743 | "display": "9a288fe6eaa83734", 1744 | "x": 470, 1745 | "y": 1440, 1746 | "wires": [] 1747 | }, 1748 | { 1749 | "id": "755b5638a256dd79", 1750 | "type": "FillRectangle", 1751 | "z": "bf0b31ad452185bc", 1752 | "name": "", 1753 | "display": "9a288fe6eaa83734", 1754 | "x": 370, 1755 | "y": 580, 1756 | "wires": [] 1757 | }, 1758 | { 1759 | "id": "c373b526da23d731", 1760 | "type": "Scroll", 1761 | "z": "bf0b31ad452185bc", 1762 | "name": "", 1763 | "display": "9a288fe6eaa83734", 1764 | "x": 1230, 1765 | "y": 1560, 1766 | "wires": [] 1767 | }, 1768 | { 1769 | "id": "f0039e7ebb3ba50e", 1770 | "type": "Battery", 1771 | "z": "bf0b31ad452185bc", 1772 | "name": "", 1773 | "display": "9a288fe6eaa83734", 1774 | "x": 380, 1775 | "y": 440, 1776 | "wires": [] 1777 | }, 1778 | { 1779 | "id": "22de7b1191839f21", 1780 | "type": "Wifi", 1781 | "z": "bf0b31ad452185bc", 1782 | "name": "", 1783 | "display": "9a288fe6eaa83734", 1784 | "x": 390, 1785 | "y": 520, 1786 | "wires": [] 1787 | }, 1788 | { 1789 | "id": "3a326de3982f3ed4", 1790 | "type": "inject", 1791 | "z": "bf0b31ad452185bc", 1792 | "name": "", 1793 | "props": [ 1794 | { 1795 | "p": "payload" 1796 | } 1797 | ], 1798 | "repeat": "", 1799 | "crontab": "", 1800 | "once": false, 1801 | "onceDelay": "0.3", 1802 | "topic": "", 1803 | "payload": "{\"size\":1,\"x\":4,\"y\":33,\"text\":\"Node Red Oled 5\"}", 1804 | "payloadType": "json", 1805 | "x": 210, 1806 | "y": 880, 1807 | "wires": [ 1808 | [ 1809 | "de5f61596848a2ea" 1810 | ] 1811 | ] 1812 | }, 1813 | { 1814 | "id": "afbd4be0f1c0e41b", 1815 | "type": "inject", 1816 | "z": "bf0b31ad452185bc", 1817 | "name": "", 1818 | "props": [ 1819 | { 1820 | "p": "payload" 1821 | } 1822 | ], 1823 | "repeat": "", 1824 | "crontab": "", 1825 | "once": false, 1826 | "onceDelay": "0.3", 1827 | "topic": "", 1828 | "payload": "{\"size\":1,\"x\":4,\"y\":41,\"text\":\"Node Red Oled 6\"}", 1829 | "payloadType": "json", 1830 | "x": 210, 1831 | "y": 920, 1832 | "wires": [ 1833 | [ 1834 | "de5f61596848a2ea" 1835 | ] 1836 | ] 1837 | }, 1838 | { 1839 | "id": "8828734b5b987d8d", 1840 | "type": "inject", 1841 | "z": "bf0b31ad452185bc", 1842 | "name": "", 1843 | "props": [ 1844 | { 1845 | "p": "payload" 1846 | } 1847 | ], 1848 | "repeat": "", 1849 | "crontab": "", 1850 | "once": false, 1851 | "onceDelay": "0.3", 1852 | "topic": "", 1853 | "payload": "{\"size\":1,\"x\":4,\"y\":47,\"text\":\"Node Red Oled 7\"}", 1854 | "payloadType": "json", 1855 | "x": 210, 1856 | "y": 960, 1857 | "wires": [ 1858 | [ 1859 | "de5f61596848a2ea" 1860 | ] 1861 | ] 1862 | }, 1863 | { 1864 | "id": "dd51280973463ea0", 1865 | "type": "inject", 1866 | "z": "bf0b31ad452185bc", 1867 | "name": "", 1868 | "props": [ 1869 | { 1870 | "p": "payload" 1871 | } 1872 | ], 1873 | "repeat": "", 1874 | "crontab": "", 1875 | "once": false, 1876 | "onceDelay": "0.3", 1877 | "topic": "", 1878 | "payload": "{\"size\":1,\"x\":4,\"y\":52,\"text\":\"Node Red Oled 8\"}", 1879 | "payloadType": "json", 1880 | "x": 210, 1881 | "y": 1000, 1882 | "wires": [ 1883 | [ 1884 | "de5f61596848a2ea" 1885 | ] 1886 | ] 1887 | }, 1888 | { 1889 | "id": "020b12f67ea97169", 1890 | "type": "inject", 1891 | "z": "bf0b31ad452185bc", 1892 | "name": "", 1893 | "props": [ 1894 | { 1895 | "p": "payload" 1896 | } 1897 | ], 1898 | "repeat": "", 1899 | "crontab": "", 1900 | "once": false, 1901 | "onceDelay": "0.4", 1902 | "topic": "", 1903 | "payload": "{\"x0\":4,\"y0\":32,\"x1\":128,\"y1\":32,\"color\":2}", 1904 | "payloadType": "json", 1905 | "x": 150, 1906 | "y": 1700, 1907 | "wires": [ 1908 | [ 1909 | "5ef56d42c580fb3f" 1910 | ] 1911 | ] 1912 | }, 1913 | { 1914 | "id": "d37ecb32bd9c728f", 1915 | "type": "inject", 1916 | "z": "bf0b31ad452185bc", 1917 | "name": "", 1918 | "props": [ 1919 | { 1920 | "p": "payload" 1921 | } 1922 | ], 1923 | "repeat": "", 1924 | "crontab": "", 1925 | "once": false, 1926 | "onceDelay": "0.4", 1927 | "topic": "", 1928 | "payload": "{\"x0\":4,\"y0\":40,\"x1\":128,\"y1\":40,\"color\":3}", 1929 | "payloadType": "json", 1930 | "x": 150, 1931 | "y": 1740, 1932 | "wires": [ 1933 | [ 1934 | "5ef56d42c580fb3f" 1935 | ] 1936 | ] 1937 | }, 1938 | { 1939 | "id": "65b84eb30e73667b", 1940 | "type": "inject", 1941 | "z": "bf0b31ad452185bc", 1942 | "name": "", 1943 | "props": [ 1944 | { 1945 | "p": "payload" 1946 | } 1947 | ], 1948 | "repeat": "", 1949 | "crontab": "", 1950 | "once": false, 1951 | "onceDelay": "0.4", 1952 | "topic": "", 1953 | "payload": "{\"x0\":1,\"y0\":48,\"x1\":128,\"y1\":48,\"color\":1}", 1954 | "payloadType": "json", 1955 | "x": 150, 1956 | "y": 1800, 1957 | "wires": [ 1958 | [ 1959 | "5ef56d42c580fb3f" 1960 | ] 1961 | ] 1962 | }, 1963 | { 1964 | "id": "490d3cfce37df301", 1965 | "type": "inject", 1966 | "z": "bf0b31ad452185bc", 1967 | "name": "", 1968 | "props": [ 1969 | { 1970 | "p": "payload" 1971 | } 1972 | ], 1973 | "repeat": "", 1974 | "crontab": "", 1975 | "once": false, 1976 | "onceDelay": "0.4", 1977 | "topic": "", 1978 | "payload": "{\"x0\":1,\"y0\":56,\"x1\":128,\"y1\":56,\"color\":1}", 1979 | "payloadType": "json", 1980 | "x": 150, 1981 | "y": 1860, 1982 | "wires": [ 1983 | [ 1984 | "5ef56d42c580fb3f" 1985 | ] 1986 | ] 1987 | }, 1988 | { 1989 | "id": "36934ae7f9982316", 1990 | "type": "inject", 1991 | "z": "bf0b31ad452185bc", 1992 | "name": "izq", 1993 | "props": [ 1994 | { 1995 | "p": "payload" 1996 | } 1997 | ], 1998 | "repeat": "", 1999 | "crontab": "", 2000 | "once": false, 2001 | "onceDelay": 0.1, 2002 | "topic": "", 2003 | "payload": "{\"direction\":\"left\",\"start\":0,\"stop\":14}", 2004 | "payloadType": "json", 2005 | "x": 990, 2006 | "y": 1760, 2007 | "wires": [ 2008 | [ 2009 | "c373b526da23d731" 2010 | ] 2011 | ] 2012 | }, 2013 | { 2014 | "id": "069f558326551615", 2015 | "type": "inject", 2016 | "z": "bf0b31ad452185bc", 2017 | "name": "izq", 2018 | "props": [ 2019 | { 2020 | "p": "payload" 2021 | } 2022 | ], 2023 | "repeat": "", 2024 | "crontab": "", 2025 | "once": false, 2026 | "onceDelay": 0.1, 2027 | "topic": "", 2028 | "payload": "{\"direction\":\"left\",\"start\":0,\"stop\":1}", 2029 | "payloadType": "json", 2030 | "x": 990, 2031 | "y": 1820, 2032 | "wires": [ 2033 | [ 2034 | "c373b526da23d731" 2035 | ] 2036 | ] 2037 | }, 2038 | { 2039 | "id": "126b9378898419f7", 2040 | "type": "inject", 2041 | "z": "bf0b31ad452185bc", 2042 | "name": "izq", 2043 | "props": [ 2044 | { 2045 | "p": "payload" 2046 | } 2047 | ], 2048 | "repeat": "", 2049 | "crontab": "", 2050 | "once": false, 2051 | "onceDelay": 0.1, 2052 | "topic": "", 2053 | "payload": "{\"direction\":\"right\",\"start\":0,\"stop\":1}", 2054 | "payloadType": "json", 2055 | "x": 990, 2056 | "y": 1880, 2057 | "wires": [ 2058 | [ 2059 | "c373b526da23d731" 2060 | ] 2061 | ] 2062 | }, 2063 | { 2064 | "id": "cfbb21f83b2e7925", 2065 | "type": "inject", 2066 | "z": "bf0b31ad452185bc", 2067 | "name": "OledImage", 2068 | "props": [ 2069 | { 2070 | "p": "payload" 2071 | } 2072 | ], 2073 | "repeat": "", 2074 | "crontab": "", 2075 | "once": false, 2076 | "onceDelay": 0.1, 2077 | "topic": "", 2078 | "payload": "{\"image\":\"OledImage.png\",\"x\":20,\"y\":20}", 2079 | "payloadType": "json", 2080 | "x": 620, 2081 | "y": 620, 2082 | "wires": [ 2083 | [ 2084 | "e99f4e7de43e6338" 2085 | ] 2086 | ] 2087 | }, 2088 | { 2089 | "id": "e99f4e7de43e6338", 2090 | "type": "Image", 2091 | "z": "bf0b31ad452185bc", 2092 | "name": "", 2093 | "display": "9a288fe6eaa83734", 2094 | "x": 810, 2095 | "y": 620, 2096 | "wires": [] 2097 | }, 2098 | { 2099 | "id": "df479b395aa26bfa", 2100 | "type": "inject", 2101 | "z": "bf0b31ad452185bc", 2102 | "name": "WaterBrain", 2103 | "props": [ 2104 | { 2105 | "p": "payload" 2106 | } 2107 | ], 2108 | "repeat": "", 2109 | "crontab": "", 2110 | "once": false, 2111 | "onceDelay": 0.1, 2112 | "topic": "", 2113 | "payload": "{\"image\":\"/home/waterbrain/.node-red/node_modules/node-red-contrib-oled/resources/WaterBrain.png\",\"clear\":true}", 2114 | "payloadType": "json", 2115 | "x": 620, 2116 | "y": 560, 2117 | "wires": [ 2118 | [ 2119 | "e99f4e7de43e6338" 2120 | ] 2121 | ] 2122 | }, 2123 | { 2124 | "id": "fd8ced2e30b53177", 2125 | "type": "inject", 2126 | "z": "bf0b31ad452185bc", 2127 | "name": "raspberrypi-logo.png", 2128 | "props": [ 2129 | { 2130 | "p": "payload" 2131 | } 2132 | ], 2133 | "repeat": "", 2134 | "crontab": "", 2135 | "once": false, 2136 | "onceDelay": 0.1, 2137 | "topic": "", 2138 | "payload": "{\"image\":\"raspberrypi-logo.png\",\"x\":44,\"y\":17,\"clear\":true}", 2139 | "payloadType": "json", 2140 | "x": 640, 2141 | "y": 840, 2142 | "wires": [ 2143 | [ 2144 | "e99f4e7de43e6338" 2145 | ] 2146 | ] 2147 | }, 2148 | { 2149 | "id": "868d09d6472b4a05", 2150 | "type": "inject", 2151 | "z": "bf0b31ad452185bc", 2152 | "name": "rpi-frambuesa-blanco", 2153 | "props": [ 2154 | { 2155 | "p": "payload" 2156 | } 2157 | ], 2158 | "repeat": "", 2159 | "crontab": "", 2160 | "once": false, 2161 | "onceDelay": 0.1, 2162 | "topic": "", 2163 | "payload": "{\"image\":\"rpi-frambuesa.png\",\"x\":0,\"y\":10,\"clear\":true,\"animated\":true}", 2164 | "payloadType": "json", 2165 | "x": 640, 2166 | "y": 900, 2167 | "wires": [ 2168 | [ 2169 | "e99f4e7de43e6338" 2170 | ] 2171 | ] 2172 | }, 2173 | { 2174 | "id": "31c4f84f1c3a38db", 2175 | "type": "inject", 2176 | "z": "bf0b31ad452185bc", 2177 | "name": "OledImage", 2178 | "props": [ 2179 | { 2180 | "p": "payload" 2181 | } 2182 | ], 2183 | "repeat": "", 2184 | "crontab": "", 2185 | "once": false, 2186 | "onceDelay": 0.1, 2187 | "topic": "", 2188 | "payload": "{\"image\":\"OledImage.png\",\"x\":0,\"y\":0}", 2189 | "payloadType": "json", 2190 | "x": 600, 2191 | "y": 500, 2192 | "wires": [ 2193 | [ 2194 | "e99f4e7de43e6338" 2195 | ] 2196 | ] 2197 | }, 2198 | { 2199 | "id": "08b36b478609356f", 2200 | "type": "inject", 2201 | "z": "bf0b31ad452185bc", 2202 | "name": "noexiste", 2203 | "props": [ 2204 | { 2205 | "p": "payload" 2206 | } 2207 | ], 2208 | "repeat": "", 2209 | "crontab": "", 2210 | "once": false, 2211 | "onceDelay": 0.1, 2212 | "topic": "", 2213 | "payload": "{\"image\":\"notafile.png\"}", 2214 | "payloadType": "json", 2215 | "x": 600, 2216 | "y": 440, 2217 | "wires": [ 2218 | [ 2219 | "e99f4e7de43e6338" 2220 | ] 2221 | ] 2222 | }, 2223 | { 2224 | "id": "c23299e50ac0dd91", 2225 | "type": "inject", 2226 | "z": "bf0b31ad452185bc", 2227 | "name": "", 2228 | "props": [ 2229 | { 2230 | "p": "payload" 2231 | } 2232 | ], 2233 | "repeat": "", 2234 | "crontab": "", 2235 | "once": false, 2236 | "onceDelay": "0.4", 2237 | "topic": "", 2238 | "payload": "{\"size\":1,\"x\":4,\"y\":52,\"text\":\"012345678901234567890123456789\"}", 2239 | "payloadType": "json", 2240 | "x": 210, 2241 | "y": 1060, 2242 | "wires": [ 2243 | [ 2244 | "de5f61596848a2ea" 2245 | ] 2246 | ] 2247 | }, 2248 | { 2249 | "id": "14ae746c4c98d3d9", 2250 | "type": "inject", 2251 | "z": "bf0b31ad452185bc", 2252 | "name": "OledImage false", 2253 | "props": [ 2254 | { 2255 | "p": "payload" 2256 | } 2257 | ], 2258 | "repeat": "", 2259 | "crontab": "", 2260 | "once": false, 2261 | "onceDelay": 0.1, 2262 | "topic": "", 2263 | "payload": "{\"image\": \"rpi-frambuesa.png\",\"clear\":false,\"animated\":false}", 2264 | "payloadType": "json", 2265 | "x": 640, 2266 | "y": 760, 2267 | "wires": [ 2268 | [ 2269 | "e99f4e7de43e6338" 2270 | ] 2271 | ] 2272 | }, 2273 | { 2274 | "id": "764e64b272921237", 2275 | "type": "inject", 2276 | "z": "bf0b31ad452185bc", 2277 | "name": "OledImage rest", 2278 | "props": [ 2279 | { 2280 | "p": "payload" 2281 | } 2282 | ], 2283 | "repeat": "", 2284 | "crontab": "", 2285 | "once": false, 2286 | "onceDelay": 0.1, 2287 | "topic": "", 2288 | "payload": "{\"image\":\"rpi-frambuesa.png\",\"clear\":false,\"reset\":true}", 2289 | "payloadType": "json", 2290 | "x": 620, 2291 | "y": 800, 2292 | "wires": [ 2293 | [ 2294 | "e99f4e7de43e6338", 2295 | "586965f196a007ab" 2296 | ] 2297 | ] 2298 | }, 2299 | { 2300 | "id": "b673f1ff78e42e4f", 2301 | "type": "change", 2302 | "z": "bf0b31ad452185bc", 2303 | "name": "animated", 2304 | "rules": [ 2305 | { 2306 | "t": "set", 2307 | "p": "animated", 2308 | "pt": "global", 2309 | "to": "true", 2310 | "tot": "bool" 2311 | } 2312 | ], 2313 | "action": "", 2314 | "property": "", 2315 | "from": "", 2316 | "to": "", 2317 | "reg": false, 2318 | "x": 900, 2319 | "y": 700, 2320 | "wires": [ 2321 | [] 2322 | ] 2323 | }, 2324 | { 2325 | "id": "586965f196a007ab", 2326 | "type": "change", 2327 | "z": "bf0b31ad452185bc", 2328 | "name": "animated", 2329 | "rules": [ 2330 | { 2331 | "t": "set", 2332 | "p": "animated", 2333 | "pt": "global", 2334 | "to": "false", 2335 | "tot": "bool" 2336 | } 2337 | ], 2338 | "action": "", 2339 | "property": "", 2340 | "from": "", 2341 | "to": "", 2342 | "reg": false, 2343 | "x": 1000, 2344 | "y": 800, 2345 | "wires": [ 2346 | [] 2347 | ] 2348 | }, 2349 | { 2350 | "id": "c82ea57b5b2cc36b", 2351 | "type": "change", 2352 | "z": "bf0b31ad452185bc", 2353 | "name": "animated", 2354 | "rules": [ 2355 | { 2356 | "t": "set", 2357 | "p": "animated", 2358 | "pt": "global", 2359 | "to": "false", 2360 | "tot": "bool" 2361 | }, 2362 | { 2363 | "t": "set", 2364 | "p": "payload", 2365 | "pt": "msg", 2366 | "to": "{ \"image\": \"/home/waterbrain/rpi frambuesa.png\", \"clear\": false, \"reset\": true }", 2367 | "tot": "json" 2368 | } 2369 | ], 2370 | "action": "", 2371 | "property": "", 2372 | "from": "", 2373 | "to": "", 2374 | "reg": false, 2375 | "x": 400, 2376 | "y": 320, 2377 | "wires": [ 2378 | [ 2379 | "e99f4e7de43e6338" 2380 | ] 2381 | ] 2382 | }, 2383 | { 2384 | "id": "6d7e3623f4f02b9f", 2385 | "type": "delay", 2386 | "z": "bf0b31ad452185bc", 2387 | "name": "", 2388 | "pauseType": "delay", 2389 | "timeout": "2", 2390 | "timeoutUnits": "seconds", 2391 | "rate": "1", 2392 | "nbRateUnits": "1", 2393 | "rateUnits": "second", 2394 | "randomFirst": "1", 2395 | "randomLast": "5", 2396 | "randomUnits": "seconds", 2397 | "drop": false, 2398 | "allowrate": false, 2399 | "outputs": 1, 2400 | "x": 820, 2401 | "y": 660, 2402 | "wires": [ 2403 | [ 2404 | "e99f4e7de43e6338" 2405 | ] 2406 | ] 2407 | }, 2408 | { 2409 | "id": "c87ab31dea7dae93", 2410 | "type": "inject", 2411 | "z": "bf0b31ad452185bc", 2412 | "name": "OledImage true", 2413 | "props": [ 2414 | { 2415 | "p": "payload" 2416 | } 2417 | ], 2418 | "repeat": "", 2419 | "crontab": "", 2420 | "once": false, 2421 | "onceDelay": 0.1, 2422 | "topic": "", 2423 | "payload": "{\"image\":\"Oledrpi32x32.png\",\"clear\":true,\"animated\":true}", 2424 | "payloadType": "json", 2425 | "x": 600, 2426 | "y": 680, 2427 | "wires": [ 2428 | [ 2429 | "6d7e3623f4f02b9f", 2430 | "b673f1ff78e42e4f" 2431 | ] 2432 | ] 2433 | }, 2434 | { 2435 | "id": "6fb579570ff4bf4e", 2436 | "type": "inject", 2437 | "z": "bf0b31ad452185bc", 2438 | "name": "", 2439 | "props": [ 2440 | { 2441 | "p": "payload" 2442 | } 2443 | ], 2444 | "repeat": "", 2445 | "crontab": "", 2446 | "once": false, 2447 | "onceDelay": "2", 2448 | "topic": "", 2449 | "payload": "start", 2450 | "payloadType": "str", 2451 | "x": 150, 2452 | "y": 100, 2453 | "wires": [ 2454 | [ 2455 | "47e98459d676c813" 2456 | ] 2457 | ] 2458 | }, 2459 | { 2460 | "id": "d1ce21e4c04caae5", 2461 | "type": "inject", 2462 | "z": "bf0b31ad452185bc", 2463 | "name": "", 2464 | "props": [ 2465 | { 2466 | "p": "payload" 2467 | } 2468 | ], 2469 | "repeat": "", 2470 | "crontab": "", 2471 | "once": false, 2472 | "onceDelay": 0.1, 2473 | "topic": "", 2474 | "payload": "stop", 2475 | "payloadType": "str", 2476 | "x": 150, 2477 | "y": 140, 2478 | "wires": [ 2479 | [ 2480 | "47e98459d676c813" 2481 | ] 2482 | ] 2483 | }, 2484 | { 2485 | "id": "47e98459d676c813", 2486 | "type": "subflow:1fbc83566a03a07b", 2487 | "z": "bf0b31ad452185bc", 2488 | "name": "raspi status", 2489 | "x": 330, 2490 | "y": 120, 2491 | "wires": [] 2492 | }, 2493 | { 2494 | "id": "52336f0d035c104b", 2495 | "type": "inject", 2496 | "z": "bf0b31ad452185bc", 2497 | "name": "yahaboom 102x16", 2498 | "props": [ 2499 | { 2500 | "p": "payload" 2501 | } 2502 | ], 2503 | "repeat": "", 2504 | "crontab": "", 2505 | "once": false, 2506 | "onceDelay": 0.1, 2507 | "topic": "", 2508 | "payload": "{\"image\":\"/home/waterbrain/yahabommlogo-2-102x16.png\",\"x\":0,\"y\":17,\"clear\":true,\"animated\":true}", 2509 | "payloadType": "json", 2510 | "x": 610, 2511 | "y": 960, 2512 | "wires": [ 2513 | [ 2514 | "e99f4e7de43e6338" 2515 | ] 2516 | ] 2517 | }, 2518 | { 2519 | "id": "9dc41c4b3675882a", 2520 | "type": "inject", 2521 | "z": "bf0b31ad452185bc", 2522 | "name": "yahaboom 128x20", 2523 | "props": [ 2524 | { 2525 | "p": "payload" 2526 | } 2527 | ], 2528 | "repeat": "", 2529 | "crontab": "", 2530 | "once": false, 2531 | "onceDelay": 0.1, 2532 | "topic": "", 2533 | "payload": "{\"image\":\"/home/waterbrain/yahabommlogo-2-128x20.png\",\"x\":1,\"y\":1,\"clear\":true,\"animated\":true}", 2534 | "payloadType": "json", 2535 | "x": 610, 2536 | "y": 1020, 2537 | "wires": [ 2538 | [ 2539 | "e99f4e7de43e6338" 2540 | ] 2541 | ] 2542 | }, 2543 | { 2544 | "id": "563fd1a5ecfd5fbd", 2545 | "type": "inject", 2546 | "z": "bf0b31ad452185bc", 2547 | "name": "", 2548 | "props": [ 2549 | { 2550 | "p": "payload" 2551 | } 2552 | ], 2553 | "repeat": "", 2554 | "crontab": "", 2555 | "once": false, 2556 | "onceDelay": "0.4", 2557 | "topic": "", 2558 | "payload": "{\"x0\":5,\"y0\":1,\"x1\":5,\"y1\":11,\"color\":1}", 2559 | "payloadType": "json", 2560 | "x": 470, 2561 | "y": 1540, 2562 | "wires": [ 2563 | [ 2564 | "5ef56d42c580fb3f" 2565 | ] 2566 | ] 2567 | }, 2568 | { 2569 | "id": "8af050e7e537ed15", 2570 | "type": "inject", 2571 | "z": "bf0b31ad452185bc", 2572 | "name": "", 2573 | "props": [ 2574 | { 2575 | "p": "payload" 2576 | } 2577 | ], 2578 | "repeat": "", 2579 | "crontab": "", 2580 | "once": false, 2581 | "onceDelay": "0.4", 2582 | "topic": "", 2583 | "payload": "{\"x0\":2,\"y0\":3,\"x1\":9,\"y1\":8,\"color\":1}", 2584 | "payloadType": "json", 2585 | "x": 470, 2586 | "y": 1600, 2587 | "wires": [ 2588 | [ 2589 | "5ef56d42c580fb3f" 2590 | ] 2591 | ] 2592 | }, 2593 | { 2594 | "id": "5a5a4ec71e11dca0", 2595 | "type": "inject", 2596 | "z": "bf0b31ad452185bc", 2597 | "name": "", 2598 | "props": [ 2599 | { 2600 | "p": "payload" 2601 | } 2602 | ], 2603 | "repeat": "", 2604 | "crontab": "", 2605 | "once": false, 2606 | "onceDelay": "0.4", 2607 | "topic": "", 2608 | "payload": "{\"x0\":2,\"y0\":9,\"x1\":8,\"y1\":3,\"color\":1}", 2609 | "payloadType": "json", 2610 | "x": 470, 2611 | "y": 1660, 2612 | "wires": [ 2613 | [ 2614 | "5ef56d42c580fb3f" 2615 | ] 2616 | ] 2617 | }, 2618 | { 2619 | "id": "c40cc8b82d9a6bf0", 2620 | "type": "inject", 2621 | "z": "bf0b31ad452185bc", 2622 | "name": "", 2623 | "props": [ 2624 | { 2625 | "p": "payload" 2626 | } 2627 | ], 2628 | "repeat": "", 2629 | "crontab": "", 2630 | "once": false, 2631 | "onceDelay": "0.4", 2632 | "topic": "", 2633 | "payload": "{\"x0\":5,\"y0\":1,\"x1\":9,\"y1\":3,\"color\":1}", 2634 | "payloadType": "json", 2635 | "x": 450, 2636 | "y": 1720, 2637 | "wires": [ 2638 | [ 2639 | "5ef56d42c580fb3f" 2640 | ] 2641 | ] 2642 | }, 2643 | { 2644 | "id": "6983eb20e1f4a828", 2645 | "type": "inject", 2646 | "z": "bf0b31ad452185bc", 2647 | "name": "", 2648 | "props": [ 2649 | { 2650 | "p": "payload" 2651 | } 2652 | ], 2653 | "repeat": "", 2654 | "crontab": "", 2655 | "once": false, 2656 | "onceDelay": "0.4", 2657 | "topic": "", 2658 | "payload": "{\"x0\":5,\"y0\":11,\"x1\":8,\"y1\":9,\"color\":1}", 2659 | "payloadType": "json", 2660 | "x": 450, 2661 | "y": 1780, 2662 | "wires": [ 2663 | [ 2664 | "5ef56d42c580fb3f" 2665 | ] 2666 | ] 2667 | }, 2668 | { 2669 | "id": "f147d4803529bcad", 2670 | "type": "Bluetooth", 2671 | "z": "bf0b31ad452185bc", 2672 | "name": "", 2673 | "display": "9a288fe6eaa83734", 2674 | "x": 800, 2675 | "y": 300, 2676 | "wires": [] 2677 | }, 2678 | { 2679 | "id": "8e3bb2d96c6c3e73", 2680 | "type": "inject", 2681 | "z": "bf0b31ad452185bc", 2682 | "name": "", 2683 | "props": [ 2684 | { 2685 | "p": "payload.x", 2686 | "v": "118", 2687 | "vt": "num" 2688 | }, 2689 | { 2690 | "p": "payload.y", 2691 | "v": "0", 2692 | "vt": "num" 2693 | } 2694 | ], 2695 | "repeat": "", 2696 | "crontab": "", 2697 | "once": false, 2698 | "onceDelay": 0.1, 2699 | "topic": "", 2700 | "x": 570, 2701 | "y": 260, 2702 | "wires": [ 2703 | [ 2704 | "f147d4803529bcad" 2705 | ] 2706 | ] 2707 | }, 2708 | { 2709 | "id": "3dd98a14985a9027", 2710 | "type": "inject", 2711 | "z": "bf0b31ad452185bc", 2712 | "name": "OledImage", 2713 | "props": [ 2714 | { 2715 | "p": "payload" 2716 | } 2717 | ], 2718 | "repeat": "", 2719 | "crontab": "", 2720 | "once": false, 2721 | "onceDelay": 0.1, 2722 | "topic": "", 2723 | "payload": "{\"image\":\"OledBluetooth.png\",\"x\":20,\"y\":20}", 2724 | "payloadType": "json", 2725 | "x": 620, 2726 | "y": 360, 2727 | "wires": [ 2728 | [ 2729 | "e99f4e7de43e6338" 2730 | ] 2731 | ] 2732 | }, 2733 | { 2734 | "id": "e378b344f9edd1c5", 2735 | "type": "inject", 2736 | "z": "bf0b31ad452185bc", 2737 | "name": "noexiste", 2738 | "props": [ 2739 | { 2740 | "p": "payload" 2741 | } 2742 | ], 2743 | "repeat": "", 2744 | "crontab": "", 2745 | "once": false, 2746 | "onceDelay": 0.1, 2747 | "topic": "", 2748 | "payload": "{\"image\":\"note.png\"}", 2749 | "payloadType": "json", 2750 | "x": 870, 2751 | "y": 439, 2752 | "wires": [ 2753 | [ 2754 | "e99f4e7de43e6338" 2755 | ] 2756 | ] 2757 | }, 2758 | { 2759 | "id": "24db6a17032e72ab", 2760 | "type": "i2c scan", 2761 | "z": "bf0b31ad452185bc", 2762 | "name": "", 2763 | "busno": "1", 2764 | "x": 1000, 2765 | "y": 100, 2766 | "wires": [ 2767 | [ 2768 | "8944fe1848d9fb9a" 2769 | ], 2770 | [ 2771 | "2cb52213899495b9" 2772 | ] 2773 | ] 2774 | }, 2775 | { 2776 | "id": "fb8ba2afb2031308", 2777 | "type": "inject", 2778 | "z": "bf0b31ad452185bc", 2779 | "name": "", 2780 | "props": [ 2781 | { 2782 | "p": "payload" 2783 | }, 2784 | { 2785 | "p": "topic", 2786 | "vt": "str" 2787 | } 2788 | ], 2789 | "repeat": "", 2790 | "crontab": "", 2791 | "once": false, 2792 | "onceDelay": 0.1, 2793 | "topic": "", 2794 | "payload": "", 2795 | "payloadType": "date", 2796 | "x": 800, 2797 | "y": 100, 2798 | "wires": [ 2799 | [ 2800 | "24db6a17032e72ab" 2801 | ] 2802 | ] 2803 | }, 2804 | { 2805 | "id": "8944fe1848d9fb9a", 2806 | "type": "debug", 2807 | "z": "bf0b31ad452185bc", 2808 | "name": "debug 3", 2809 | "active": true, 2810 | "tosidebar": true, 2811 | "console": false, 2812 | "tostatus": false, 2813 | "complete": "false", 2814 | "statusVal": "", 2815 | "statusType": "auto", 2816 | "x": 1200, 2817 | "y": 80, 2818 | "wires": [] 2819 | }, 2820 | { 2821 | "id": "2cb52213899495b9", 2822 | "type": "debug", 2823 | "z": "bf0b31ad452185bc", 2824 | "name": "debug 4", 2825 | "active": true, 2826 | "tosidebar": true, 2827 | "console": false, 2828 | "tostatus": false, 2829 | "complete": "false", 2830 | "statusVal": "", 2831 | "statusType": "auto", 2832 | "x": 1200, 2833 | "y": 140, 2834 | "wires": [] 2835 | }, 2836 | { 2837 | "id": "9a288fe6eaa83734", 2838 | "type": "oled-config", 2839 | "name": "oled", 2840 | "width": "128", 2841 | "height": "64", 2842 | "address": "0x3c" 2843 | } 2844 | ] -------------------------------------------------------------------------------- /examples/Example1/README.md: -------------------------------------------------------------------------------- 1 | node-red-contrib-oled example 2 | ============================= 3 | 4 | Node-Red node to talk to OLED displays, connected by i2c. 5 | 6 | ## An exaple to view diferent functions 7 | 8 | 9 | If it is not installed node-red-contrib-oled 10 | ``` 11 | npm install node-red-contrib-oled 12 | ``` 13 | 14 | ## Node dependencies 15 | 16 | - node-red-contrib-i2c 17 | ``` 18 | npm install node-red-contrib-i2c 19 | ``` 20 | 21 | - node-red-contrib-ovia-os 22 | ``` 23 | npm install node-red-contrib-ovia-os 24 | ``` -------------------------------------------------------------------------------- /examples/Example2/Flow1.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "8a8d2aa562fbdbf5", 4 | "type": "subflow", 5 | "name": "reloj", 6 | "info": "# Cloc simulation with nodered-contrib-oled\n", 7 | "category": "", 8 | "in": [ 9 | { 10 | "x": 20, 11 | "y": 240, 12 | "wires": [ 13 | { 14 | "id": "4b63bf9f2db38d28" 15 | } 16 | ] 17 | } 18 | ], 19 | "out": [], 20 | "env": [], 21 | "meta": { 22 | "module": "Clock", 23 | "version": "0.0.0", 24 | "author": "Antonio maza 0) {\n datePosition = parseInt(((128 - formatedDate.length * 7) / 2))\n flow.set(\"datePosition\", datePosition)\n } else {\n datePosition = 1\n flow.set(\"datePosition\", datePosition)\n }\n} \nif (oldFormatDate != formatedDate) {\n localDate = formatedDate;\n flow.set(\"oldFormatDate\" , formatedDate);\n} \nif (flow.get(\"zerouno\") === 0 || 0){\n flow.set(\"zerouno\", 1);\n //node.warn(\"cero\");\n msg.fill = \"green\";\n delay = \"no\";\n msg.delay = 1;\n msg.payload = { image: oledsb[10], x: shift + 31, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } } ,{ payload: statusMsg }]);\n msg.payload = { image: oledsb[10], x: shift + 66, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n/*\n msg.payload = { image: oledsb[hour1], x: shift + 1, y: 20 }\n node.send([msg,{ payload: delay }, { payload: statusMsg }]);\n msg.payload = { image: oledsb[hour2], x: shift + 15, y: 20 }\n node.send([msg, { payload: delay }, { payload: statusMsg }]);\n \n msg.payload = { image: oledsb[min1], x: shift + 35, y: 20 }\n node.send([msg, { payload: delay }, { payload: statusMsg }]);\n msg.payload = { image: oledsb[min2], x: shift + 50, y: 20 }\n node.send([msg, { payload: delay }, { payload: statusMsg }]);\n \n msg.payload = { image: oledsb[sec1], x: shift + 70, y: 20 }\n node.send([msg, { payload: delay }, { payload: statusMsg }]);\n msg.payload = { image: oledsb[sec2], x: shift + 85, y: 20 } */\n \n delay = \"yes\";\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n} else {\n flow.set(\"zerouno\", 0);\n //node.warn(\"uno\");\n msg.fill = \"reed\"\n delay = \"no\";\n msg.delay = 1;\n if (oldSec2 != sec2) {\n msg.payload = { image: \"OledClear.png\", x: shift + 86, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" }}, { payload: statusMsg }]);\n }\n if (oldSec1 != sec1) {\n msg.payload = { image: \"OledClear.png\", x: shift + 70, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n if (oldMin2 != min2) {\n msg.payload = { image: \"OledClear.png\", x: shift + 51, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n if (oldMin1 != min1) {\n msg.payload = { image: \"OledClear.png\", x: shift + 35, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n if (oldHour2 != hour2) {\n msg.payload = { image: \"OledClear.png\", x: shift + 16, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n }\n if (oldHour1 != hour1) {\n msg.payload = { image: \"OledClear.png\", x: shift , y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n }\n \n \n \n if (oldHour1 != hour1) {\n flow.set(\"oldHour1\", hour1)\n flow.set(\"oldHour\", hour)\n msg.payload = { image: oledsw[hour1], x: shift , y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n }\n if (oldHour2 != hour2) {\n flow.set(\"oldHour2\", hour2)\n flow.set(\"oldHour\", hour)\n msg.payload = { image: oledsw[hour2], x: shift + 16, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: localDate } }, { payload: statusMsg }]);\n }\n if (oldMin1 != min1) {\n flow.set(\"oldMin1\", min1)\n msg.payload = { image: oledsw[min1], x: shift + 35, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n if (oldMin2 != min2) {\n flow.set(\"oldMin2\", min2)\n msg.payload = { image: oledsw[min2], x: shift + 51, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n if (oldSec1 != sec1) {\n flow.set(\"oldSec1\", sec1)\n msg.payload = { image: oledsw[sec1], x: shift + 70, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n //node.warn(new Intl.DateTimeFormat('en-GB', { dateStyle: 'full'}).format(date));\n //node.warn(locale);\n //node.warn(new Intl.DateTimeFormat(locale, { dateStyle: 'full' }).format(date));\n \n }\n if (oldSec2 != sec2) {\n flow.set(\"oldSec2\", sec2)\n msg.payload = { image: oledsw[sec2], x: shift + 86, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n }\n msg.payload = { image: oledsw[10], x: shift + 31, y: 20 }\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n msg.payload = { image: oledsw[10], x: shift + 66, y: 20 }\n delay = \"yes\";\n node.send([msg, { payload: delay }, { payload: { size: 1, x: datePosition, y: 1, text: \"\" } }, { payload: statusMsg }]);\n /* oldHour1 = hour1;\n oldHour2 = hour2;\n oldMin1 = min1;\n oldMin2 = min2;\n oldSec1 = sec1;\n oldSec2 = sec2;\n oldHour = hour; */\n}\n\n//node.warn(\" oldHour: \" + oldHour + \" hour: \" + hour);", 48 | "outputs": 4, 49 | "noerr": 0, 50 | "initialize": "", 51 | "finalize": "", 52 | "libs": [], 53 | "x": 500, 54 | "y": 60, 55 | "wires": [ 56 | [ 57 | "8d65aa26ca962008" 58 | ], 59 | [ 60 | "df08159446f90ab8" 61 | ], 62 | [ 63 | "89986f4b2d71041e" 64 | ], 65 | [] 66 | ] 67 | }, 68 | { 69 | "id": "8d65aa26ca962008", 70 | "type": "Image", 71 | "z": "8a8d2aa562fbdbf5", 72 | "name": "", 73 | "display": "9a288fe6eaa83734", 74 | "x": 750, 75 | "y": 60, 76 | "wires": [] 77 | }, 78 | { 79 | "id": "4b63bf9f2db38d28", 80 | "type": "change", 81 | "z": "8a8d2aa562fbdbf5", 82 | "name": "rectangulo", 83 | "rules": [ 84 | { 85 | "t": "set", 86 | "p": "payload", 87 | "pt": "msg", 88 | "to": "{\"x\":0,\"y\":0,\"w\":128,\"h\":64,\"color\":0}", 89 | "tot": "json" 90 | } 91 | ], 92 | "action": "", 93 | "property": "", 94 | "from": "", 95 | "to": "", 96 | "reg": false, 97 | "x": 130, 98 | "y": 120, 99 | "wires": [ 100 | [ 101 | "ebf3639b90022072", 102 | "1ee08d082008fc59" 103 | ] 104 | ] 105 | }, 106 | { 107 | "id": "ebf3639b90022072", 108 | "type": "FillRectangle", 109 | "z": "8a8d2aa562fbdbf5", 110 | "name": "", 111 | "display": "9a288fe6eaa83734", 112 | "x": 370, 113 | "y": 300, 114 | "wires": [] 115 | }, 116 | { 117 | "id": "1e4c59eb68ba10e4", 118 | "type": "delay", 119 | "z": "8a8d2aa562fbdbf5", 120 | "name": "delay", 121 | "pauseType": "delay", 122 | "timeout": "10", 123 | "timeoutUnits": "milliseconds", 124 | "rate": "1", 125 | "nbRateUnits": "1", 126 | "rateUnits": "second", 127 | "randomFirst": "1", 128 | "randomLast": "5", 129 | "randomUnits": "seconds", 130 | "drop": false, 131 | "allowrate": false, 132 | "outputs": 1, 133 | "x": 130, 134 | "y": 340, 135 | "wires": [ 136 | [ 137 | "a9bfb27a6b47d245" 138 | ] 139 | ] 140 | }, 141 | { 142 | "id": "ef9ab7decd74b688", 143 | "type": "delay", 144 | "z": "8a8d2aa562fbdbf5", 145 | "name": "delay", 146 | "pauseType": "delay", 147 | "timeout": "250", 148 | "timeoutUnits": "milliseconds", 149 | "rate": "1", 150 | "nbRateUnits": "1", 151 | "rateUnits": "second", 152 | "randomFirst": "1", 153 | "randomLast": "5", 154 | "randomUnits": "seconds", 155 | "drop": false, 156 | "allowrate": false, 157 | "outputs": 1, 158 | "x": 490, 159 | "y": 220, 160 | "wires": [ 161 | [ 162 | "a9bfb27a6b47d245" 163 | ] 164 | ] 165 | }, 166 | { 167 | "id": "df08159446f90ab8", 168 | "type": "switch", 169 | "z": "8a8d2aa562fbdbf5", 170 | "name": "", 171 | "property": "payload", 172 | "propertyType": "msg", 173 | "rules": [ 174 | { 175 | "t": "eq", 176 | "v": "yes", 177 | "vt": "str" 178 | } 179 | ], 180 | "checkall": "true", 181 | "repair": false, 182 | "outputs": 1, 183 | "x": 410, 184 | "y": 160, 185 | "wires": [ 186 | [ 187 | "ef9ab7decd74b688" 188 | ] 189 | ] 190 | }, 191 | { 192 | "id": "9c7d16881bc44cbd", 193 | "type": "change", 194 | "z": "8a8d2aa562fbdbf5", 195 | "name": "rectangulo", 196 | "rules": [ 197 | { 198 | "t": "set", 199 | "p": "payload", 200 | "pt": "msg", 201 | "to": "{\"x\":0,\"y\":0,\"w\":128,\"h\":64,\"color\":0}", 202 | "tot": "json" 203 | } 204 | ], 205 | "action": "", 206 | "property": "", 207 | "from": "", 208 | "to": "", 209 | "reg": false, 210 | "x": 570, 211 | "y": 340, 212 | "wires": [ 213 | [ 214 | "ebf3639b90022072" 215 | ] 216 | ] 217 | }, 218 | { 219 | "id": "a90de0ecc15a7fd7", 220 | "type": "String", 221 | "z": "8a8d2aa562fbdbf5", 222 | "name": "", 223 | "display": "9a288fe6eaa83734", 224 | "x": 810, 225 | "y": 260, 226 | "wires": [] 227 | }, 228 | { 229 | "id": "50119f025e06acbc", 230 | "type": "debug", 231 | "z": "8a8d2aa562fbdbf5", 232 | "name": "debug 13", 233 | "active": true, 234 | "tosidebar": true, 235 | "console": false, 236 | "tostatus": false, 237 | "complete": "true", 238 | "targetType": "full", 239 | "statusVal": "", 240 | "statusType": "auto", 241 | "x": 920, 242 | "y": 120, 243 | "wires": [] 244 | }, 245 | { 246 | "id": "89986f4b2d71041e", 247 | "type": "switch", 248 | "z": "8a8d2aa562fbdbf5", 249 | "name": "", 250 | "property": "payload", 251 | "propertyType": "msg", 252 | "rules": [ 253 | { 254 | "t": "neq", 255 | "v": "\"\"", 256 | "vt": "str" 257 | } 258 | ], 259 | "checkall": "true", 260 | "repair": false, 261 | "outputs": 1, 262 | "x": 650, 263 | "y": 160, 264 | "wires": [ 265 | [ 266 | "a90de0ecc15a7fd7" 267 | ] 268 | ] 269 | }, 270 | { 271 | "id": "1ee08d082008fc59", 272 | "type": "function", 273 | "z": "8a8d2aa562fbdbf5", 274 | "name": "startup", 275 | "func": "flow.set(\"oldHour1\", -1);\nflow.set(\"oldHour\", -1); \nflow.set(\"oldHour2\", -1);\nflow.set(\"oldMin1\", -1);\nflow.set(\"oldMin2\", -1);\nflow.set(\"oldSec1\", -1);\nflow.set(\"oldSec2\", -1);\nflow.set(\"datePosition\", 1);\nreturn msg;", 276 | "outputs": 1, 277 | "noerr": 0, 278 | "initialize": "", 279 | "finalize": "", 280 | "libs": [], 281 | "x": 140, 282 | "y": 240, 283 | "wires": [ 284 | [ 285 | "1e4c59eb68ba10e4" 286 | ] 287 | ] 288 | }, 289 | { 290 | "id": "9a288fe6eaa83734", 291 | "type": "oled-config", 292 | "name": "oled", 293 | "width": "128", 294 | "height": "64", 295 | "address": "60" 296 | }, 297 | { 298 | "id": "dbfdd28e.d60f", 299 | "type": "tab", 300 | "label": "Clock sample", 301 | "disabled": false, 302 | "info": "" 303 | }, 304 | { 305 | "id": "dba7f72fb4129a93", 306 | "type": "subflow:8a8d2aa562fbdbf5", 307 | "z": "dbfdd28e.d60f", 308 | "name": "", 309 | "x": 370, 310 | "y": 80, 311 | "wires": [] 312 | }, 313 | { 314 | "id": "00a8cb946526f7cd", 315 | "type": "inject", 316 | "z": "dbfdd28e.d60f", 317 | "name": "", 318 | "props": [ 319 | { 320 | "p": "payload" 321 | }, 322 | { 323 | "p": "topic", 324 | "vt": "str" 325 | } 326 | ], 327 | "repeat": "", 328 | "crontab": "", 329 | "once": false, 330 | "onceDelay": 0.1, 331 | "topic": "", 332 | "payload": "", 333 | "payloadType": "date", 334 | "x": 160, 335 | "y": 80, 336 | "wires": [ 337 | [ 338 | "dba7f72fb4129a93" 339 | ] 340 | ] 341 | } 342 | ] 343 | -------------------------------------------------------------------------------- /examples/Example2/README.md: -------------------------------------------------------------------------------- 1 | node-red-contrib-oled example 2 | ============================= 3 | 4 | Node-Red node to talk to OLED displays, connected by i2c. 5 | 6 | ## An exaple to view a clock in the display 7 | 8 | 9 | If it is not installed node-red-contrib-oled 10 | ``` 11 | npm install node-red-contrib-oled 12 | ``` 13 | 14 | ## Node dependencies 15 | 16 | - node-red-contrib-i2c 17 | ``` 18 | npm install node-red-contrib-i2c 19 | ``` 20 | 21 | - node-red-contrib-ovia-os 22 | ``` 23 | npm install node-red-contrib-ovia-os 24 | ``` -------------------------------------------------------------------------------- /icons/OledBattery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledBattery.png -------------------------------------------------------------------------------- /icons/OledBluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledBluetooth.png -------------------------------------------------------------------------------- /icons/OledClear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledClear.png -------------------------------------------------------------------------------- /icons/OledClock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledClock.png -------------------------------------------------------------------------------- /icons/OledClockWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledClockWhite.png -------------------------------------------------------------------------------- /icons/OledDim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledDim.png -------------------------------------------------------------------------------- /icons/OledImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledImage.png -------------------------------------------------------------------------------- /icons/OledInvert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledInvert.png -------------------------------------------------------------------------------- /icons/OledLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledLine.png -------------------------------------------------------------------------------- /icons/OledOneWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledOneWhite.png -------------------------------------------------------------------------------- /icons/OledPixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledPixel.png -------------------------------------------------------------------------------- /icons/OledRectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledRectangle.png -------------------------------------------------------------------------------- /icons/OledScroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledScroll.png -------------------------------------------------------------------------------- /icons/OledString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledString.png -------------------------------------------------------------------------------- /icons/OledTurnOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledTurnOff.png -------------------------------------------------------------------------------- /icons/OledTurnOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledTurnOn.png -------------------------------------------------------------------------------- /icons/OledWifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/icons/OledWifi.png -------------------------------------------------------------------------------- /locales/de/oled.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 25 | 26 | 31 | 32 | 38 | 39 | 43 | 44 | 55 | 56 | 60 | 61 | 73 | 74 | 85 | 86 | 95 | 96 | 106 | 107 | 116 | 117 | 122 | 123 | 124 | 129 | 130 | -------------------------------------------------------------------------------- /locales/de/oled.json: -------------------------------------------------------------------------------- 1 | { 2 | "oled" : { 3 | "config" : { 4 | "name" : "Name", 5 | "address" : "Busadresse", 6 | "width" : "Breite", 7 | "height": "Höhe", 8 | "fanAddress" : "Fan-Bus-Adresse" 9 | }, 10 | "battery" : { 11 | "display": "Anzeige", 12 | "name" : "Name" 13 | }, 14 | "clear" : { 15 | "display": "Anzeige", 16 | "name" : "Name" 17 | }, 18 | "clock": { 19 | "display": "Anzeige", 20 | "name": "Name" 21 | }, 22 | "dimmed" : { 23 | "display": "Anzeige", 24 | "name" : "Name" 25 | }, 26 | "fillRectangle" : { 27 | "display": "Anzeige", 28 | "name" : "Name" 29 | }, 30 | "fan" : { 31 | "display": "Anzeige", 32 | "name" : "Name" 33 | }, 34 | "invertion" : { 35 | "display": "Anzeige", 36 | "name" : "Name" 37 | }, 38 | "image" : { 39 | "display": "Anzeige", 40 | "name" : "Name" 41 | }, 42 | "line" : { 43 | "display": "Anzeige", 44 | "name" : "Name" 45 | }, 46 | "pixel" : { 47 | "display": "Anzeige", 48 | "name" : "Name" 49 | }, 50 | "scroll" : { 51 | "display": "Anzeige", 52 | "name" : "Name" 53 | }, 54 | "string" : { 55 | "display": "Anzeige", 56 | "name" : "Name" 57 | }, 58 | "turn-on" : { 59 | "display": "Anzeige", 60 | "name" : "Name" 61 | }, 62 | "turn-off" : { 63 | "display": "Anzeige", 64 | "name" : "Name" 65 | }, 66 | "wifi" : { 67 | "display": "Anzeige", 68 | "name" : "Name" 69 | } 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /locales/en-US/oled.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 25 | 26 | 31 | 32 | 38 | 39 | 43 | 44 | 55 | 56 | 66 | 67 | 71 | 72 | 84 | 85 | 96 | 97 | 106 | 107 | 117 | 118 | 127 | 128 | 133 | 134 | 135 | 140 | 141 | -------------------------------------------------------------------------------- /locales/en-US/oled.json: -------------------------------------------------------------------------------- 1 | { 2 | "oled" : { 3 | "config" : { 4 | "name" : "Name", 5 | "address" : "Bus Address", 6 | "width" : "Width", 7 | "height": "Height", 8 | "fanAddress" : "Fan Bus Address" 9 | }, 10 | "battery" : { 11 | "display": "Display", 12 | "name" : "Name" 13 | }, 14 | "clear" : { 15 | "display": "Display", 16 | "name" : "Name" 17 | }, 18 | "clock": { 19 | "display": "Display", 20 | "name": "Name" 21 | }, 22 | "dimmed" : { 23 | "display": "Display", 24 | "name" : "Name" 25 | }, 26 | "fillRectangle" : { 27 | "display": "Display", 28 | "name" : "Name" 29 | }, 30 | "fan" : { 31 | "display": "Display", 32 | "name" : "Name" 33 | }, 34 | "invertion" : { 35 | "display": "Display", 36 | "name" : "Name" 37 | }, 38 | "image" : { 39 | "display": "Display", 40 | "name" : "Name" 41 | }, 42 | "line" : { 43 | "display": "Display", 44 | "name" : "Name" 45 | }, 46 | "pixel" : { 47 | "display": "Display", 48 | "name" : "Name" 49 | }, 50 | "scroll" : { 51 | "display": "Display", 52 | "name" : "Name" 53 | }, 54 | "string" : { 55 | "display": "Display", 56 | "name" : "Name" 57 | }, 58 | "turn-on" : { 59 | "display": "Display", 60 | "name" : "Name" 61 | }, 62 | "turn-off" : { 63 | "display": "Display", 64 | "name" : "Name" 65 | }, 66 | "wifi" : { 67 | "display": "Display", 68 | "name" : "Name" 69 | } 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /locales/es/oled.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 25 | 26 | 31 | 32 | 38 | 39 | 43 | 44 | 55 | 56 | 60 | 61 | 73 | 74 | 85 | 86 | 95 | 96 | 106 | 107 | 116 | 117 | 122 | 123 | 124 | 129 | 130 | -------------------------------------------------------------------------------- /locales/es/oled.json: -------------------------------------------------------------------------------- 1 | { 2 | "oled" : { 3 | "config" : { 4 | "name" : "Nombre", 5 | "address" : "Dirección Bus", 6 | "width" : "Ancho", 7 | "height": "ALto", 8 | "fanAddress" : "Dirección Bus ventilador" 9 | }, 10 | "battery" : { 11 | "display": "Display", 12 | "name" : "Nombre" 13 | }, 14 | "clear" : { 15 | "display": "Display", 16 | "name" : "Nombre" 17 | }, 18 | "clock": { 19 | "display": "Display", 20 | "name": "Nombre" 21 | }, 22 | "dimmed" : { 23 | "display": "Display", 24 | "name" : "Nombre" 25 | }, 26 | "fillRectangle" : { 27 | "display": "Display", 28 | "name" : "Nombre" 29 | }, 30 | "fan" : { 31 | "display": "Display", 32 | "name" : "Nombre" 33 | }, 34 | "invertion" : { 35 | "display": "Display", 36 | "name" : "Nombre" 37 | }, 38 | "image" : { 39 | "display": "Display", 40 | "name" : "Nombre" 41 | }, 42 | "line" : { 43 | "display": "Display", 44 | "name" : "Nombre" 45 | }, 46 | "pixel" : { 47 | "display": "Display", 48 | "name" : "Nombre" 49 | }, 50 | "scroll" : { 51 | "display": "Display", 52 | "name" : "Nombre" 53 | }, 54 | "string" : { 55 | "display": "Display", 56 | "name" : "Nombre" 57 | }, 58 | "turn-on" : { 59 | "display": "Display", 60 | "name" : "Nombre" 61 | }, 62 | "turn-off" : { 63 | "display": "Display", 64 | "name" : "Nombre" 65 | }, 66 | "wifi" : { 67 | "display": "Display", 68 | "name" : "Nombre" 69 | } 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /locales/fr/oled.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 25 | 26 | 31 | 32 | 38 | 39 | 43 | 44 | 55 | 56 | 60 | 61 | 73 | 74 | 85 | 86 | 95 | 96 | 106 | 107 | 116 | 117 | 122 | 123 | 124 | 129 | 130 | -------------------------------------------------------------------------------- /locales/fr/oled.json: -------------------------------------------------------------------------------- 1 | { 2 | "oled" : { 3 | "config" : { 4 | "name" : "Nom", 5 | "address" : "Direction du bus", 6 | "width" : "Largeur", 7 | "height": "Haut", 8 | "fanAddress" : "Fan-Bus-Adresse" 9 | }, 10 | "battery" : { 11 | "display": "Affichage", 12 | "name" : "Nom" 13 | }, 14 | "clear" : { 15 | "display": "Affichage", 16 | "name" : "Nom" 17 | }, 18 | "clock": { 19 | "display": "Affichage", 20 | "name": "Nom" 21 | }, 22 | "dimmed" : { 23 | "display": "Affichage", 24 | "name" : "Nom" 25 | }, 26 | "fillRectangle" : { 27 | "display": "Affichage", 28 | "name" : "Nom" 29 | }, 30 | "fan" : { 31 | "display": "Affichage", 32 | "name" : "Nom" 33 | }, 34 | "invertion" : { 35 | "display": "Affichage", 36 | "name" : "Nom" 37 | }, 38 | "image" : { 39 | "display": "Affichage", 40 | "name" : "Nom" 41 | }, 42 | "line" : { 43 | "display": "Affichage", 44 | "name" : "Nom" 45 | }, 46 | "pixel" : { 47 | "display": "Affichage", 48 | "name" : "Nom" 49 | }, 50 | "scroll" : { 51 | "display": "Affichage", 52 | "name" : "Nom" 53 | }, 54 | "string" : { 55 | "display": "Affichage", 56 | "name" : "Nom" 57 | }, 58 | "turn-on" : { 59 | "display": "Affichage", 60 | "name" : "Nom" 61 | }, 62 | "turn-off" : { 63 | "display": "Affichage", 64 | "name" : "Nom" 65 | }, 66 | "wifi" : { 67 | "display": "Affichage", 68 | "name" : "Nom" 69 | } 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /locales/it/oled.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 25 | 26 | 31 | 32 | 38 | 39 | 43 | 44 | 55 | 56 | 60 | 61 | 73 | 74 | 85 | 86 | 95 | 96 | 106 | 107 | 116 | 117 | 122 | 123 | 124 | 129 | 130 | -------------------------------------------------------------------------------- /locales/it/oled.json: -------------------------------------------------------------------------------- 1 | { 2 | "oled" : { 3 | "config" : { 4 | "name" : "Nome", 5 | "address" : "Indirizzo dell'bus", 6 | "width" : "Larghezza", 7 | "height": "Alto", 8 | "fanAddress" : "Fan Bus Address" 9 | }, 10 | "battery" : { 11 | "display": "Schermo", 12 | "name" : "Nome" 13 | }, 14 | "clear" : { 15 | "display": "Schermo", 16 | "name" : "Nome" 17 | }, 18 | "clock": { 19 | "display": "Schermo", 20 | "name": "Nome" 21 | }, 22 | "dimmed" : { 23 | "display": "Schermo", 24 | "name" : "Nome" 25 | }, 26 | "fillRectangle" : { 27 | "display": "Schermo", 28 | "name" : "Nome" 29 | }, 30 | "fan" : { 31 | "display": "Schermo", 32 | "name" : "Nome" 33 | }, 34 | "invertion" : { 35 | "display": "Schermo", 36 | "name" : "Nome" 37 | }, 38 | "image" : { 39 | "display": "Schermo", 40 | "name" : "Nome" 41 | }, 42 | "line" : { 43 | "display": "Schermo", 44 | "name" : "Nome" 45 | }, 46 | "pixel" : { 47 | "display": "Schermo", 48 | "name" : "Nome" 49 | }, 50 | "scroll" : { 51 | "display": "Schermo", 52 | "name" : "Nome" 53 | }, 54 | "string" : { 55 | "display": "Schermo", 56 | "name" : "Nome" 57 | }, 58 | "turn-on" : { 59 | "display": "Schermo", 60 | "name" : "Nome" 61 | }, 62 | "turn-off" : { 63 | "display": "Schermo", 64 | "name" : "Nome" 65 | }, 66 | "wifi" : { 67 | "display": "Schermo", 68 | "name" : "Nome" 69 | } 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /oled.html: -------------------------------------------------------------------------------- 1 | /*! ********************************************************************************************************************************************************** */ 2 | 31 | 49 | /*! 50 | ********************************************************************************************************************************************************** 51 | */ 52 | 73 | 74 | 84 | 85 | 86 | /*! 87 | ********************************************************************************************************************************************************** 88 | */ 89 | 110 | 111 | 121 | 122 | 123 | 124 | /*! 125 | ********************************************************************************************************************************************************** 126 | */ 127 | 148 | 149 | 159 | 160 | 161 | /*! 162 | ********************************************************************************************************************************************************** 163 | */ 164 | 185 | 186 | 196 | 197 | 198 | /*! 199 | ********************************************************************************************************************************************************** 200 | */ 201 | 222 | 223 | 233 | 234 | 235 | /*! 236 | ********************************************************************************************************************************************************** 237 | */ 238 | 259 | 260 | 270 | 271 | 272 | /*! 273 | ********************************************************************************************************************************************************** 274 | */ 275 | 296 | 297 | 307 | 308 | 309 | /*! 310 | ********************************************************************************************************************************************************** 311 | */ 312 | 333 | 334 | 344 | 345 | 346 | /*! 347 | ********************************************************************************************************************************************************** 348 | */ 349 | 370 | 371 | 381 | 382 | 383 | /*! 384 | ********************************************************************************************************************************************************** 385 | */ 386 | 407 | 408 | 418 | 419 | 420 | /*! 421 | ********************************************************************************************************************************************************** 422 | */ 423 | 444 | 454 | 455 | 456 | /*! 457 | ********************************************************************************************************************************************************** 458 | */ 459 | 480 | 481 | 491 | 492 | 497 | 498 | 499 | /*! 500 | ********************************************************************************************************************************************************** 501 | */ 502 | 523 | 524 | 534 | 535 | /*! 536 | ********************************************************************************************************************************************************** 537 | */ 538 | 559 | 560 | 570 | -------------------------------------------------------------------------------- /oled.js: -------------------------------------------------------------------------------- 1 | 2 | var fs = require('fs'); 3 | var PNG = require('pngjs').PNG; 4 | var i2c = require('i2c-bus'); 5 | var i2cBus = i2c.openSync(1); 6 | var Oled = require('oled-i2c-bus'); 7 | var font = require('oled-font-5x7'); 8 | //var timeoutCollection = require('time-events-manager/TimeoutCollection'); 9 | var timers = []; 10 | var numTimers = 0; 11 | myInterval = null; 12 | var init = true; 13 | var exec = require('child_process').exec; 14 | 15 | exec('sudo systemctl status RGB_Cooling_HAT_C_1 | grep " Active: active (running)" | wc -l', 16 | function (error, stdout, stderr) { 17 | //console.log('stdout: ' + stdout); 18 | //console.log('stderr: ' + stderr); 19 | if (stdout != 0) { 20 | console.error('RGB_Cooling_HAT_C_1 service running. node-red-contrib-oled may be working wrong. please stop it.'); 21 | } 22 | }); 23 | exec('sudo systemctl status RGB_Cooling_HAT_C | grep " Active: active (running)" | wc -l', 24 | function (error, stdout, stderr) { 25 | //console.log('stdout: ' + stdout); 26 | //console.log('stderr: ' + stderr); 27 | if (stdout != 0) { 28 | console.error('RGB_Cooling_HAT_C service running. node-red-contrib-oled may be working wrong. please stop it.'); 29 | } 30 | }); 31 | 32 | exec('sudo systemctl status RGB_Cooling_HAT | grep " Active: active (running)" | wc -l', 33 | function (error, stdout, stderr) { 34 | //console.log('stdout: ' + stdout); 35 | //console.log('stderr: ' + stderr); 36 | if (stdout != 0) { 37 | console.error('RGB_Cooling_HAT service running. node-red-contrib-oled may be working wrong. please stop it.'); 38 | } 39 | }); 40 | 41 | exec('sudo ps -ef | grep temp_control | wc -l', 42 | function (error, stdout, stderr) { 43 | //console.log('stdout: ' + stdout); 44 | //console.log('stderr: ' + stderr); 45 | if (stdout != 1) { 46 | console.error('RGB_Cooling_HAT running. node-red-contrib-oled may be working wrong. please stop it.'); 47 | } 48 | }); 49 | 50 | module.exports = function(RED) { 51 | var displays = {} 52 | 53 | '---------------------------------- Function ----------------------------------' 54 | function OledFunction(fn) { 55 | return function(n) { 56 | var self = this 57 | RED.nodes.createNode(self, n) 58 | self.display = displays[n.display] 59 | self.on('input', function(msg) { 60 | self.display[fn](msg.payload) 61 | self.display.update() 62 | }) 63 | } 64 | } 65 | 66 | '---------------------------------- Check ----------------------------------' 67 | function check(display, node) { 68 | if (node.clear) { 69 | display.clearDisplay() 70 | display.setCursor(1, 1) 71 | display.update() 72 | } 73 | } 74 | 75 | '---------------------------------- Config ----------------------------------' 76 | function OledConfig(config) { 77 | var self = this 78 | RED.nodes.createNode(self, config) 79 | self.config = { 80 | width: parseInt(config.width), 81 | height: parseInt(config.height), 82 | address: config.address.includes('0x') ? parseInt('0x' + config.address) : parseInt(config.address) 83 | } 84 | displays[self.id] = new Oled(i2cBus, self.config) 85 | check(displays[self.id], { clear: true }) 86 | } 87 | 88 | '---------------------------------- Pixel ----------------------------------' 89 | function Pixel(n) { 90 | var self = this 91 | RED.nodes.createNode(self, n) 92 | self.display = displays[n.display] 93 | self.on('input', function(msg) { 94 | check(self.display, n) 95 | try { 96 | var p = msg.payload 97 | self.display.drawPixel(msg.payload) 98 | } catch (err) { 99 | self.error(err) 100 | } 101 | }) 102 | } 103 | 104 | '---------------------------------- Line ----------------------------------' 105 | function Line(n) { 106 | var self = this 107 | RED.nodes.createNode(self, n) 108 | self.display = displays[n.display] 109 | self.on('input', function(msg) { 110 | check(self.display, n) 111 | try { 112 | var p = msg.payload 113 | self.display.drawLine(p.x0,p.y0,p.x1,p.y1,p.color,true) 114 | } catch (err) { 115 | self.error(err) 116 | } 117 | }) 118 | } 119 | 120 | '---------------------------------- Rectangle ----------------------------------' 121 | function FillRectangle(n) { 122 | var self = this 123 | RED.nodes.createNode(self, n) 124 | self.display = displays[n.display] 125 | self.on('input', function(msg) { 126 | check(self.display, n) 127 | try { 128 | var p = msg.payload 129 | self.display.fillRect(p.x,p.y,p.w,p.h,p.color,true) 130 | } catch (err) { 131 | self.error(err) 132 | } 133 | }) 134 | } 135 | 136 | '---------------------------------- String ----------------------------------' 137 | function String(n) { 138 | var self = this 139 | RED.nodes.createNode(self, n) 140 | 141 | self.display = displays[n.display] 142 | 143 | self.on('input', function(msg) { 144 | check(self.display, n) 145 | try { 146 | if (typeof msg.payload === 'object') { 147 | var p = msg.payload 148 | if (p.x || p.y) { 149 | self.display.setCursor(p.x || 1, p.y || 1) 150 | } 151 | self.display.writeString( 152 | font, 153 | p.size || n.size || 1, p.text || '', 154 | p.color || n.color || 1, 155 | typeof p.wrapping === 'undefined' ? n.wrapping : p.wrapping 156 | ) 157 | } else { 158 | self.display.setCursor(1, 1) 159 | self.display.writeString(font, 1, msg.payload, 1, true) 160 | } 161 | } catch (err) { 162 | self.error(err) 163 | } 164 | }) 165 | } 166 | 167 | '---------------------------------- Scroll ----------------------------------' 168 | function Scroll(n) { 169 | var self = this 170 | RED.nodes.createNode(self, n) 171 | self.display = displays[n.display] 172 | self.on('input', function(msg) { 173 | check(self.display, n) 174 | //console.log('Scroll ' + "parms: " + msg.payload); 175 | try { 176 | var p = msg.payload 177 | if (typeof p !== 'undefined') { 178 | if (typeof p === 'boolean' && !p) { 179 | self.display.stopScroll() 180 | } 181 | else if (typeof p === 'object') { 182 | self.display.startScroll(p.direction || 'left', p.start || 0, p.stop || 128) 183 | //console.log('Startscroll ' + "direccion : " + p.direction + " start: " + p.start + " stop " + p.stop + " payload " + msg.payload.direction); 184 | } 185 | } 186 | } catch (err) { 187 | self.error(err) 188 | } 189 | }) 190 | } 191 | 192 | '---------------------------------- Battery ----------------------------------' 193 | function Battery(n) { 194 | var self = this 195 | RED.nodes.createNode(self, n) 196 | self.display = displays[n.display] 197 | self.on('input', function(msg) { 198 | check(self.display, n) 199 | try { 200 | var p = msg.payload 201 | self.display.drawLine(p.x,p.y,p.x+16,p.y,1) 202 | self.display.drawLine(p.x,p.y+8,p.x+16,p.y+8,1) 203 | self.display.drawLine(p.x,p.y,p.x,p.y+8,1) 204 | self.display.drawPixel([[p.x+17,p.y+1,1],[p.x+17,p.y+7,1]]) 205 | self.display.drawLine(p.x+18,p.y+1,p.x+18,p.y+7,1) 206 | 207 | if (p.p >= 70) { 208 | self.display.fillRect(p.x+2,p.y+2,3,5,1,true) 209 | self.display.fillRect(p.x+7,p.y+2,3,5,1,true) 210 | self.display.fillRect(p.x+12,p.y+2,3,5,1,true)} 211 | 212 | if (p.p >= 40 && p.p < 70) { 213 | self.display.fillRect(p.x+2,p.y+2,3,5,1,true) 214 | self.display.fillRect(p.x+7,p.y+2,3,5,1,true) 215 | self.display.fillRect(p.x+12,p.y+2,3,5,0,true)} 216 | 217 | if (p.p >= 10 && p.p < 40) { 218 | self.display.fillRect(p.x+2,p.y+2,3,5,1,true) 219 | self.display.fillRect(p.x+7,p.y+2,3,5,0,true) 220 | self.display.fillRect(p.x+12,p.y+2,3,5,0,true)} 221 | 222 | if (p.p < 10) { 223 | self.display.fillRect(p.x+2,p.y+2,3,5,0,true) 224 | self.display.fillRect(p.x+7,p.y+2,3,5,0,true) 225 | self.display.fillRect(p.x+12,p.y+2,3,5,0,true)} 226 | 227 | } catch (err) { 228 | self.error(err) 229 | } 230 | }) 231 | } 232 | '---------------------------------- Bluetooth ----------------------------------' 233 | function Bluetooth(n) { 234 | var self = this 235 | RED.nodes.createNode(self, n) 236 | self.display = displays[n.display] 237 | self.on('input', function (msg) { 238 | check(self.display, n) 239 | try { 240 | var p = msg.payload 241 | self.display.drawLine(p.x + 5, p.y +1 , p.x + 5, p.y + 11, 1) 242 | self.display.drawLine(p.x +2 , p.y + 3, p.x + 9, p.y + 8, 1) 243 | self.display.drawLine(p.x + 2, p.y + 9, p.x +8 , p.y + 3, 1) 244 | self.display.drawLine(p.x + 5, p.y + 1, p.x + 9, p.y + 3, 1) 245 | self.display.drawLine(p.x + 5, p.y + 11, p.x + 8, p.y + 9, 1) 246 | } catch (err) { 247 | self.error(err) 248 | } 249 | }) 250 | } 251 | 252 | '---------------------------------- Wifi ----------------------------------' 253 | function Wifi(n) { 254 | var self = this 255 | RED.nodes.createNode(self, n) 256 | self.display = displays[n.display] 257 | self.on('input', function(msg) { 258 | check(self.display, n) 259 | try { 260 | var p = msg.payload 261 | self.display.drawLine(p.x,p.y,p.x+8,p.y,1) 262 | self.display.drawLine(p.x,p.y,p.x+4,p.y+4,1) 263 | self.display.drawLine(p.x+8,p.y,p.x+4,p.y+4,1) 264 | self.display.drawLine(p.x+4,p.y,p.x+4,p.y+9,1) 265 | 266 | if (p.p >= 70) { 267 | self.display.fillRect(p.x+6,p.y+8,2,2,1,true) 268 | self.display.fillRect(p.x+10,p.y+6,2,4,1,true) 269 | self.display.fillRect(p.x+14,p.y+4,2,6,1,true)} 270 | 271 | if (p.p >= 40 && p.p < 70) { 272 | self.display.fillRect(p.x+6,p.y+8,2,2,1,true) 273 | self.display.fillRect(p.x+10,p.y+6,2,4,1,true) 274 | self.display.fillRect(p.x+14,p.y+4,2,6,0,true)} 275 | 276 | if (p.p >= 10 && p.p < 40) { 277 | self.display.fillRect(p.x+6,p.y+8,2,2,1,true) 278 | self.display.fillRect(p.x+10,p.y+6,2,4,0,true) 279 | self.display.fillRect(p.x+14,p.y+4,2,6,0,true)} 280 | 281 | if (p.p < 10) { 282 | self.display.fillRect(p.x+6,p.y+8,2,2,0,true) 283 | self.display.fillRect(p.x+10,p.y+6,2,4,0,true) 284 | self.display.fillRect(p.x+14,p.y+4,2,6,0,true)} 285 | 286 | } catch (err) { 287 | self.error(err) 288 | } 289 | }) 290 | } 291 | 292 | '---------------------------------- drawPNGImage ----------------------------------' 293 | function Image(n) { 294 | var self = this 295 | var dirresources = __dirname + "/resources/"; 296 | //console.log(dirresources); 297 | RED.nodes.createNode(self, n) 298 | self.display = displays[n.display] 299 | self.on('input', function(msg) { 300 | check(self.display, n) 301 | //console.log("Oled timers actives: " + timeoutCollection.getAll()); 302 | 303 | try { 304 | init = true; 305 | var p = msg.payload 306 | //var files = fs.readdirSync('.'); 307 | //files.forEach(function(element) { 308 | // console.log("ficheros en pwd " + element ); 309 | // }); 310 | //console.log("entra en Image(n) " + files ); 311 | 312 | if (typeof p.image === 'string' && !p.image.includes("/")) { 313 | tryImage = p.image; 314 | p.image = dirresources + p.image; 315 | } 316 | try { 317 | if (! fs.statSync(p.image).isFile()) { 318 | //console.log("file " + p.image + "not exist."); 319 | } 320 | } catch (err) { 321 | p.image = dirresources + "notafile.png"; 322 | //console.log("new file catch " + p.image); 323 | p.x = 0; 324 | p.y = 17; 325 | self.display.clearDisplay(); 326 | self.error(err) 327 | self.display.writeString( 328 | font, 329 | 1, tryImage , 330 | 1, 331 | typeof p.wrapping === 'undefined' ? n.wrapping : p.wrapping 332 | ) 333 | } 334 | if (typeof p.clear === 'boolean' && p.clear) { 335 | self.display.clearDisplay(); 336 | 337 | } 338 | if (typeof p.reset === 'boolean' && p.reset) { 339 | timers.forEach(function(entry){ 340 | //console.log("myInterval cancelado " + entry); 341 | clearInterval(entry); 342 | entry = null; 343 | }); 344 | numTimers = 0; 345 | timers = []; 346 | self.display.clearDisplay(); 347 | if (typeof pdxb === 'number'){pdxb = null} 348 | if (typeof pdyb === 'number'){pdyb = null} 349 | return 350 | 351 | } 352 | try { 353 | fs.createReadStream(p.image) 354 | .pipe(new PNG({ filterType: 4 })) 355 | .on('parsed', function () { 356 | if (typeof p.animated === 'boolean' && p.animated) { 357 | var pdxb = 1; 358 | var pdyb = -1; 359 | let myInterval = setInterval(() => { drawPseudo(this, self.display, pdxb, pdyb ) }, 10); 360 | timers.push(myInterval); 361 | numTimers += 1; 362 | } 363 | else { 364 | self.display.drawRGBAImage(this, p.x || Math.floor((self.display.WIDTH - this.width) / 2), p.y || Math.floor((self.display.HEIGHT - this.height) / 2)); 365 | } 366 | }); 367 | } catch (err) { 368 | self.error(err) 369 | } 370 | } catch (err) { 371 | self.error(err) 372 | } 373 | }) 374 | } 375 | 376 | function drawPseudo(image, display, pdxb, pdyb ) { 377 | var x = 0; 378 | var y = 0; 379 | var dx = 0; 380 | var dy = 0; 381 | var init; 382 | var image; 383 | if ( typeof this.init === "undefined" || this.init === true || this.image !== image) { 384 | this.init = false; 385 | this.image = image; 386 | this.x = 1; 387 | this.y = 1; 388 | this.dx = pdxb; 389 | this.dy = pdyb; 390 | //console.log("entra drawPseudo this.x " + this.x + " this.y " + this.y + " this.dx " + this.dx + " this.dy " + this.dy); 391 | } 392 | 393 | display.clearDisplay(); 394 | display.fillRect(0,0,display.WIDTH , display.HEIGHT ,1,true) 395 | display.fillRect(1,1,display.WIDTH - 2, display.HEIGHT - 2 ,0,true) 396 | display.drawRGBAImage(image, this.x, this.y); 397 | if(this.x + this.dx > display.WIDTH - image.width || this.x < 1) { 398 | this.dx = -this.dx; 399 | } 400 | if(this.y + this.dy > display.HEIGHT - image.height|| this.y < 1) { 401 | this.dy = -this.dy; 402 | } 403 | 404 | this.x += this.dx; 405 | this.y += this.dy; 406 | } 407 | 408 | 409 | '---------------------------------- Registration ----------------------------------' 410 | RED.nodes.registerType('Clear', OledFunction('clearDisplay')) 411 | RED.nodes.registerType('Dimmed', OledFunction('dimDisplay')) 412 | RED.nodes.registerType('Invertion', OledFunction('invertDisplay')) 413 | RED.nodes.registerType('Turn-off', OledFunction('turnOffDisplay')) 414 | RED.nodes.registerType('Turn-on', OledFunction('turnOnDisplay')) 415 | RED.nodes.registerType('oled-config', OledConfig) 416 | RED.nodes.registerType('Pixel', Pixel) 417 | RED.nodes.registerType('Line', Line) 418 | RED.nodes.registerType('FillRectangle', FillRectangle) 419 | RED.nodes.registerType('String', String) 420 | RED.nodes.registerType('Scroll', Scroll) 421 | RED.nodes.registerType('Battery', Battery) 422 | RED.nodes.registerType('Wifi', Wifi) 423 | RED.nodes.registerType('Bluetooth', Bluetooth) 424 | RED.nodes.registerType('Image', Image) 425 | 426 | } 427 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-red-contrib-oled", 3 | "version": "1.0.5", 4 | "description": "Node-Red node for controlling OLED displays", 5 | "main": "index.js", 6 | "scripts": {}, 7 | "keywords": [ 8 | "node-red", 9 | "oled", 10 | "ADS1x15 " 11 | ], 12 | "engines": { 13 | "node": ">=12" 14 | }, 15 | "author": "Hendrik Roth ", 16 | "license": "MIT", 17 | "bugs": { 18 | "url": "https://github.com/HendrikRoth/node-red-contrib-oled/issues" 19 | }, 20 | "homepage": "https://github.com/HendrikRoth/node-red-contrib-oled#readme", 21 | "dependencies": { 22 | "i2c-bus": "^5.2.2", 23 | "oled-font-5x7": "^1.0.3", 24 | "oled-i2c-bus": "^1.0.12", 25 | "pngparse": "^2.0.1", 26 | "pngjs": "^6.0.0", 27 | "time-events-manager": "^0.1.1" 28 | }, 29 | "node-red": { 30 | "version": ">=1.0.0", 31 | "nodes": { 32 | "oled": "oled.js" 33 | } 34 | }, 35 | "engines": { 36 | "node": ">=12.0.0" 37 | }, 38 | "maintainers": [ 39 | { 40 | "name": "Antonio Maza", 41 | "email": "waterbrain@pelaire.com" 42 | } 43 | ], 44 | "directories": { 45 | "example": "examples" 46 | }, 47 | "repository": { 48 | "type": "git", 49 | "url": "git+https://github.com/HendrikRoth/node-red-contrib-oled.git" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /resources/OledBattery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledBattery.png -------------------------------------------------------------------------------- /resources/OledBluetooth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledBluetooth.png -------------------------------------------------------------------------------- /resources/OledCleardigit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledCleardigit.png -------------------------------------------------------------------------------- /resources/OledClock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledClock.png -------------------------------------------------------------------------------- /resources/OledClockWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledClockWhite.png -------------------------------------------------------------------------------- /resources/OledDim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledDim.png -------------------------------------------------------------------------------- /resources/OledEight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledEight.png -------------------------------------------------------------------------------- /resources/OledEightWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledEightWhite.png -------------------------------------------------------------------------------- /resources/OledEightWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledEightWhiteT.png -------------------------------------------------------------------------------- /resources/OledFive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFive.png -------------------------------------------------------------------------------- /resources/OledFiveWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFiveWhite.png -------------------------------------------------------------------------------- /resources/OledFiveWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFiveWhiteT.png -------------------------------------------------------------------------------- /resources/OledFour.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFour.png -------------------------------------------------------------------------------- /resources/OledFourWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFourWhite.png -------------------------------------------------------------------------------- /resources/OledFourWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledFourWhiteT.png -------------------------------------------------------------------------------- /resources/OledImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledImage.png -------------------------------------------------------------------------------- /resources/OledInvert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledInvert.png -------------------------------------------------------------------------------- /resources/OledLine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledLine.png -------------------------------------------------------------------------------- /resources/OledNine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledNine.png -------------------------------------------------------------------------------- /resources/OledNineWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledNineWhite.png -------------------------------------------------------------------------------- /resources/OledNineWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledNineWhiteT.png -------------------------------------------------------------------------------- /resources/OledOne.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledOne.png -------------------------------------------------------------------------------- /resources/OledOneWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledOneWhite.png -------------------------------------------------------------------------------- /resources/OledOneWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledOneWhiteT.png -------------------------------------------------------------------------------- /resources/OledPixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledPixel.png -------------------------------------------------------------------------------- /resources/OledRectangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledRectangle.png -------------------------------------------------------------------------------- /resources/OledScroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledScroll.png -------------------------------------------------------------------------------- /resources/OledSeven.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSeven.png -------------------------------------------------------------------------------- /resources/OledSevenWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSevenWhite.png -------------------------------------------------------------------------------- /resources/OledSevenWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSevenWhiteT.png -------------------------------------------------------------------------------- /resources/OledSix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSix.png -------------------------------------------------------------------------------- /resources/OledSixWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSixWhite.png -------------------------------------------------------------------------------- /resources/OledSixWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledSixWhiteT.png -------------------------------------------------------------------------------- /resources/OledString.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledString.png -------------------------------------------------------------------------------- /resources/OledThree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledThree.png -------------------------------------------------------------------------------- /resources/OledThreeWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledThreeWhite.png -------------------------------------------------------------------------------- /resources/OledThreeWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledThreeWhiteT.png -------------------------------------------------------------------------------- /resources/OledTurnOff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTurnOff.png -------------------------------------------------------------------------------- /resources/OledTurnOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTurnOn.png -------------------------------------------------------------------------------- /resources/OledTwo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTwo.png -------------------------------------------------------------------------------- /resources/OledTwoWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTwoWhite.png -------------------------------------------------------------------------------- /resources/OledTwoWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTwoWhiteT.png -------------------------------------------------------------------------------- /resources/OledTwopoints.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTwopoints.png -------------------------------------------------------------------------------- /resources/OledTwopointsWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledTwopointsWhite.png -------------------------------------------------------------------------------- /resources/OledWifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledWifi.png -------------------------------------------------------------------------------- /resources/OledZero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledZero.png -------------------------------------------------------------------------------- /resources/OledZeroWhite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledZeroWhite.png -------------------------------------------------------------------------------- /resources/OledZeroWhiteT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/OledZeroWhiteT.png -------------------------------------------------------------------------------- /resources/Oledrpi32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/Oledrpi32x32.png -------------------------------------------------------------------------------- /resources/Oledrpi48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/Oledrpi48x48.png -------------------------------------------------------------------------------- /resources/Oledrpi64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/Oledrpi64x64.png -------------------------------------------------------------------------------- /resources/WaterBrain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/WaterBrain.png -------------------------------------------------------------------------------- /resources/notafile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/notafile.png -------------------------------------------------------------------------------- /resources/raspberrypi-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/raspberrypi-logo.png -------------------------------------------------------------------------------- /resources/rpi frambuesa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/rpi frambuesa.png -------------------------------------------------------------------------------- /resources/rpi-frambuesa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/rpi-frambuesa.png -------------------------------------------------------------------------------- /resources/yahabommlogo-2-102x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/yahabommlogo-2-102x16.png -------------------------------------------------------------------------------- /resources/yahabommlogo-2-128x20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/resources/yahabommlogo-2-128x20.png -------------------------------------------------------------------------------- /screen example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HendrikRoth/node-red-contrib-oled/fbc9cedb122996ed9812e4c19481074b869ce991/screen example.png --------------------------------------------------------------------------------