From 981ae57e24287d51b48718318745616a6de2e5d6 Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Fri, 16 May 2025 14:06:28 -0600 Subject: [PATCH 1/5] Adding image for guest WiFi QR code --- img/wifi.png | Bin 0 -> 46229 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/wifi.png diff --git a/img/wifi.png b/img/wifi.png new file mode 100644 index 0000000000000000000000000000000000000000..2b682a05d36f1649763ea85a312cd8576116cb82 GIT binary patch literal 46229 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%0A>hHai6xTpwF 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 Date: Fri, 16 May 2025 14:12:22 -0600 Subject: [PATCH 2/5] Adding mqtt library to node project --- package-lock.json | 506 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 1 + 2 files changed, 505 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b84c51..f5b2657 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "@aeroniemi/inky": "^0.2.0", + "mqtt": "^5.13.0", "node-schedule": "^2.1.1", "rclone.js": "^0.6.6", "sharp": "^0.33.5" @@ -29,6 +30,15 @@ "@resvg/resvg-js": "^2.4.1" } }, + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@emnapi/runtime": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", @@ -616,6 +626,37 @@ "node": ">= 10" } }, + "node_modules/@types/node": { + "version": "22.15.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz", + "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/adm-zip": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", @@ -640,6 +681,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -649,6 +710,48 @@ "file-uri-to-path": "1.0.0" } }, + "node_modules/bl": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", + "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -706,6 +809,41 @@ "simple-swizzle": "^0.2.2" } }, + "node_modules/commist": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", + "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/cron-parser": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-4.9.0.tgz", @@ -718,6 +856,23 @@ "node": ">=12.0.0" } }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -727,6 +882,37 @@ "node": ">=8" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-unique-numbers": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", + "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.1.0" + } + }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -742,18 +928,85 @@ "node": ">=8" } }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "license": "MIT" }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, "node_modules/long-timeout": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", "integrity": "sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==", "license": "MIT" }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -763,6 +1016,56 @@ "node": ">=12" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mqtt": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.13.0.tgz", + "integrity": "sha512-pR+z+ChxFl3n8AKLQbTONVOOg/jl4KiKQRBAi78tjd6PksOWvl1nl9L8ZHOZ3MiavZfrUOjok2ddwc1VymGWRg==", + "license": "MIT", + "dependencies": { + "commist": "^3.2.0", + "concat-stream": "^2.0.0", + "debug": "^4.4.0", + "help-me": "^5.0.0", + "lru-cache": "^10.4.3", + "minimist": "^1.2.8", + "mqtt-packet": "^9.0.2", + "number-allocator": "^1.0.14", + "readable-stream": "^4.7.0", + "rfdc": "^1.4.1", + "socks": "^2.8.3", + "split2": "^4.2.0", + "worker-timers": "^7.1.8", + "ws": "^8.18.0" + }, + "bin": { + "mqtt": "build/bin/mqtt.js", + "mqtt_pub": "build/bin/pub.js", + "mqtt_sub": "build/bin/sub.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/mqtt-packet": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.2.tgz", + "integrity": "sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==", + "license": "MIT", + "dependencies": { + "bl": "^6.0.8", + "debug": "^4.3.4", + "process-nextick-args": "^2.0.1" + } + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -772,6 +1075,12 @@ "node": ">=4" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/nan": { "version": "2.22.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", @@ -792,6 +1101,16 @@ "node": ">=6" } }, + "node_modules/number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" + } + }, "node_modules/pngjs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", @@ -801,6 +1120,21 @@ "node": ">=14.19.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/rclone.js": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/rclone.js/-/rclone.js-0.6.6.tgz", @@ -834,6 +1168,28 @@ "node": ">=12" } }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, "node_modules/rpio": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/rpio/-/rpio-2.4.2.tgz", @@ -848,6 +1204,12 @@ "node": ">=0.8" } }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -908,12 +1270,80 @@ "is-arrayish": "^0.3.1" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/sorted-array-functions": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz", "integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA==", "license": "MIT" }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -930,8 +1360,80 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "optional": true + "license": "0BSD" + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/worker-timers": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", + "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2", + "worker-timers-broker": "^6.1.8", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-broker": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", + "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "fast-unique-numbers": "^8.0.13", + "tslib": "^2.6.2", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-worker": { + "version": "7.0.71", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", + "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2" + } + }, + "node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 8149833..bcba2b3 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "dependencies": { "@aeroniemi/inky": "^0.2.0", + "mqtt": "^5.13.0", "node-schedule": "^2.1.1", "rclone.js": "^0.6.6", "sharp": "^0.33.5" -- 2.49.1 From 63807747cd0be5b3d57a1fb0044d6434a7826e57 Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Fri, 16 May 2025 14:21:33 -0600 Subject: [PATCH 3/5] Adding mqtt test code, temporarily --- mqtt-test.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 mqtt-test.js diff --git a/mqtt-test.js b/mqtt-test.js new file mode 100644 index 0000000..a6f65a5 --- /dev/null +++ b/mqtt-test.js @@ -0,0 +1,16 @@ +const mqtt = require('mqtt') +const client = mqtt.connect('mqtt://mqtt.srv.jnf.me', { + clientId: 'pictureframe_' + Math.random().toString(16).substr(2, 8), + username: 'pictureframe', + password: 'pictureframe' +}) + +client.on('connect', () => { + client.subscribe('pictureframe/#', (err) => { + if (err) console.log(err) + }) +}) + +client.on('message', (topic, message) => { + console.log(topic + ' : ' + message.toString()) +}) -- 2.49.1 From be56a5f7914823f699c04b2edd67aa12d9110736 Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Fri, 16 May 2025 14:37:44 -0600 Subject: [PATCH 4/5] Adding mqtt control --- index.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/index.js b/index.js index 0db1fae..5aeb1c1 100644 --- a/index.js +++ b/index.js @@ -3,10 +3,18 @@ const schedule = require('node-schedule') const fs = require('fs') const sharp = require('sharp') const inky = require('@aeroniemi/inky') +const mqtt = require('mqtt') const frame = new inky.Impression73() const folder = './gallery/' +// Connect to MQTT +const mqttclient = mqtt.connect('mqtt://mqtt.srv.jnf.me', { + clientId: 'pictureframe_' + Math.random().toString(16).substr(2, 8), + username: 'pictureframe', + password: 'pictureframe' +}) + var ticker = false var filelist = false @@ -57,6 +65,31 @@ function displayImage(filename) { }) } +function displayWifi() { + console.log('Displaying wifi connection information for 10 minutes') + clearTimeout(ticker) + frame.display_png('img/wifi.png') + frame.show() + ticker = setTimeout(displayAlbum, 600000) +} + +// Subscribe to our MQTT topic... +mqttclient.on('connect', () => { + mqttclient.subscribe('pictureframe/command') +}) + +// Listen for MQTT command messages +mqttclient.on('message', (topic, message) => { + message = message.toString() + console.log('MQTT command received: ' + message) + + if (message == 'wifi') displayWifi() + if (message == 'reset') { + clearTimeout(ticker) + downloadImgs() + } +}) + // We start by downloading images. Other functions will be called if this is successful... downloadImgs() -- 2.49.1 From e8502519e4fb25f63a4246f900bb9a7f0c1b32be Mon Sep 17 00:00:00 2001 From: Jason Williams Date: Fri, 16 May 2025 14:53:21 -0600 Subject: [PATCH 5/5] Adding command to skip to the next image, and removing mqtt test code --- index.js | 8 +++++++- mqtt-test.js | 16 ---------------- 2 files changed, 7 insertions(+), 17 deletions(-) delete mode 100644 mqtt-test.js diff --git a/index.js b/index.js index 5aeb1c1..b78bff7 100644 --- a/index.js +++ b/index.js @@ -66,13 +66,18 @@ function displayImage(filename) { } function displayWifi() { - console.log('Displaying wifi connection information for 10 minutes') + console.log('Displaying wifi connection information for 10 minutes...') clearTimeout(ticker) frame.display_png('img/wifi.png') frame.show() ticker = setTimeout(displayAlbum, 600000) } +function skipToNext() { + clearTimeout(ticker) + displayAlbum() +} + // Subscribe to our MQTT topic... mqttclient.on('connect', () => { mqttclient.subscribe('pictureframe/command') @@ -83,6 +88,7 @@ mqttclient.on('message', (topic, message) => { message = message.toString() console.log('MQTT command received: ' + message) + if (message == 'skip') skipToNext() if (message == 'wifi') displayWifi() if (message == 'reset') { clearTimeout(ticker) diff --git a/mqtt-test.js b/mqtt-test.js deleted file mode 100644 index a6f65a5..0000000 --- a/mqtt-test.js +++ /dev/null @@ -1,16 +0,0 @@ -const mqtt = require('mqtt') -const client = mqtt.connect('mqtt://mqtt.srv.jnf.me', { - clientId: 'pictureframe_' + Math.random().toString(16).substr(2, 8), - username: 'pictureframe', - password: 'pictureframe' -}) - -client.on('connect', () => { - client.subscribe('pictureframe/#', (err) => { - if (err) console.log(err) - }) -}) - -client.on('message', (topic, message) => { - console.log(topic + ' : ' + message.toString()) -}) -- 2.49.1