diff --git a/public/devices/README.md b/public/devices/README.md
new file mode 100644
index 00000000..0e40ce8d
--- /dev/null
+++ b/public/devices/README.md
@@ -0,0 +1,5 @@
+# Copyright Notice
+Copyright © 2024 Meshtastic LLC. All Rights Reserved.
+
+## In reference to the GNU GPLv3 License terms defined in Section 7e
+Images (or assets) in this directory are protected under international copyright laws and treaties. Unauthorized reproduction, distribution, modification, or use of these images in any form, commercial or otherwise, outside of official Meshtastic creative works or its Backers and Partners is strictly prohibited without prior written consent from the copyright holder (Meshtastic LLC).
diff --git a/public/devices/diy.svg b/public/devices/diy.svg
new file mode 100644
index 00000000..823467ed
--- /dev/null
+++ b/public/devices/diy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-ht62-esp32c3-sx1262.svg b/public/devices/heltec-ht62-esp32c3-sx1262.svg
new file mode 100644
index 00000000..c52534ef
--- /dev/null
+++ b/public/devices/heltec-ht62-esp32c3-sx1262.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-mesh-node-t114-case.svg b/public/devices/heltec-mesh-node-t114-case.svg
new file mode 100644
index 00000000..b2abe639
--- /dev/null
+++ b/public/devices/heltec-mesh-node-t114-case.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-mesh-node-t114.svg b/public/devices/heltec-mesh-node-t114.svg
new file mode 100644
index 00000000..779a8f6a
--- /dev/null
+++ b/public/devices/heltec-mesh-node-t114.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-v3-case.svg b/public/devices/heltec-v3-case.svg
new file mode 100644
index 00000000..1b1d3c55
--- /dev/null
+++ b/public/devices/heltec-v3-case.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-v3.svg b/public/devices/heltec-v3.svg
new file mode 100644
index 00000000..13a5fa64
--- /dev/null
+++ b/public/devices/heltec-v3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-vision-master-e213.svg b/public/devices/heltec-vision-master-e213.svg
new file mode 100644
index 00000000..2c1cca09
--- /dev/null
+++ b/public/devices/heltec-vision-master-e213.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-vision-master-e290.svg b/public/devices/heltec-vision-master-e290.svg
new file mode 100644
index 00000000..ca7d296a
--- /dev/null
+++ b/public/devices/heltec-vision-master-e290.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-vision-master-t190.svg b/public/devices/heltec-vision-master-t190.svg
new file mode 100644
index 00000000..55db34f9
--- /dev/null
+++ b/public/devices/heltec-vision-master-t190.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-wireless-paper-V1_0.svg b/public/devices/heltec-wireless-paper-V1_0.svg
new file mode 100644
index 00000000..cb3f188d
--- /dev/null
+++ b/public/devices/heltec-wireless-paper-V1_0.svg
@@ -0,0 +1 @@
+
diff --git a/public/devices/heltec-wireless-paper.svg b/public/devices/heltec-wireless-paper.svg
new file mode 100644
index 00000000..cb3f188d
--- /dev/null
+++ b/public/devices/heltec-wireless-paper.svg
@@ -0,0 +1 @@
+
diff --git a/public/devices/heltec-wireless-tracker-V1-0.svg b/public/devices/heltec-wireless-tracker-V1-0.svg
new file mode 100644
index 00000000..a5392595
--- /dev/null
+++ b/public/devices/heltec-wireless-tracker-V1-0.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-wireless-tracker.svg b/public/devices/heltec-wireless-tracker.svg
new file mode 100644
index 00000000..a5392595
--- /dev/null
+++ b/public/devices/heltec-wireless-tracker.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/heltec-wsl-v3.svg b/public/devices/heltec-wsl-v3.svg
new file mode 100644
index 00000000..1741223e
--- /dev/null
+++ b/public/devices/heltec-wsl-v3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/nano-g2-ultra.svg b/public/devices/nano-g2-ultra.svg
new file mode 100644
index 00000000..6dbe47af
--- /dev/null
+++ b/public/devices/nano-g2-ultra.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/pico.svg b/public/devices/pico.svg
new file mode 100644
index 00000000..82ce6526
--- /dev/null
+++ b/public/devices/pico.svg
@@ -0,0 +1,2956 @@
+
+
diff --git a/public/devices/promicro.svg b/public/devices/promicro.svg
new file mode 100644
index 00000000..3dc26021
--- /dev/null
+++ b/public/devices/promicro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/rak-wismeshtap.svg b/public/devices/rak-wismeshtap.svg
new file mode 100644
index 00000000..34e77876
--- /dev/null
+++ b/public/devices/rak-wismeshtap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/rak11310.svg b/public/devices/rak11310.svg
new file mode 100644
index 00000000..8f526a47
--- /dev/null
+++ b/public/devices/rak11310.svg
@@ -0,0 +1,2339 @@
+
+
diff --git a/public/devices/rak2560.svg b/public/devices/rak2560.svg
new file mode 100644
index 00000000..b8514f01
--- /dev/null
+++ b/public/devices/rak2560.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/rak4631.svg b/public/devices/rak4631.svg
new file mode 100644
index 00000000..6dc2957a
--- /dev/null
+++ b/public/devices/rak4631.svg
@@ -0,0 +1,3514 @@
+
+
diff --git a/public/devices/rak4631_case.svg b/public/devices/rak4631_case.svg
new file mode 100644
index 00000000..a0b2bbb8
--- /dev/null
+++ b/public/devices/rak4631_case.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/rpipicow.svg b/public/devices/rpipicow.svg
new file mode 100644
index 00000000..cb4b1f68
--- /dev/null
+++ b/public/devices/rpipicow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/seeed-sensecap-indicator.svg b/public/devices/seeed-sensecap-indicator.svg
new file mode 100644
index 00000000..f7bf9db0
--- /dev/null
+++ b/public/devices/seeed-sensecap-indicator.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/seeed-xiao-s3.svg b/public/devices/seeed-xiao-s3.svg
new file mode 100644
index 00000000..04e97fe0
--- /dev/null
+++ b/public/devices/seeed-xiao-s3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/station-g2.svg b/public/devices/station-g2.svg
new file mode 100644
index 00000000..8d2e0aed
--- /dev/null
+++ b/public/devices/station-g2.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/t-deck.svg b/public/devices/t-deck.svg
new file mode 100644
index 00000000..cdc53c5d
--- /dev/null
+++ b/public/devices/t-deck.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/t-echo.svg b/public/devices/t-echo.svg
new file mode 100644
index 00000000..e178a50f
--- /dev/null
+++ b/public/devices/t-echo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/t-watch-s3.svg b/public/devices/t-watch-s3.svg
new file mode 100644
index 00000000..19084c19
--- /dev/null
+++ b/public/devices/t-watch-s3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tbeam-s3-core.svg b/public/devices/tbeam-s3-core.svg
new file mode 100644
index 00000000..f42e6d2c
--- /dev/null
+++ b/public/devices/tbeam-s3-core.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tbeam.svg b/public/devices/tbeam.svg
new file mode 100644
index 00000000..cd0475c6
--- /dev/null
+++ b/public/devices/tbeam.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tlora-c6.svg b/public/devices/tlora-c6.svg
new file mode 100644
index 00000000..8b626638
--- /dev/null
+++ b/public/devices/tlora-c6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tlora-t3s3-epaper.svg b/public/devices/tlora-t3s3-epaper.svg
new file mode 100644
index 00000000..6f2e8452
--- /dev/null
+++ b/public/devices/tlora-t3s3-epaper.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tlora-t3s3-v1.svg b/public/devices/tlora-t3s3-v1.svg
new file mode 100644
index 00000000..1f8847d4
--- /dev/null
+++ b/public/devices/tlora-t3s3-v1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tlora-v2-1-1_6.svg b/public/devices/tlora-v2-1-1_6.svg
new file mode 100644
index 00000000..dbe36ef5
--- /dev/null
+++ b/public/devices/tlora-v2-1-1_6.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tlora-v2-1-1_8.svg b/public/devices/tlora-v2-1-1_8.svg
new file mode 100644
index 00000000..dbe36ef5
--- /dev/null
+++ b/public/devices/tlora-v2-1-1_8.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/tracker-t1000-e.svg b/public/devices/tracker-t1000-e.svg
new file mode 100644
index 00000000..6f7a06c9
--- /dev/null
+++ b/public/devices/tracker-t1000-e.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/unknown.svg b/public/devices/unknown.svg
new file mode 100644
index 00000000..1d2cd87b
--- /dev/null
+++ b/public/devices/unknown.svg
@@ -0,0 +1,160 @@
+
+
diff --git a/public/devices/wio-tracker-wm1110.svg b/public/devices/wio-tracker-wm1110.svg
new file mode 100644
index 00000000..15ace5c5
--- /dev/null
+++ b/public/devices/wio-tracker-wm1110.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/devices/wm1110_dev_kit.svg b/public/devices/wm1110_dev_kit.svg
new file mode 100644
index 00000000..94aefe30
--- /dev/null
+++ b/public/devices/wm1110_dev_kit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/components/generic/DeviceImage.tsx b/src/components/generic/DeviceImage.tsx
new file mode 100644
index 00000000..ef96a429
--- /dev/null
+++ b/src/components/generic/DeviceImage.tsx
@@ -0,0 +1,53 @@
+export interface DeviceImageProps {
+ deviceType: string;
+ className?: React.HTMLAttributes["className"];
+}
+
+const hardwareModelToFilename: { [key: string]: string } = {
+ DIY_V1: "diy.svg",
+ NANO_G2_ULTRA: "nano-g2-ultra.svg",
+ TBEAM: "tbeam.svg",
+ HELTEC_HT62: "heltec-ht62-esp32c3-sx1262.svg",
+ RPI_PICO: "pico.svg",
+ T_DECK: "t-deck.svg",
+ HELTEC_MESH_NODE_T114: "heltec-mesh-node-t114.svg",
+ HELTEC_MESH_NODE_T114_CASE: "heltec-mesh-node-t114-case.svg",
+ HELTEC_V3: "heltec-v3.svg",
+ HELTEC_V3_CASE: "heltec-v3-case.svg",
+ HELTEC_VISION_MASTER_E213: "heltec-vision-master-e213.svg",
+ HELTEC_VISION_MASTER_E290: "heltec-vision-master-e290.svg",
+ HELTEC_VISION_MASTER_T190: "heltec-vision-master-t190.svg",
+ HELTEC_WIRELESS_PAPER: "heltec-wireless-paper.svg",
+ HELTEC_WIRELESS_PAPER_V1_0: "heltec-wireless-paper-V1_0.svg",
+ HELTEC_WIRELESS_TRACKER: "heltec-wireless-tracker.svg",
+ HELTEC_WIRELESS_TRACKER_V1_0: "heltec-wireless-tracker-V1-0.svg",
+ HELTEC_WSL_V3: "heltec-wsl-v3.svg",
+ TLORA_C6: "tlora-c6.svg",
+ TLORA_T3_S3: "tlora-t3s3-v1.svg",
+ TLORA_T3_S3_EPAPER: "tlora-t3s3-epaper.svg",
+ TLORA_V2: "tlora-v2-1-1_6.svg",
+ TLORA_V2_1_1P6: "tlora-v2-1-1_6.svg",
+ TLORA_V2_1_1P8: "tlora-v2-1-1_8.svg",
+ RAK11310: "rak11310.svg",
+ RAK2560: "rak2560.svg",
+ RAK4631: "rak4631.svg",
+ RAK4631_CASE: "rak4631_case.svg",
+ WIO_WM1110: "wio-tracker-wm1110.svg",
+ WM1110_DEV_KIT: "wm1110_dev_kit.svg",
+ STATION_G2: "station-g2.svg",
+ TBEAM_V0P7: "tbeam-s3-core.svg",
+ T_ECHO: "t-echo.svg",
+ TRACKER_T1000_E: "tracker-t1000-e.svg",
+ T_WATCH_S3: "t-watch-s3.svg",
+ SEEED_XIAO_S3: "seeed-xiao-s3.svg",
+ SENSECAP_INDICATOR: "seeed-sensecap-indicator.svg",
+ PROMICRO: "promicro.svg",
+ RPIPICOW: "rpipicow.svg",
+ UNKNOWN: "unknown.svg",
+};
+
+export const DeviceImage = ({ deviceType, className }: DeviceImageProps) => {
+ const getPath = (device: string) => `/devices/${device}`;
+ const device = hardwareModelToFilename[deviceType] || "unknown.svg";
+ return
;
+};
diff --git a/src/pages/Nodes.tsx b/src/pages/Nodes.tsx
index 7b0973f5..6da0b246 100644
--- a/src/pages/Nodes.tsx
+++ b/src/pages/Nodes.tsx
@@ -77,8 +77,8 @@ const NodesPage = (): JSX.Element => {
{node.user?.longName ??
(node.user?.macaddr
? `Meshtastic ${base16
- .stringify(node.user?.macaddr.subarray(4, 6) ?? [])
- .toLowerCase()}`
+ .stringify(node.user?.macaddr.subarray(4, 6) ?? [])
+ .toLowerCase()}`
: `!${numberToHexUnpadded(node.num)}`)}
,
@@ -114,8 +114,9 @@ const NodesPage = (): JSX.Element => {
{node.lastHeard !== 0
? node.viaMqtt === false && node.hopsAway === 0
? "Direct"
- : `${node.hopsAway.toString()} ${node.hopsAway > 1 ? "hops" : "hop"
- } away`
+ : `${node.hopsAway.toString()} ${
+ node.hopsAway > 1 ? "hops" : "hop"
+ } away`
: "-"}
{node.viaMqtt === true ? ", via MQTT" : ""}
,