Compare commits
2 Commits
v1.0.0
...
328a0b3408
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
328a0b3408 | ||
|
|
6d483c328a |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
node_red/node_modules/
|
||||||
@@ -20,6 +20,7 @@
|
|||||||
rustfmt
|
rustfmt
|
||||||
pkg-config
|
pkg-config
|
||||||
openssl
|
openssl
|
||||||
|
mosquitto
|
||||||
];
|
];
|
||||||
|
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
|
|||||||
1
mqtt_client/.gitignore
vendored
Normal file
1
mqtt_client/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
target/
|
||||||
656
mqtt_client/Cargo.lock
generated
Normal file
656
mqtt_client/Cargo.lock
generated
Normal file
@@ -0,0 +1,656 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aws-lc-rs"
|
||||||
|
version = "1.16.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc"
|
||||||
|
dependencies = [
|
||||||
|
"aws-lc-sys",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aws-lc-sys"
|
||||||
|
version = "0.39.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "83a25cf98105baa966497416dbd42565ce3a8cf8dbfd59803ec9ad46f3126399"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"cmake",
|
||||||
|
"dunce",
|
||||||
|
"fs_extra",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bitflags"
|
||||||
|
version = "2.11.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bytes"
|
||||||
|
version = "1.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cc"
|
||||||
|
version = "1.2.58"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
|
||||||
|
dependencies = [
|
||||||
|
"find-msvc-tools",
|
||||||
|
"jobserver",
|
||||||
|
"libc",
|
||||||
|
"shlex",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cfg-if"
|
||||||
|
version = "1.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cmake"
|
||||||
|
version = "0.1.58"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0f78a02292a74a88ac736019ab962ece0bc380e3f977bf72e376c5d78ff0678"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "core-foundation"
|
||||||
|
version = "0.10.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "core-foundation-sys"
|
||||||
|
version = "0.8.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dunce"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "find-msvc-tools"
|
||||||
|
version = "0.1.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fixedbitset"
|
||||||
|
version = "0.5.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "flume"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"spin",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fs_extra"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-core"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-sink"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-task"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-util"
|
||||||
|
version = "0.3.32"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-task",
|
||||||
|
"pin-project-lite",
|
||||||
|
"slab",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.3.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"r-efi",
|
||||||
|
"wasip2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jobserver"
|
||||||
|
version = "0.1.34"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.3.4",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libc"
|
||||||
|
version = "0.2.183"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lock_api"
|
||||||
|
version = "0.4.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
|
||||||
|
dependencies = [
|
||||||
|
"scopeguard",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "log"
|
||||||
|
version = "0.4.29"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mio"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mqtt_client"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"rumqttc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "once_cell"
|
||||||
|
version = "1.21.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "openssl-probe"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pin-project-lite"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "proc-macro2"
|
||||||
|
version = "1.0.106"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "quote"
|
||||||
|
version = "1.0.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "r-efi"
|
||||||
|
version = "5.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ring"
|
||||||
|
version = "0.17.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"cfg-if",
|
||||||
|
"getrandom 0.2.17",
|
||||||
|
"libc",
|
||||||
|
"untrusted",
|
||||||
|
"windows-sys 0.52.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rumqttc"
|
||||||
|
version = "0.25.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0feff8d882bff0b2fddaf99355a10336d43dd3ed44204f85ece28cf9626ab519"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fixedbitset",
|
||||||
|
"flume",
|
||||||
|
"futures-util",
|
||||||
|
"log",
|
||||||
|
"rustls-native-certs",
|
||||||
|
"rustls-pemfile",
|
||||||
|
"rustls-webpki 0.102.8",
|
||||||
|
"thiserror",
|
||||||
|
"tokio",
|
||||||
|
"tokio-rustls",
|
||||||
|
"tokio-stream",
|
||||||
|
"tokio-util",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls"
|
||||||
|
version = "0.23.37"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4"
|
||||||
|
dependencies = [
|
||||||
|
"aws-lc-rs",
|
||||||
|
"log",
|
||||||
|
"once_cell",
|
||||||
|
"rustls-pki-types",
|
||||||
|
"rustls-webpki 0.103.10",
|
||||||
|
"subtle",
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-native-certs"
|
||||||
|
version = "0.8.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "612460d5f7bea540c490b2b6395d8e34a953e52b491accd6c86c8164c5932a63"
|
||||||
|
dependencies = [
|
||||||
|
"openssl-probe",
|
||||||
|
"rustls-pki-types",
|
||||||
|
"schannel",
|
||||||
|
"security-framework",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-pemfile"
|
||||||
|
version = "2.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
|
||||||
|
dependencies = [
|
||||||
|
"rustls-pki-types",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-pki-types"
|
||||||
|
version = "1.14.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd"
|
||||||
|
dependencies = [
|
||||||
|
"zeroize",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-webpki"
|
||||||
|
version = "0.102.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9"
|
||||||
|
dependencies = [
|
||||||
|
"ring",
|
||||||
|
"rustls-pki-types",
|
||||||
|
"untrusted",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustls-webpki"
|
||||||
|
version = "0.103.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
|
||||||
|
dependencies = [
|
||||||
|
"aws-lc-rs",
|
||||||
|
"ring",
|
||||||
|
"rustls-pki-types",
|
||||||
|
"untrusted",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "schannel"
|
||||||
|
version = "0.1.29"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939"
|
||||||
|
dependencies = [
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scopeguard"
|
||||||
|
version = "1.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "security-framework"
|
||||||
|
version = "3.7.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"core-foundation",
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
"security-framework-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "security-framework-sys"
|
||||||
|
version = "2.17.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "shlex"
|
||||||
|
version = "1.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "slab"
|
||||||
|
version = "0.4.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "socket2"
|
||||||
|
version = "0.6.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "spin"
|
||||||
|
version = "0.9.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||||
|
dependencies = [
|
||||||
|
"lock_api",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "subtle"
|
||||||
|
version = "2.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "2.0.117"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror"
|
||||||
|
version = "2.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
|
||||||
|
dependencies = [
|
||||||
|
"thiserror-impl",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "thiserror-impl"
|
||||||
|
version = "2.0.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio"
|
||||||
|
version = "1.50.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"libc",
|
||||||
|
"mio",
|
||||||
|
"pin-project-lite",
|
||||||
|
"socket2",
|
||||||
|
"tokio-macros",
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-macros"
|
||||||
|
version = "2.6.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-rustls"
|
||||||
|
version = "0.26.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
|
||||||
|
dependencies = [
|
||||||
|
"rustls",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-stream"
|
||||||
|
version = "0.1.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32da49809aab5c3bc678af03902d4ccddea2a87d028d86392a4b1560c6906c70"
|
||||||
|
dependencies = [
|
||||||
|
"futures-core",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-util"
|
||||||
|
version = "0.7.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-ident"
|
||||||
|
version = "1.0.24"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "untrusted"
|
||||||
|
version = "0.9.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.11.1+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasip2"
|
||||||
|
version = "1.0.2+wasi-0.2.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
|
||||||
|
dependencies = [
|
||||||
|
"wit-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-link"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.52.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||||
|
dependencies = [
|
||||||
|
"windows-targets",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-sys"
|
||||||
|
version = "0.61.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
|
||||||
|
dependencies = [
|
||||||
|
"windows-link",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows-targets"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||||
|
dependencies = [
|
||||||
|
"windows_aarch64_gnullvm",
|
||||||
|
"windows_aarch64_msvc",
|
||||||
|
"windows_i686_gnu",
|
||||||
|
"windows_i686_gnullvm",
|
||||||
|
"windows_i686_msvc",
|
||||||
|
"windows_x86_64_gnu",
|
||||||
|
"windows_x86_64_gnullvm",
|
||||||
|
"windows_x86_64_msvc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_aarch64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_i686_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnu"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_gnullvm"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "windows_x86_64_msvc"
|
||||||
|
version = "0.52.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wit-bindgen"
|
||||||
|
version = "0.51.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zeroize"
|
||||||
|
version = "1.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
|
||||||
7
mqtt_client/Cargo.toml
Normal file
7
mqtt_client/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "mqtt_client"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
rumqttc = "0.25.1"
|
||||||
27
mqtt_client/src/main.rs
Normal file
27
mqtt_client/src/main.rs
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
use rumqttc::{Client, MqttOptions, QoS};
|
||||||
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut mqttoptions = MqttOptions::new("client-123", "mqtt.farmeris.sk", 1883);
|
||||||
|
mqttoptions.set_keep_alive(Duration::from_secs(5));
|
||||||
|
|
||||||
|
let (mut client, mut connection) = Client::new(mqttoptions, 10);
|
||||||
|
client.subscribe("test/topic", QoS::AtMostOnce).unwrap();
|
||||||
|
|
||||||
|
let mut last_pub = Instant::now();
|
||||||
|
let mut i = 0;
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if i < 10 && last_pub.elapsed() >= Duration::from_millis(500) {
|
||||||
|
client.publish("test/topic", QoS::AtLeastOnce, false, vec![i; 3]).unwrap();
|
||||||
|
i += 1;
|
||||||
|
last_pub = Instant::now();
|
||||||
|
}
|
||||||
|
|
||||||
|
for notification in connection.try_iter() {
|
||||||
|
println!("{:?}", notification);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::thread::sleep(Duration::from_millis(10));
|
||||||
|
}
|
||||||
|
}
|
||||||
449
node_red/.config.nodes.json
Normal file
449
node_red/.config.nodes.json
Normal file
@@ -0,0 +1,449 @@
|
|||||||
|
{
|
||||||
|
"node-red": {
|
||||||
|
"name": "node-red",
|
||||||
|
"version": "4.1.2",
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"nodes": {
|
||||||
|
"junction": {
|
||||||
|
"name": "junction",
|
||||||
|
"types": [
|
||||||
|
"junction"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/05-junction.js"
|
||||||
|
},
|
||||||
|
"inject": {
|
||||||
|
"name": "inject",
|
||||||
|
"types": [
|
||||||
|
"inject"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/20-inject.js"
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"name": "debug",
|
||||||
|
"types": [
|
||||||
|
"debug"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/21-debug.js"
|
||||||
|
},
|
||||||
|
"complete": {
|
||||||
|
"name": "complete",
|
||||||
|
"types": [
|
||||||
|
"complete"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/24-complete.js"
|
||||||
|
},
|
||||||
|
"catch": {
|
||||||
|
"name": "catch",
|
||||||
|
"types": [
|
||||||
|
"catch"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/25-catch.js"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"name": "status",
|
||||||
|
"types": [
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/25-status.js"
|
||||||
|
},
|
||||||
|
"link": {
|
||||||
|
"name": "link",
|
||||||
|
"types": [
|
||||||
|
"link in",
|
||||||
|
"link out",
|
||||||
|
"link call"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/60-link.js"
|
||||||
|
},
|
||||||
|
"comment": {
|
||||||
|
"name": "comment",
|
||||||
|
"types": [
|
||||||
|
"comment"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/90-comment.js"
|
||||||
|
},
|
||||||
|
"global-config": {
|
||||||
|
"name": "global-config",
|
||||||
|
"types": [
|
||||||
|
"global-config"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/91-global-config.js"
|
||||||
|
},
|
||||||
|
"unknown": {
|
||||||
|
"name": "unknown",
|
||||||
|
"types": [
|
||||||
|
"unknown"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/common/98-unknown.js"
|
||||||
|
},
|
||||||
|
"function": {
|
||||||
|
"name": "function",
|
||||||
|
"types": [
|
||||||
|
"function"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/10-function.js"
|
||||||
|
},
|
||||||
|
"switch": {
|
||||||
|
"name": "switch",
|
||||||
|
"types": [
|
||||||
|
"switch"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/10-switch.js"
|
||||||
|
},
|
||||||
|
"change": {
|
||||||
|
"name": "change",
|
||||||
|
"types": [
|
||||||
|
"change"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/15-change.js"
|
||||||
|
},
|
||||||
|
"range": {
|
||||||
|
"name": "range",
|
||||||
|
"types": [
|
||||||
|
"range"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/16-range.js"
|
||||||
|
},
|
||||||
|
"template": {
|
||||||
|
"name": "template",
|
||||||
|
"types": [
|
||||||
|
"template"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/80-template.js"
|
||||||
|
},
|
||||||
|
"delay": {
|
||||||
|
"name": "delay",
|
||||||
|
"types": [
|
||||||
|
"delay"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/89-delay.js"
|
||||||
|
},
|
||||||
|
"trigger": {
|
||||||
|
"name": "trigger",
|
||||||
|
"types": [
|
||||||
|
"trigger"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/89-trigger.js"
|
||||||
|
},
|
||||||
|
"exec": {
|
||||||
|
"name": "exec",
|
||||||
|
"types": [
|
||||||
|
"exec"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/90-exec.js"
|
||||||
|
},
|
||||||
|
"rbe": {
|
||||||
|
"name": "rbe",
|
||||||
|
"types": [
|
||||||
|
"rbe"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/function/rbe.js"
|
||||||
|
},
|
||||||
|
"tls": {
|
||||||
|
"name": "tls",
|
||||||
|
"types": [
|
||||||
|
"tls-config"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/05-tls.js"
|
||||||
|
},
|
||||||
|
"httpproxy": {
|
||||||
|
"name": "httpproxy",
|
||||||
|
"types": [
|
||||||
|
"http proxy"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/06-httpproxy.js"
|
||||||
|
},
|
||||||
|
"mqtt": {
|
||||||
|
"name": "mqtt",
|
||||||
|
"types": [
|
||||||
|
"mqtt in",
|
||||||
|
"mqtt out",
|
||||||
|
"mqtt-broker"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/10-mqtt.js"
|
||||||
|
},
|
||||||
|
"httpin": {
|
||||||
|
"name": "httpin",
|
||||||
|
"types": [
|
||||||
|
"http in",
|
||||||
|
"http response"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/21-httpin.js"
|
||||||
|
},
|
||||||
|
"httprequest": {
|
||||||
|
"name": "httprequest",
|
||||||
|
"types": [
|
||||||
|
"http request"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/21-httprequest.js"
|
||||||
|
},
|
||||||
|
"websocket": {
|
||||||
|
"name": "websocket",
|
||||||
|
"types": [
|
||||||
|
"websocket in",
|
||||||
|
"websocket out",
|
||||||
|
"websocket-listener",
|
||||||
|
"websocket-client"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/22-websocket.js"
|
||||||
|
},
|
||||||
|
"tcpin": {
|
||||||
|
"name": "tcpin",
|
||||||
|
"types": [
|
||||||
|
"tcp in",
|
||||||
|
"tcp out",
|
||||||
|
"tcp request"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/31-tcpin.js"
|
||||||
|
},
|
||||||
|
"udp": {
|
||||||
|
"name": "udp",
|
||||||
|
"types": [
|
||||||
|
"udp in",
|
||||||
|
"udp out"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/network/32-udp.js"
|
||||||
|
},
|
||||||
|
"CSV": {
|
||||||
|
"name": "CSV",
|
||||||
|
"types": [
|
||||||
|
"csv"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/parsers/70-CSV.js"
|
||||||
|
},
|
||||||
|
"HTML": {
|
||||||
|
"name": "HTML",
|
||||||
|
"types": [
|
||||||
|
"html"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/parsers/70-HTML.js"
|
||||||
|
},
|
||||||
|
"JSON": {
|
||||||
|
"name": "JSON",
|
||||||
|
"types": [
|
||||||
|
"json"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js"
|
||||||
|
},
|
||||||
|
"XML": {
|
||||||
|
"name": "XML",
|
||||||
|
"types": [
|
||||||
|
"xml"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/parsers/70-XML.js"
|
||||||
|
},
|
||||||
|
"YAML": {
|
||||||
|
"name": "YAML",
|
||||||
|
"types": [
|
||||||
|
"yaml"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/parsers/70-YAML.js"
|
||||||
|
},
|
||||||
|
"split": {
|
||||||
|
"name": "split",
|
||||||
|
"types": [
|
||||||
|
"split",
|
||||||
|
"join"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/sequence/17-split.js"
|
||||||
|
},
|
||||||
|
"sort": {
|
||||||
|
"name": "sort",
|
||||||
|
"types": [
|
||||||
|
"sort"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/sequence/18-sort.js"
|
||||||
|
},
|
||||||
|
"batch": {
|
||||||
|
"name": "batch",
|
||||||
|
"types": [
|
||||||
|
"batch"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/sequence/19-batch.js"
|
||||||
|
},
|
||||||
|
"file": {
|
||||||
|
"name": "file",
|
||||||
|
"types": [
|
||||||
|
"file",
|
||||||
|
"file in"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/storage/10-file.js"
|
||||||
|
},
|
||||||
|
"watch": {
|
||||||
|
"name": "watch",
|
||||||
|
"types": [
|
||||||
|
"watch"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": false,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red",
|
||||||
|
"file": "/nix/store/2z20z1753wr8269vn80xlc01x9dakdcs-node-red-4.1.2/lib/node_modules/node-red/packages/node_modules/@node-red/nodes/core/storage/23-watch.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node-red-contrib-aedes": {
|
||||||
|
"name": "node-red-contrib-aedes",
|
||||||
|
"version": "1.2.0",
|
||||||
|
"local": true,
|
||||||
|
"user": true,
|
||||||
|
"nodes": {
|
||||||
|
"aedes-mqtt-broker": {
|
||||||
|
"name": "aedes-mqtt-broker",
|
||||||
|
"types": [
|
||||||
|
"aedes broker"
|
||||||
|
],
|
||||||
|
"enabled": true,
|
||||||
|
"local": true,
|
||||||
|
"user": false,
|
||||||
|
"module": "node-red-contrib-aedes",
|
||||||
|
"file": "/home/priec/Documents/programming/uni/tprais2/node_red/node_modules/node-red-contrib-aedes/aedes.js"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
5
node_red/.config.runtime.json
Normal file
5
node_red/.config.runtime.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"instanceId": "0cf66cbf784d0625",
|
||||||
|
"_credentialSecret": "38da2d6efb7edfc130bda49c2b4770819ec5f33116ccdfb84467e21848d2bdc1",
|
||||||
|
"telemetryEnabled": true
|
||||||
|
}
|
||||||
4
node_red/.config.runtime.json.backup
Normal file
4
node_red/.config.runtime.json.backup
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"instanceId": "0cf66cbf784d0625",
|
||||||
|
"_credentialSecret": "38da2d6efb7edfc130bda49c2b4770819ec5f33116ccdfb84467e21848d2bdc1"
|
||||||
|
}
|
||||||
21
node_red/.config.users.json
Normal file
21
node_red/.config.users.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"_": {
|
||||||
|
"editor": {
|
||||||
|
"view": {
|
||||||
|
"view-store-zoom": false,
|
||||||
|
"view-store-position": false,
|
||||||
|
"view-show-grid": true,
|
||||||
|
"view-snap-grid": true,
|
||||||
|
"view-grid-size": 20,
|
||||||
|
"view-node-status": true,
|
||||||
|
"view-node-info-icon": true,
|
||||||
|
"view-node-show-label": true,
|
||||||
|
"view-show-tips": true,
|
||||||
|
"view-show-welcome-tours": true
|
||||||
|
},
|
||||||
|
"tours": {
|
||||||
|
"welcome": "4.1.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
node_red/.config.users.json.backup
Normal file
18
node_red/.config.users.json.backup
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"_": {
|
||||||
|
"editor": {
|
||||||
|
"view": {
|
||||||
|
"view-store-zoom": false,
|
||||||
|
"view-store-position": false,
|
||||||
|
"view-show-grid": true,
|
||||||
|
"view-snap-grid": true,
|
||||||
|
"view-grid-size": 20,
|
||||||
|
"view-node-status": true,
|
||||||
|
"view-node-info-icon": true,
|
||||||
|
"view-node-show-label": true,
|
||||||
|
"view-show-tips": true,
|
||||||
|
"view-show-welcome-tours": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
151
node_red/.flows.json.backup
Normal file
151
node_red/.flows.json.backup
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "9eb49f5a92a1fd3b",
|
||||||
|
"type": "tab",
|
||||||
|
"label": "Flow 1",
|
||||||
|
"disabled": false,
|
||||||
|
"info": "",
|
||||||
|
"env": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6b2e38e17bfa3f33",
|
||||||
|
"type": "mqtt-broker",
|
||||||
|
"name": "My Local Broker",
|
||||||
|
"broker": "127.0.0.1",
|
||||||
|
"port": 1883,
|
||||||
|
"clientid": "",
|
||||||
|
"autoConnect": true,
|
||||||
|
"usetls": false,
|
||||||
|
"protocolVersion": 4,
|
||||||
|
"keepalive": 60,
|
||||||
|
"cleansession": true,
|
||||||
|
"autoUnsubscribe": true,
|
||||||
|
"birthTopic": "",
|
||||||
|
"birthQos": "0",
|
||||||
|
"birthRetain": "false",
|
||||||
|
"birthPayload": "",
|
||||||
|
"birthMsg": {},
|
||||||
|
"closeTopic": "",
|
||||||
|
"closeQos": "0",
|
||||||
|
"closeRetain": "false",
|
||||||
|
"closePayload": "",
|
||||||
|
"closeMsg": {},
|
||||||
|
"willTopic": "",
|
||||||
|
"willQos": "0",
|
||||||
|
"willRetain": "false",
|
||||||
|
"willPayload": "",
|
||||||
|
"willMsg": {},
|
||||||
|
"userProps": "",
|
||||||
|
"sessionExpiry": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5ad30309e1cee232",
|
||||||
|
"type": "aedes broker",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "My Local Broker",
|
||||||
|
"mqtt_port": 1883,
|
||||||
|
"mqtt_ws_bind": "port",
|
||||||
|
"mqtt_ws_port": "",
|
||||||
|
"mqtt_ws_path": "",
|
||||||
|
"cert": "",
|
||||||
|
"key": "",
|
||||||
|
"ca": "",
|
||||||
|
"certname": "",
|
||||||
|
"keyname": "",
|
||||||
|
"caname": "",
|
||||||
|
"persistence_bind": "memory",
|
||||||
|
"dburl": "",
|
||||||
|
"persist_to_file": false,
|
||||||
|
"usetls": false,
|
||||||
|
"x": 160,
|
||||||
|
"y": 180,
|
||||||
|
"wires": [
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1ceb963f57ac6638",
|
||||||
|
"type": "mqtt in",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "",
|
||||||
|
"topic": "test/message",
|
||||||
|
"qos": "0",
|
||||||
|
"datatype": "auto-detect",
|
||||||
|
"broker": "6b2e38e17bfa3f33",
|
||||||
|
"nl": false,
|
||||||
|
"rap": true,
|
||||||
|
"rh": 0,
|
||||||
|
"inputs": 0,
|
||||||
|
"x": 170,
|
||||||
|
"y": 340,
|
||||||
|
"wires": [
|
||||||
|
[
|
||||||
|
"8745c32a408262ee"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ac89c094a9a2aa4f",
|
||||||
|
"type": "mqtt out",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "ayoy",
|
||||||
|
"topic": "test/message",
|
||||||
|
"qos": "0",
|
||||||
|
"retain": "true",
|
||||||
|
"respTopic": "",
|
||||||
|
"contentType": "",
|
||||||
|
"userProps": "",
|
||||||
|
"correl": "",
|
||||||
|
"expiry": "",
|
||||||
|
"broker": "6b2e38e17bfa3f33",
|
||||||
|
"x": 350,
|
||||||
|
"y": 400,
|
||||||
|
"wires": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b057480d17796035",
|
||||||
|
"type": "inject",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "",
|
||||||
|
"props": [
|
||||||
|
{
|
||||||
|
"p": "payload"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"p": "topic",
|
||||||
|
"vt": "str"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": "",
|
||||||
|
"crontab": "",
|
||||||
|
"once": false,
|
||||||
|
"onceDelay": 0.1,
|
||||||
|
"topic": "",
|
||||||
|
"payload": "",
|
||||||
|
"payloadType": "date",
|
||||||
|
"x": 160,
|
||||||
|
"y": 400,
|
||||||
|
"wires": [
|
||||||
|
[
|
||||||
|
"ac89c094a9a2aa4f"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8745c32a408262ee",
|
||||||
|
"type": "debug",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "debug 1",
|
||||||
|
"active": true,
|
||||||
|
"tosidebar": true,
|
||||||
|
"console": false,
|
||||||
|
"tostatus": false,
|
||||||
|
"complete": "false",
|
||||||
|
"statusVal": "",
|
||||||
|
"statusType": "auto",
|
||||||
|
"x": 360,
|
||||||
|
"y": 340,
|
||||||
|
"wires": []
|
||||||
|
}
|
||||||
|
]
|
||||||
3
node_red/.flows_cred.json.backup
Normal file
3
node_red/.flows_cred.json.backup
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"$": "8770e45980797682718cbb951c791337xv7/hsBUhHi9VowKbiLRM6lAK5vAOoU="
|
||||||
|
}
|
||||||
151
node_red/flows.json
Normal file
151
node_red/flows.json
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": "9eb49f5a92a1fd3b",
|
||||||
|
"type": "tab",
|
||||||
|
"label": "Flow 1",
|
||||||
|
"disabled": false,
|
||||||
|
"info": "",
|
||||||
|
"env": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "6b2e38e17bfa3f33",
|
||||||
|
"type": "mqtt-broker",
|
||||||
|
"name": "My Local Broker",
|
||||||
|
"broker": "127.0.0.1",
|
||||||
|
"port": 1883,
|
||||||
|
"clientid": "",
|
||||||
|
"autoConnect": true,
|
||||||
|
"usetls": false,
|
||||||
|
"protocolVersion": 4,
|
||||||
|
"keepalive": 60,
|
||||||
|
"cleansession": true,
|
||||||
|
"autoUnsubscribe": true,
|
||||||
|
"birthTopic": "",
|
||||||
|
"birthQos": "0",
|
||||||
|
"birthRetain": "false",
|
||||||
|
"birthPayload": "",
|
||||||
|
"birthMsg": {},
|
||||||
|
"closeTopic": "",
|
||||||
|
"closeQos": "0",
|
||||||
|
"closeRetain": "false",
|
||||||
|
"closePayload": "",
|
||||||
|
"closeMsg": {},
|
||||||
|
"willTopic": "",
|
||||||
|
"willQos": "0",
|
||||||
|
"willRetain": "false",
|
||||||
|
"willPayload": "",
|
||||||
|
"willMsg": {},
|
||||||
|
"userProps": "",
|
||||||
|
"sessionExpiry": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "5ad30309e1cee232",
|
||||||
|
"type": "aedes broker",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "My Local Broker",
|
||||||
|
"mqtt_port": 1883,
|
||||||
|
"mqtt_ws_bind": "port",
|
||||||
|
"mqtt_ws_port": "",
|
||||||
|
"mqtt_ws_path": "",
|
||||||
|
"cert": "",
|
||||||
|
"key": "",
|
||||||
|
"ca": "",
|
||||||
|
"certname": "",
|
||||||
|
"keyname": "",
|
||||||
|
"caname": "",
|
||||||
|
"persistence_bind": "memory",
|
||||||
|
"dburl": "",
|
||||||
|
"persist_to_file": false,
|
||||||
|
"usetls": false,
|
||||||
|
"x": 160,
|
||||||
|
"y": 180,
|
||||||
|
"wires": [
|
||||||
|
[],
|
||||||
|
[]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "1ceb963f57ac6638",
|
||||||
|
"type": "mqtt in",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "",
|
||||||
|
"topic": "test/message",
|
||||||
|
"qos": "0",
|
||||||
|
"datatype": "auto-detect",
|
||||||
|
"broker": "6b2e38e17bfa3f33",
|
||||||
|
"nl": false,
|
||||||
|
"rap": true,
|
||||||
|
"rh": 0,
|
||||||
|
"inputs": 0,
|
||||||
|
"x": 170,
|
||||||
|
"y": 340,
|
||||||
|
"wires": [
|
||||||
|
[
|
||||||
|
"8745c32a408262ee"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ac89c094a9a2aa4f",
|
||||||
|
"type": "mqtt out",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "ayoy",
|
||||||
|
"topic": "test/message",
|
||||||
|
"qos": "0",
|
||||||
|
"retain": "true",
|
||||||
|
"respTopic": "",
|
||||||
|
"contentType": "",
|
||||||
|
"userProps": "",
|
||||||
|
"correl": "",
|
||||||
|
"expiry": "",
|
||||||
|
"broker": "6b2e38e17bfa3f33",
|
||||||
|
"x": 350,
|
||||||
|
"y": 400,
|
||||||
|
"wires": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "b057480d17796035",
|
||||||
|
"type": "inject",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "",
|
||||||
|
"props": [
|
||||||
|
{
|
||||||
|
"p": "payload"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"p": "topic",
|
||||||
|
"vt": "str"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repeat": "",
|
||||||
|
"crontab": "",
|
||||||
|
"once": false,
|
||||||
|
"onceDelay": 0.1,
|
||||||
|
"topic": "",
|
||||||
|
"payload": "kkkk",
|
||||||
|
"payloadType": "str",
|
||||||
|
"x": 150,
|
||||||
|
"y": 400,
|
||||||
|
"wires": [
|
||||||
|
[
|
||||||
|
"ac89c094a9a2aa4f"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8745c32a408262ee",
|
||||||
|
"type": "debug",
|
||||||
|
"z": "9eb49f5a92a1fd3b",
|
||||||
|
"name": "debug 1",
|
||||||
|
"active": true,
|
||||||
|
"tosidebar": true,
|
||||||
|
"console": false,
|
||||||
|
"tostatus": false,
|
||||||
|
"complete": "false",
|
||||||
|
"statusVal": "",
|
||||||
|
"statusType": "auto",
|
||||||
|
"x": 360,
|
||||||
|
"y": 340,
|
||||||
|
"wires": []
|
||||||
|
}
|
||||||
|
]
|
||||||
3
node_red/flows_cred.json
Normal file
3
node_red/flows_cred.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"$": "596730fc5140bf0eb24cdc8ddeb843edtYicTcctvTGchZ5c2KnduGh5Lxrfwph4OyEo+d/AujlSsylmjdI0JZyFZdbv"
|
||||||
|
}
|
||||||
812
node_red/package-lock.json
generated
Normal file
812
node_red/package-lock.json
generated
Normal file
@@ -0,0 +1,812 @@
|
|||||||
|
{
|
||||||
|
"name": "node_red",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"dependencies": {
|
||||||
|
"node-red-contrib-aedes": "^1.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/runtime": {
|
||||||
|
"version": "7.29.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
|
||||||
|
"integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@mongodb-js/saslprep": {
|
||||||
|
"version": "1.4.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz",
|
||||||
|
"integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"sparse-bitfield": "^3.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "25.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
|
||||||
|
"integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"undici-types": "~7.18.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/readable-stream": {
|
||||||
|
"version": "4.0.23",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.23.tgz",
|
||||||
|
"integrity": "sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/webidl-conversions": {
|
||||||
|
"version": "7.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
|
||||||
|
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/@types/whatwg-url": {
|
||||||
|
"version": "11.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
|
||||||
|
"integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/webidl-conversions": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/aedes": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/aedes/-/aedes-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-yVb/7ZEcUAV3MqMkMHv5aOTnyeHDLDlkHo0tD1YnBoC3+rdUcMfILTvTl7i4Y7zTaujQD5TTznXdJFOBeaUlrA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"aedes-packet": "^3.0.0",
|
||||||
|
"aedes-persistence": "^10.2.2",
|
||||||
|
"end-of-stream": "^1.4.5",
|
||||||
|
"fastfall": "^1.5.1",
|
||||||
|
"fastparallel": "^2.4.1",
|
||||||
|
"fastseries": "^2.0.0",
|
||||||
|
"hyperid": "^3.3.0",
|
||||||
|
"mqemitter": "^7.1.0",
|
||||||
|
"mqtt-packet": "^9.0.2",
|
||||||
|
"retimer": "^4.0.0",
|
||||||
|
"reusify": "^1.1.0",
|
||||||
|
"uuid": "^11.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/aedes"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"aedes-persistence-level": "^9.1.2",
|
||||||
|
"aedes-persistence-mongodb": "^9.3.1",
|
||||||
|
"aedes-persistence-redis": "^11.2.1"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"aedes-persistence-level": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"aedes-persistence-mongodb": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"aedes-persistence-redis": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/aedes-packet": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aedes-packet/-/aedes-packet-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-swASey0BxGs4/npZGWoiVDmnEyPvVFIRY6l2LVKL4rbiW8IhcIGDLfnb20Qo8U20itXlitAKPQ3MVTEbOGG5ZA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"mqtt-packet": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/aedes-packet/node_modules/bl": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^5.5.0",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"readable-stream": "^3.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/aedes-packet/node_modules/mqtt-packet": {
|
||||||
|
"version": "7.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-7.1.2.tgz",
|
||||||
|
"integrity": "sha512-FFZbcZ2omsf4c5TxEQfcX9hI+JzDpDKPT46OmeIBpVA7+t32ey25UNqlqNXTmeZOr5BLsSIERpQQLsFWJS94SQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"bl": "^4.0.2",
|
||||||
|
"debug": "^4.1.1",
|
||||||
|
"process-nextick-args": "^2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/aedes-packet/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/aedes-persistence": {
|
||||||
|
"version": "10.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/aedes-persistence/-/aedes-persistence-10.2.2.tgz",
|
||||||
|
"integrity": "sha512-lbiViUGXxOyUakU01xvD758LGOLJ8T7PzpT3q2q8enMSMFSigy0dYQc0b7bgHcz96AYJjEraQSfVpXH7L546TA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"aedes-packet": "^3.0.0",
|
||||||
|
"qlobber": "^8.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/aedes-persistence-mongodb": {
|
||||||
|
"version": "9.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/aedes-persistence-mongodb/-/aedes-persistence-mongodb-9.4.1.tgz",
|
||||||
|
"integrity": "sha512-Y6Mq0k4WqZSK/xBVO1R/wj6FIpnFu13jsfRvAv6dMrr0DZwENpZn6f0SQIsXHk7IkZXAKMZ9gWI7xxN3Roeaog==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"aedes-persistence": "^10.2.2",
|
||||||
|
"escape-string-regexp": "^4.0.0",
|
||||||
|
"mongodb": "6.17",
|
||||||
|
"qlobber": "^8.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/bl": {
|
||||||
|
"version": "6.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/bl/-/bl-6.1.6.tgz",
|
||||||
|
"integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/readable-stream": "^4.0.0",
|
||||||
|
"buffer": "^6.0.3",
|
||||||
|
"inherits": "^2.0.4",
|
||||||
|
"readable-stream": "^4.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/bl/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/bson": {
|
||||||
|
"version": "6.10.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz",
|
||||||
|
"integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.20.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/buffer": {
|
||||||
|
"version": "5.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
||||||
|
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
||||||
|
"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.1.13"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "4.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
|
||||||
|
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/end-of-stream": {
|
||||||
|
"version": "1.4.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
|
||||||
|
"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"once": "^1.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escape-string-regexp": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/fastfall": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-KH6p+Z8AKPXnmA7+Iz2Lh8ARCMr+8WNPVludm1LGkZoD2MjY6LVnRMtTKhkdzI+jr0RzQWXKzKyBJm1zoHEL4Q==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"reusify": "^1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fastparallel": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-qUmhxPgNHmvRjZKBFUNI0oZuuH9OlSIOXmJ98lhKPxMZZ7zS/Fi0wRHOihDSz0R1YiIOjxzOY4bq65YTcdBi2Q==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"reusify": "^1.0.4",
|
||||||
|
"xtend": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fastseries": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastseries/-/fastseries-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-XBU9RXeoYc2/VnvMhplAxEmZLfIk7cvTBu+xwoBuTI8pL19E03cmca17QQycKIdxgwCeFA/a4u27gv1h3ya5LQ==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/hyperid": {
|
||||||
|
"version": "3.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/hyperid/-/hyperid-3.3.0.tgz",
|
||||||
|
"integrity": "sha512-7qhCVT4MJIoEsNcbhglhdmBKb09QtcmJNiIQGq7js/Khf5FtQQ9bzcAuloeqBeee7XD7JqDeve9KNlQya5tSGQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"buffer": "^5.2.1",
|
||||||
|
"uuid": "^8.3.2",
|
||||||
|
"uuid-parse": "^1.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/hyperid/node_modules/uuid": {
|
||||||
|
"version": "8.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/memory-pager": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
||||||
|
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/mongodb": {
|
||||||
|
"version": "6.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz",
|
||||||
|
"integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@mongodb-js/saslprep": "^1.1.9",
|
||||||
|
"bson": "^6.10.4",
|
||||||
|
"mongodb-connection-string-url": "^3.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.20.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@aws-sdk/credential-providers": "^3.188.0",
|
||||||
|
"@mongodb-js/zstd": "^1.1.0 || ^2.0.0",
|
||||||
|
"gcp-metadata": "^5.2.0",
|
||||||
|
"kerberos": "^2.0.1",
|
||||||
|
"mongodb-client-encryption": ">=6.0.0 <7",
|
||||||
|
"snappy": "^7.2.2",
|
||||||
|
"socks": "^2.7.1"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@aws-sdk/credential-providers": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@mongodb-js/zstd": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"gcp-metadata": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"kerberos": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"mongodb-client-encryption": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"snappy": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"socks": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mongodb-connection-string-url": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/whatwg-url": "^11.0.2",
|
||||||
|
"whatwg-url": "^14.1.0 || ^13.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mqemitter": {
|
||||||
|
"version": "7.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mqemitter/-/mqemitter-7.1.0.tgz",
|
||||||
|
"integrity": "sha512-GnBDNz3lxmllW201ne0mrmdy5tPOTnc79jjVcsfUa2LG2pUGeyGWVeiae6ZysfC/64XrYOqCKRAQYrB7pGyBVQ==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"fastparallel": "^2.4.1",
|
||||||
|
"qlobber": "^8.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/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/node-red-contrib-aedes": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-red-contrib-aedes/-/node-red-contrib-aedes-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-mymsd/GIu6NhLMw9cAKhRWCmJKmVtJknKDXZlQ9QZvcBc5FXDVkWbYMf0l0HYFjaq9CNPsqT2cJddoW18yOQeQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"aedes": "^1.0.0",
|
||||||
|
"aedes-persistence-mongodb": "^9.3.0",
|
||||||
|
"ws": "^8.18.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=20.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/once": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||||
|
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"wrappy": "1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/punycode": {
|
||||||
|
"version": "2.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
||||||
|
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qlobber": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/qlobber/-/qlobber-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-O+Wd1chXj5YE1DwmD+ae0bXiSLehmnS3czlC1R9FL/Nt/3q8uMS1bIHmg2lJfCoiimCxClWM8AAuJrF0EvNiog==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/readable-stream/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/retimer": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/retimer/-/retimer-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-fZIVtvbOsQsxNSDhpdPOX4lx5Ss2ni+S72AUBitARpFhtA3UzrAjQ6gDtypB2/+l7L+1VQgAgpvAKY66mElH0w==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"worker-timers": "^7.0.75"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/reusify": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"iojs": ">=1.0.0",
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/sparse-bitfield": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"memory-pager": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/tr46": {
|
||||||
|
"version": "5.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz",
|
||||||
|
"integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"punycode": "^2.3.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tslib": {
|
||||||
|
"version": "2.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||||
|
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
|
||||||
|
"license": "0BSD"
|
||||||
|
},
|
||||||
|
"node_modules/undici-types": {
|
||||||
|
"version": "7.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
|
||||||
|
"integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
|
||||||
|
"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/uuid": {
|
||||||
|
"version": "11.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
||||||
|
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
|
||||||
|
"funding": [
|
||||||
|
"https://github.com/sponsors/broofa",
|
||||||
|
"https://github.com/sponsors/ctavan"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/esm/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/uuid-parse": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid-parse/-/uuid-parse-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
|
||||||
|
"license": "BSD-2-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/whatwg-url": {
|
||||||
|
"version": "14.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz",
|
||||||
|
"integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"tr46": "^5.1.0",
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/wrappy": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||||
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/ws": {
|
||||||
|
"version": "8.20.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
|
||||||
|
"integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/xtend": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
5
node_red/package.json
Normal file
5
node_red/package.json
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"node-red-contrib-aedes": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
623
node_red/settings.js
Normal file
623
node_red/settings.js
Normal file
@@ -0,0 +1,623 @@
|
|||||||
|
/**
|
||||||
|
* This is the default settings file provided by Node-RED.
|
||||||
|
*
|
||||||
|
* It can contain any valid JavaScript code that will get run when Node-RED
|
||||||
|
* is started.
|
||||||
|
*
|
||||||
|
* Lines that start with // are commented out.
|
||||||
|
* Each entry should be separated from the entries above and below by a comma ','
|
||||||
|
*
|
||||||
|
* For more information about individual settings, refer to the documentation:
|
||||||
|
* https://nodered.org/docs/user-guide/runtime/configuration
|
||||||
|
*
|
||||||
|
* The settings are split into the following sections:
|
||||||
|
* - Flow File and User Directory Settings
|
||||||
|
* - Security
|
||||||
|
* - Server Settings
|
||||||
|
* - Runtime Settings
|
||||||
|
* - Editor Settings
|
||||||
|
* - Node Settings
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Flow File and User Directory Settings
|
||||||
|
* - flowFile
|
||||||
|
* - credentialSecret
|
||||||
|
* - flowFilePretty
|
||||||
|
* - userDir
|
||||||
|
* - nodesDir
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** The file containing the flows. If not set, defaults to flows_<hostname>.json **/
|
||||||
|
flowFile: 'flows.json',
|
||||||
|
|
||||||
|
/** By default, credentials are encrypted in storage using a generated key. To
|
||||||
|
* specify your own secret, set the following property.
|
||||||
|
* If you want to disable encryption of credentials, set this property to false.
|
||||||
|
* Note: once you set this property, do not change it - doing so will prevent
|
||||||
|
* node-red from being able to decrypt your existing credentials and they will be
|
||||||
|
* lost.
|
||||||
|
*/
|
||||||
|
//credentialSecret: "a-secret-key",
|
||||||
|
|
||||||
|
/** By default, the flow JSON will be formatted over multiple lines making
|
||||||
|
* it easier to compare changes when using version control.
|
||||||
|
* To disable pretty-printing of the JSON set the following property to false.
|
||||||
|
*/
|
||||||
|
flowFilePretty: true,
|
||||||
|
|
||||||
|
/** By default, all user data is stored in a directory called `.node-red` under
|
||||||
|
* the user's home directory. To use a different location, the following
|
||||||
|
* property can be used
|
||||||
|
*/
|
||||||
|
//userDir: '/home/nol/.node-red/',
|
||||||
|
|
||||||
|
/** Node-RED scans the `nodes` directory in the userDir to find local node files.
|
||||||
|
* The following property can be used to specify an additional directory to scan.
|
||||||
|
*/
|
||||||
|
//nodesDir: '/home/nol/.node-red/nodes',
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Security
|
||||||
|
* - adminAuth
|
||||||
|
* - https
|
||||||
|
* - httpsRefreshInterval
|
||||||
|
* - requireHttps
|
||||||
|
* - httpNodeAuth
|
||||||
|
* - httpStaticAuth
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** To password protect the Node-RED editor and admin API, the following
|
||||||
|
* property can be used. See https://nodered.org/docs/security.html for details.
|
||||||
|
*/
|
||||||
|
//adminAuth: {
|
||||||
|
// type: "credentials",
|
||||||
|
// users: [{
|
||||||
|
// username: "admin",
|
||||||
|
// password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
|
||||||
|
// permissions: "*"
|
||||||
|
// }]
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** The following property can be used to enable HTTPS
|
||||||
|
* This property can be either an object, containing both a (private) key
|
||||||
|
* and a (public) certificate, or a function that returns such an object.
|
||||||
|
* See http://nodejs.org/api/https.html#https_https_createserver_options_requestlistener
|
||||||
|
* for details of its contents.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Option 1: static object */
|
||||||
|
//https: {
|
||||||
|
// key: require("fs").readFileSync('privkey.pem'),
|
||||||
|
// cert: require("fs").readFileSync('cert.pem')
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** Option 2: function that returns the HTTP configuration object */
|
||||||
|
// https: function() {
|
||||||
|
// // This function should return the options object, or a Promise
|
||||||
|
// // that resolves to the options object
|
||||||
|
// return {
|
||||||
|
// key: require("fs").readFileSync('privkey.pem'),
|
||||||
|
// cert: require("fs").readFileSync('cert.pem')
|
||||||
|
// }
|
||||||
|
// },
|
||||||
|
|
||||||
|
/** If the `https` setting is a function, the following setting can be used
|
||||||
|
* to set how often, in hours, the function will be called. That can be used
|
||||||
|
* to refresh any certificates.
|
||||||
|
*/
|
||||||
|
//httpsRefreshInterval : 12,
|
||||||
|
|
||||||
|
/** The following property can be used to cause insecure HTTP connections to
|
||||||
|
* be redirected to HTTPS.
|
||||||
|
*/
|
||||||
|
//requireHttps: true,
|
||||||
|
|
||||||
|
/** To password protect the node-defined HTTP endpoints (httpNodeRoot),
|
||||||
|
* including node-red-dashboard, or the static content (httpStatic), the
|
||||||
|
* following properties can be used.
|
||||||
|
* The `pass` field is a bcrypt hash of the password.
|
||||||
|
* See https://nodered.org/docs/security.html#generating-the-password-hash
|
||||||
|
*/
|
||||||
|
//httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
|
||||||
|
//httpStaticAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Server Settings
|
||||||
|
* - uiPort
|
||||||
|
* - uiHost
|
||||||
|
* - apiMaxLength
|
||||||
|
* - httpServerOptions
|
||||||
|
* - httpAdminRoot
|
||||||
|
* - httpAdminMiddleware
|
||||||
|
* - httpAdminCookieOptions
|
||||||
|
* - httpNodeRoot
|
||||||
|
* - httpNodeCors
|
||||||
|
* - httpNodeMiddleware
|
||||||
|
* - httpStatic
|
||||||
|
* - httpStaticRoot
|
||||||
|
* - httpStaticCors
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** the tcp port that the Node-RED web server is listening on */
|
||||||
|
uiPort: process.env.PORT || 1880,
|
||||||
|
|
||||||
|
/** By default, the Node-RED UI accepts connections on all IPv4 interfaces.
|
||||||
|
* To listen on all IPv6 addresses, set uiHost to "::",
|
||||||
|
* The following property can be used to listen on a specific interface. For
|
||||||
|
* example, the following would only allow connections from the local machine.
|
||||||
|
*/
|
||||||
|
//uiHost: "127.0.0.1",
|
||||||
|
|
||||||
|
/** The maximum size of HTTP request that will be accepted by the runtime api.
|
||||||
|
* Default: 5mb
|
||||||
|
*/
|
||||||
|
//apiMaxLength: '5mb',
|
||||||
|
|
||||||
|
/** The following property can be used to pass custom options to the Express.js
|
||||||
|
* server used by Node-RED. For a full list of available options, refer
|
||||||
|
* to http://expressjs.com/en/api.html#app.settings.table
|
||||||
|
*/
|
||||||
|
//httpServerOptions: { },
|
||||||
|
|
||||||
|
/** By default, the Node-RED UI is available at http://localhost:1880/
|
||||||
|
* The following property can be used to specify a different root path.
|
||||||
|
* If set to false, this is disabled.
|
||||||
|
*/
|
||||||
|
//httpAdminRoot: '/admin',
|
||||||
|
|
||||||
|
/** The following property can be used to add a custom middleware function
|
||||||
|
* in front of all admin http routes. For example, to set custom http
|
||||||
|
* headers. It can be a single function or an array of middleware functions.
|
||||||
|
*/
|
||||||
|
// httpAdminMiddleware: function(req,res,next) {
|
||||||
|
// // Set the X-Frame-Options header to limit where the editor
|
||||||
|
// // can be embedded
|
||||||
|
// //res.set('X-Frame-Options', 'sameorigin');
|
||||||
|
// next();
|
||||||
|
// },
|
||||||
|
|
||||||
|
/** The following property can be used to set addition options on the session
|
||||||
|
* cookie used as part of adminAuth authentication system
|
||||||
|
* Available options are documented here: https://www.npmjs.com/package/express-session#cookie
|
||||||
|
*/
|
||||||
|
// httpAdminCookieOptions: { },
|
||||||
|
|
||||||
|
/** Some nodes, such as HTTP In, can be used to listen for incoming http requests.
|
||||||
|
* By default, these are served relative to '/'. The following property
|
||||||
|
* can be used to specify a different root path. If set to false, this is
|
||||||
|
* disabled.
|
||||||
|
*/
|
||||||
|
//httpNodeRoot: '/red-nodes',
|
||||||
|
|
||||||
|
/** The following property can be used to configure cross-origin resource sharing
|
||||||
|
* in the HTTP nodes.
|
||||||
|
* See https://github.com/troygoode/node-cors#configuration-options for
|
||||||
|
* details on its contents. The following is a basic permissive set of options:
|
||||||
|
*/
|
||||||
|
//httpNodeCors: {
|
||||||
|
// origin: "*",
|
||||||
|
// methods: "GET,PUT,POST,DELETE"
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** If you need to set an http proxy please set an environment variable
|
||||||
|
* called http_proxy (or HTTP_PROXY) outside of Node-RED in the operating system.
|
||||||
|
* For example - http_proxy=http://myproxy.com:8080
|
||||||
|
* (Setting it here will have no effect)
|
||||||
|
* You may also specify no_proxy (or NO_PROXY) to supply a comma separated
|
||||||
|
* list of domains to not proxy, eg - no_proxy=.acme.co,.acme.co.uk
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** The following property can be used to add a custom middleware function
|
||||||
|
* in front of all http in nodes. This allows custom authentication to be
|
||||||
|
* applied to all http in nodes, or any other sort of common request processing.
|
||||||
|
* It can be a single function or an array of middleware functions.
|
||||||
|
*/
|
||||||
|
//httpNodeMiddleware: function(req,res,next) {
|
||||||
|
// // Handle/reject the request, or pass it on to the http in node by calling next();
|
||||||
|
// // Optionally skip our rawBodyParser by setting this to true;
|
||||||
|
// //req.skipRawBodyParser = true;
|
||||||
|
// next();
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** When httpAdminRoot is used to move the UI to a different root path, the
|
||||||
|
* following property can be used to identify a directory of static content
|
||||||
|
* that should be served at http://localhost:1880/.
|
||||||
|
* When httpStaticRoot is set differently to httpAdminRoot, there is no need
|
||||||
|
* to move httpAdminRoot
|
||||||
|
*/
|
||||||
|
//httpStatic: '/home/nol/node-red-static/', //single static source
|
||||||
|
/**
|
||||||
|
* OR multiple static sources can be created using an array of objects...
|
||||||
|
* Each object can also contain an options object for further configuration.
|
||||||
|
* See https://expressjs.com/en/api.html#express.static for available options.
|
||||||
|
* They can also contain an option `cors` object to set specific Cross-Origin
|
||||||
|
* Resource Sharing rules for the source. `httpStaticCors` can be used to
|
||||||
|
* set a default cors policy across all static routes.
|
||||||
|
*/
|
||||||
|
//httpStatic: [
|
||||||
|
// {path: '/home/nol/pics/', root: "/img/"},
|
||||||
|
// {path: '/home/nol/reports/', root: "/doc/"},
|
||||||
|
// {path: '/home/nol/videos/', root: "/vid/", options: {maxAge: '1d'}}
|
||||||
|
//],
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All static routes will be appended to httpStaticRoot
|
||||||
|
* e.g. if httpStatic = "/home/nol/docs" and httpStaticRoot = "/static/"
|
||||||
|
* then "/home/nol/docs" will be served at "/static/"
|
||||||
|
* e.g. if httpStatic = [{path: '/home/nol/pics/', root: "/img/"}]
|
||||||
|
* and httpStaticRoot = "/static/"
|
||||||
|
* then "/home/nol/pics/" will be served at "/static/img/"
|
||||||
|
*/
|
||||||
|
//httpStaticRoot: '/static/',
|
||||||
|
|
||||||
|
/** The following property can be used to configure cross-origin resource sharing
|
||||||
|
* in the http static routes.
|
||||||
|
* See https://github.com/troygoode/node-cors#configuration-options for
|
||||||
|
* details on its contents. The following is a basic permissive set of options:
|
||||||
|
*/
|
||||||
|
//httpStaticCors: {
|
||||||
|
// origin: "*",
|
||||||
|
// methods: "GET,PUT,POST,DELETE"
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** The following property can be used to modify proxy options */
|
||||||
|
// proxyOptions: {
|
||||||
|
// mode: "legacy", // legacy mode is for non-strict previous proxy determination logic (node-red < v4 compatible)
|
||||||
|
// },
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Runtime Settings
|
||||||
|
* - lang
|
||||||
|
* - runtimeState
|
||||||
|
* - telemetry
|
||||||
|
* - diagnostics
|
||||||
|
* - logging
|
||||||
|
* - contextStorage
|
||||||
|
* - exportGlobalContextKeys
|
||||||
|
* - externalModules
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** Uncomment the following to run node-red in your preferred language.
|
||||||
|
* Available languages include: en-US (default), ja, de, zh-CN, zh-TW, ru, ko
|
||||||
|
* Some languages are more complete than others.
|
||||||
|
*/
|
||||||
|
// lang: "de",
|
||||||
|
|
||||||
|
/** Configure diagnostics options
|
||||||
|
* - enabled: When `enabled` is `true` (or unset), diagnostics data will
|
||||||
|
* be available at http://localhost:1880/diagnostics
|
||||||
|
* - ui: When `ui` is `true` (or unset), the action `show-system-info` will
|
||||||
|
* be available to logged in users of node-red editor
|
||||||
|
*/
|
||||||
|
diagnostics: {
|
||||||
|
/** enable or disable diagnostics endpoint. Must be set to `false` to disable */
|
||||||
|
enabled: true,
|
||||||
|
/** enable or disable diagnostics display in the node-red editor. Must be set to `false` to disable */
|
||||||
|
ui: true,
|
||||||
|
},
|
||||||
|
/** Configure runtimeState options
|
||||||
|
* - enabled: When `enabled` is `true` flows runtime can be Started/Stopped
|
||||||
|
* by POSTing to available at http://localhost:1880/flows/state
|
||||||
|
* - ui: When `ui` is `true`, the action `core:start-flows` and
|
||||||
|
* `core:stop-flows` will be available to logged in users of node-red editor
|
||||||
|
* Also, the deploy menu (when set to default) will show a stop or start button
|
||||||
|
*/
|
||||||
|
runtimeState: {
|
||||||
|
/** enable or disable flows/state endpoint. Must be set to `false` to disable */
|
||||||
|
enabled: false,
|
||||||
|
/** show or hide runtime stop/start options in the node-red editor. Must be set to `false` to hide */
|
||||||
|
ui: false,
|
||||||
|
},
|
||||||
|
telemetry: {
|
||||||
|
/**
|
||||||
|
* By default, telemetry is disabled until the user provides consent the first
|
||||||
|
* time they open the editor.
|
||||||
|
*
|
||||||
|
* The following property can be uncommented and set to true/false to enable/disable
|
||||||
|
* telemetry without seeking further consent in the editor.
|
||||||
|
* The user can override this setting via the user settings dialog within the editor
|
||||||
|
*/
|
||||||
|
// enabled: true,
|
||||||
|
/**
|
||||||
|
* If telemetry is enabled, the editor will notify the user if a new version of Node-RED
|
||||||
|
* is available. Set the following property to false to disable this notification.
|
||||||
|
*/
|
||||||
|
// updateNotification: true
|
||||||
|
},
|
||||||
|
/** Configure the logging output */
|
||||||
|
logging: {
|
||||||
|
/** Only console logging is currently supported */
|
||||||
|
console: {
|
||||||
|
/** Level of logging to be recorded. Options are:
|
||||||
|
* fatal - only those errors which make the application unusable should be recorded
|
||||||
|
* error - record errors which are deemed fatal for a particular request + fatal errors
|
||||||
|
* warn - record problems which are non fatal + errors + fatal errors
|
||||||
|
* info - record information about the general running of the application + warn + error + fatal errors
|
||||||
|
* debug - record information which is more verbose than info + info + warn + error + fatal errors
|
||||||
|
* trace - record very detailed logging + debug + info + warn + error + fatal errors
|
||||||
|
* off - turn off all logging (doesn't affect metrics or audit)
|
||||||
|
*/
|
||||||
|
level: "info",
|
||||||
|
/** Whether or not to include metric events in the log output */
|
||||||
|
metrics: false,
|
||||||
|
/** Whether or not to include audit events in the log output */
|
||||||
|
audit: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/** Context Storage
|
||||||
|
* The following property can be used to enable context storage. The configuration
|
||||||
|
* provided here will enable file-based context that flushes to disk every 30 seconds.
|
||||||
|
* Refer to the documentation for further options: https://nodered.org/docs/api/context/
|
||||||
|
*/
|
||||||
|
//contextStorage: {
|
||||||
|
// default: {
|
||||||
|
// module:"localfilesystem"
|
||||||
|
// },
|
||||||
|
//},
|
||||||
|
|
||||||
|
/** `global.keys()` returns a list of all properties set in global context.
|
||||||
|
* This allows them to be displayed in the Context Sidebar within the editor.
|
||||||
|
* In some circumstances it is not desirable to expose them to the editor. The
|
||||||
|
* following property can be used to hide any property set in `functionGlobalContext`
|
||||||
|
* from being list by `global.keys()`.
|
||||||
|
* By default, the property is set to false to avoid accidental exposure of
|
||||||
|
* their values. Setting this to true will cause the keys to be listed.
|
||||||
|
*/
|
||||||
|
exportGlobalContextKeys: false,
|
||||||
|
|
||||||
|
/** Configure how the runtime will handle external npm modules.
|
||||||
|
* This covers:
|
||||||
|
* - whether the editor will allow new node modules to be installed
|
||||||
|
* - whether nodes, such as the Function node are allowed to have their
|
||||||
|
* own dynamically configured dependencies.
|
||||||
|
* The allow/denyList options can be used to limit what modules the runtime
|
||||||
|
* will install/load. It can use '*' as a wildcard that matches anything.
|
||||||
|
*/
|
||||||
|
externalModules: {
|
||||||
|
// autoInstall: false, /** Whether the runtime will attempt to automatically install missing modules */
|
||||||
|
// autoInstallRetry: 30, /** Interval, in seconds, between reinstall attempts */
|
||||||
|
// palette: { /** Configuration for the Palette Manager */
|
||||||
|
// allowInstall: true, /** Enable the Palette Manager in the editor */
|
||||||
|
// allowUpdate: true, /** Allow modules to be updated in the Palette Manager */
|
||||||
|
// allowUpload: true, /** Allow module tgz files to be uploaded and installed */
|
||||||
|
// allowList: ['*'],
|
||||||
|
// denyList: [],
|
||||||
|
// allowUpdateList: ['*'],
|
||||||
|
// denyUpdateList: []
|
||||||
|
// },
|
||||||
|
// modules: { /** Configuration for node-specified modules */
|
||||||
|
// allowInstall: true,
|
||||||
|
// allowList: [],
|
||||||
|
// denyList: []
|
||||||
|
// }
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Editor Settings
|
||||||
|
* - disableEditor
|
||||||
|
* - editorTheme
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** The following property can be used to disable the editor. The admin API
|
||||||
|
* is not affected by this option. To disable both the editor and the admin
|
||||||
|
* API, use either the httpRoot or httpAdminRoot properties
|
||||||
|
*/
|
||||||
|
//disableEditor: false,
|
||||||
|
|
||||||
|
/** Customising the editor
|
||||||
|
* See https://nodered.org/docs/user-guide/runtime/configuration#editor-themes
|
||||||
|
* for all available options.
|
||||||
|
*/
|
||||||
|
editorTheme: {
|
||||||
|
/** The following property can be used to set a custom theme for the editor.
|
||||||
|
* See https://github.com/node-red-contrib-themes/theme-collection for
|
||||||
|
* a collection of themes to chose from.
|
||||||
|
*/
|
||||||
|
//theme: "",
|
||||||
|
|
||||||
|
/** To disable the 'Welcome to Node-RED' tour that is displayed the first
|
||||||
|
* time you access the editor for each release of Node-RED, set this to false
|
||||||
|
*/
|
||||||
|
//tours: false,
|
||||||
|
|
||||||
|
palette: {
|
||||||
|
/** The following property can be used to order the categories in the editor
|
||||||
|
* palette. If a node's category is not in the list, the category will get
|
||||||
|
* added to the end of the palette.
|
||||||
|
* If not set, the following default order is used:
|
||||||
|
*/
|
||||||
|
//categories: ['subflows', 'common', 'function', 'network', 'sequence', 'parser', 'storage'],
|
||||||
|
},
|
||||||
|
|
||||||
|
projects: {
|
||||||
|
/** To enable the Projects feature, set this value to true */
|
||||||
|
enabled: false,
|
||||||
|
workflow: {
|
||||||
|
/** Set the default projects workflow mode.
|
||||||
|
* - manual - you must manually commit changes
|
||||||
|
* - auto - changes are automatically committed
|
||||||
|
* This can be overridden per-user from the 'Git config'
|
||||||
|
* section of 'User Settings' within the editor
|
||||||
|
*/
|
||||||
|
mode: "manual"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
codeEditor: {
|
||||||
|
/** Select the text editor component used by the editor.
|
||||||
|
* As of Node-RED V3, this defaults to "monaco", but can be set to "ace" if desired
|
||||||
|
*/
|
||||||
|
lib: "monaco",
|
||||||
|
options: {
|
||||||
|
/** The follow options only apply if the editor is set to "monaco"
|
||||||
|
*
|
||||||
|
* theme - must match the file name of a theme in
|
||||||
|
* packages/node_modules/@node-red/editor-client/src/vendor/monaco/dist/theme
|
||||||
|
* e.g. "tomorrow-night", "upstream-sunburst", "github", "my-theme"
|
||||||
|
*/
|
||||||
|
// theme: "vs",
|
||||||
|
/** other overrides can be set e.g. fontSize, fontFamily, fontLigatures etc.
|
||||||
|
* for the full list, see https://microsoft.github.io/monaco-editor/docs.html#interfaces/editor.IStandaloneEditorConstructionOptions.html
|
||||||
|
*/
|
||||||
|
//fontSize: 14,
|
||||||
|
//fontFamily: "Cascadia Code, Fira Code, Consolas, 'Courier New', monospace",
|
||||||
|
//fontLigatures: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
markdownEditor: {
|
||||||
|
mermaid: {
|
||||||
|
/** enable or disable mermaid diagram in markdown document
|
||||||
|
*/
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
multiplayer: {
|
||||||
|
/** To enable the Multiplayer feature, set this value to true */
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Node Settings
|
||||||
|
* - fileWorkingDirectory
|
||||||
|
* - functionGlobalContext
|
||||||
|
* - functionExternalModules
|
||||||
|
* - globalFunctionTimeout
|
||||||
|
* - functionTimeout
|
||||||
|
* - nodeMessageBufferMaxLength
|
||||||
|
* - ui (for use with Node-RED Dashboard)
|
||||||
|
* - debugUseColors
|
||||||
|
* - debugMaxLength
|
||||||
|
* - debugStatusLength
|
||||||
|
* - execMaxBufferSize
|
||||||
|
* - httpRequestTimeout
|
||||||
|
* - mqttReconnectTime
|
||||||
|
* - serialReconnectTime
|
||||||
|
* - socketReconnectTime
|
||||||
|
* - socketTimeout
|
||||||
|
* - tcpMsgQueueSize
|
||||||
|
* - inboundWebSocketTimeout
|
||||||
|
* - tlsConfigDisableLocalFiles
|
||||||
|
* - webSocketNodeVerifyClient
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
/** The working directory to handle relative file paths from within the File nodes
|
||||||
|
* defaults to the working directory of the Node-RED process.
|
||||||
|
*/
|
||||||
|
//fileWorkingDirectory: "",
|
||||||
|
|
||||||
|
/** Allow the Function node to load additional npm modules directly */
|
||||||
|
functionExternalModules: true,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The default timeout (in seconds) for all Function nodes.
|
||||||
|
* Individual nodes can set their own timeout value within their configuration.
|
||||||
|
*/
|
||||||
|
globalFunctionTimeout: 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default timeout, in seconds, for the Function node. 0 means no timeout is applied
|
||||||
|
* This value is applied when the node is first added to the workspace - any changes
|
||||||
|
* must then be made with the individual node configurations.
|
||||||
|
* To set a global timeout value, use `globalFunctionTimeout`
|
||||||
|
*/
|
||||||
|
functionTimeout: 0,
|
||||||
|
|
||||||
|
/** The following property can be used to set predefined values in Global Context.
|
||||||
|
* This allows extra node modules to be made available with in Function node.
|
||||||
|
* For example, the following:
|
||||||
|
* functionGlobalContext: { os:require('os') }
|
||||||
|
* will allow the `os` module to be accessed in a Function node using:
|
||||||
|
* global.get("os")
|
||||||
|
*/
|
||||||
|
functionGlobalContext: {
|
||||||
|
// os:require('os'),
|
||||||
|
},
|
||||||
|
|
||||||
|
/** The maximum number of messages nodes will buffer internally as part of their
|
||||||
|
* operation. This applies across a range of nodes that operate on message sequences.
|
||||||
|
* defaults to no limit. A value of 0 also means no limit is applied.
|
||||||
|
*/
|
||||||
|
//nodeMessageBufferMaxLength: 0,
|
||||||
|
|
||||||
|
/** If you installed the optional node-red-dashboard you can set it's path
|
||||||
|
* relative to httpNodeRoot
|
||||||
|
* Other optional properties include
|
||||||
|
* readOnly:{boolean},
|
||||||
|
* middleware:{function or array}, (req,res,next) - http middleware
|
||||||
|
* ioMiddleware:{function or array}, (socket,next) - socket.io middleware
|
||||||
|
*/
|
||||||
|
//ui: { path: "ui" },
|
||||||
|
|
||||||
|
/** Colourise the console output of the debug node */
|
||||||
|
//debugUseColors: true,
|
||||||
|
|
||||||
|
/** The maximum length, in characters, of any message sent to the debug sidebar tab */
|
||||||
|
debugMaxLength: 1000,
|
||||||
|
|
||||||
|
/** The maximum length, in characters, of status messages under the debug node */
|
||||||
|
//debugStatusLength: 32,
|
||||||
|
|
||||||
|
/** Maximum buffer size for the exec node. Defaults to 10Mb */
|
||||||
|
//execMaxBufferSize: 10000000,
|
||||||
|
|
||||||
|
/** Timeout in milliseconds for HTTP request connections. Defaults to 120s */
|
||||||
|
//httpRequestTimeout: 120000,
|
||||||
|
|
||||||
|
/** Retry time in milliseconds for MQTT connections */
|
||||||
|
mqttReconnectTime: 15000,
|
||||||
|
|
||||||
|
/** Retry time in milliseconds for Serial port connections */
|
||||||
|
serialReconnectTime: 15000,
|
||||||
|
|
||||||
|
/** Retry time in milliseconds for TCP socket connections */
|
||||||
|
//socketReconnectTime: 10000,
|
||||||
|
|
||||||
|
/** Timeout in milliseconds for TCP server socket connections. Defaults to no timeout */
|
||||||
|
//socketTimeout: 120000,
|
||||||
|
|
||||||
|
/** Maximum number of messages to wait in queue while attempting to connect to TCP socket
|
||||||
|
* defaults to 1000
|
||||||
|
*/
|
||||||
|
//tcpMsgQueueSize: 2000,
|
||||||
|
|
||||||
|
/** Timeout in milliseconds for inbound WebSocket connections that do not
|
||||||
|
* match any configured node. Defaults to 5000
|
||||||
|
*/
|
||||||
|
//inboundWebSocketTimeout: 5000,
|
||||||
|
|
||||||
|
/** To disable the option for using local files for storing keys and
|
||||||
|
* certificates in the TLS configuration node, set this to true.
|
||||||
|
*/
|
||||||
|
//tlsConfigDisableLocalFiles: true,
|
||||||
|
|
||||||
|
/** The following property can be used to verify WebSocket connection attempts.
|
||||||
|
* This allows, for example, the HTTP request headers to be checked to ensure
|
||||||
|
* they include valid authentication information.
|
||||||
|
*/
|
||||||
|
//webSocketNodeVerifyClient: function(info) {
|
||||||
|
// /** 'info' has three properties:
|
||||||
|
// * - origin : the value in the Origin header
|
||||||
|
// * - req : the HTTP request
|
||||||
|
// * - secure : true if req.connection.authorized or req.connection.encrypted is set
|
||||||
|
// *
|
||||||
|
// * The function should return true if the connection should be accepted, false otherwise.
|
||||||
|
// *
|
||||||
|
// * Alternatively, if this function is defined to accept a second argument, callback,
|
||||||
|
// * it can be used to verify the client asynchronously.
|
||||||
|
// * The callback takes three arguments:
|
||||||
|
// * - result : boolean, whether to accept the connection or not
|
||||||
|
// * - code : if result is false, the HTTP error status to return
|
||||||
|
// * - reason: if result is false, the HTTP reason string to return
|
||||||
|
// */
|
||||||
|
//},
|
||||||
|
}
|
||||||
12
tcp/Cargo.lock
generated
12
tcp/Cargo.lock
generated
@@ -26,6 +26,17 @@ version = "0.2.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "io-uring"
|
||||||
|
version = "0.7.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.183"
|
version = "0.2.183"
|
||||||
@@ -58,5 +69,6 @@ dependencies = [
|
|||||||
name = "tcp"
|
name = "tcp"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"io-uring",
|
||||||
"nix",
|
"nix",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ version = "0.1.0"
|
|||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
io-uring = "0.7.11"
|
||||||
nix = { version = "0.31.2", features = ["socket", "net", "poll"] }
|
nix = { version = "0.31.2", features = ["socket", "net", "poll"] }
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
// src/main.rs
|
// src/main.rs
|
||||||
|
|
||||||
|
use io_uring::{opcode, types, IoUring};
|
||||||
|
|
||||||
use nix::sys::socket;
|
use nix::sys::socket;
|
||||||
use nix::poll;
|
|
||||||
use nix::sys::socket::MsgFlags;
|
|
||||||
use std::os::fd::FromRawFd;
|
|
||||||
use std::os::fd::AsRawFd;
|
use std::os::fd::AsRawFd;
|
||||||
use std::os::fd::AsFd;
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let tcp_soc = socket::socket(
|
let tcp_soc = socket::socket(
|
||||||
@@ -27,43 +25,61 @@ fn main() {
|
|||||||
).unwrap();
|
).unwrap();
|
||||||
println!("Listening: {:?}", listening);
|
println!("Listening: {:?}", listening);
|
||||||
|
|
||||||
// waiting in here until socket becomes readable
|
// ASYNC
|
||||||
let pollfd = poll::PollFd::new(tcp_soc.as_fd(), poll::PollFlags::POLLIN);
|
let mut ring = IoUring::new(8).unwrap();
|
||||||
let mut fds = [pollfd];
|
let (submitter, mut sq, mut cq) = ring.split();
|
||||||
|
let read_e = opcode::Accept::new(types::Fd(rawfd), std::ptr::null_mut(), std::ptr::null_mut())
|
||||||
|
.build()
|
||||||
|
.user_data(0);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
sq.push(&read_e).unwrap();
|
||||||
|
}
|
||||||
|
sq.sync();
|
||||||
|
submitter.submit().unwrap();
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(100));
|
||||||
let accepted;
|
let accepted;
|
||||||
loop {
|
loop {
|
||||||
poll::poll(&mut fds, poll::PollTimeout::NONE).unwrap();
|
cq.sync();
|
||||||
let revents = fds[0].revents(); // what happened?
|
if let Some(cqe) = cq.next() {
|
||||||
|
accepted = cqe.result();
|
||||||
if revents.unwrap().contains(poll::PollFlags::POLLIN) {
|
|
||||||
accepted = socket::accept(rawfd).unwrap();
|
|
||||||
println!("Accepted: {:?}", accepted);
|
println!("Accepted: {:?}", accepted);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(10));
|
||||||
}
|
}
|
||||||
|
|
||||||
let client_fd = unsafe { std::os::fd::OwnedFd::from_raw_fd(accepted) };
|
let mut buf = [0u8; 7];
|
||||||
let pollfd2 = poll::PollFd::new(client_fd.as_fd(), poll::PollFlags::POLLIN);
|
|
||||||
let mut fds2 = [pollfd2];
|
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
poll::poll(&mut fds2, poll::PollTimeout::NONE).unwrap();
|
let recv_e = opcode::Recv::new(types::Fd(accepted), buf.as_mut_ptr(), buf.len() as u32)
|
||||||
let mut buf = [0u8; 7];
|
.build()
|
||||||
let received = socket::recv(
|
.user_data(1);
|
||||||
accepted,
|
|
||||||
&mut buf,
|
|
||||||
MsgFlags::empty()
|
|
||||||
).unwrap();
|
|
||||||
if received != 0 {
|
|
||||||
// println!("Recv: {}", received);
|
|
||||||
// println!("Bytes: {:?}", buf);
|
|
||||||
// println!("Recv msg: {:?}", std::str::from_utf8(&buf).unwrap_or(""));
|
|
||||||
socket::send(
|
|
||||||
accepted,
|
|
||||||
&buf,
|
|
||||||
MsgFlags::empty()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
sq.push(&recv_e).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
sq.sync();
|
||||||
|
submitter.submit().unwrap();
|
||||||
|
loop {
|
||||||
|
cq.sync();
|
||||||
|
if let Some(cqe) = cq.next() {
|
||||||
|
if cqe.user_data() == 1 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(10));
|
||||||
|
}
|
||||||
|
|
||||||
|
let send_e = opcode::Send::new(types::Fd(accepted), buf.as_ptr(), buf.len() as u32)
|
||||||
|
.build()
|
||||||
|
.user_data(2);
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
sq.push(&send_e).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
sq.sync();
|
||||||
|
submitter.submit().unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user