staging #2
78
index.html
78
index.html
@ -145,7 +145,7 @@
|
||||
.btn-group {
|
||||
display: flex;
|
||||
gap: 1em;
|
||||
flex-wrap: nowrap;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
.btn-groups {
|
||||
@ -153,6 +153,18 @@
|
||||
flex-direction: column;
|
||||
gap: 1em;
|
||||
}
|
||||
.section-title {
|
||||
margin: 0.5em 0 0;
|
||||
font-size: 1rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.08em;
|
||||
color: #2C2D3C;
|
||||
}
|
||||
.section {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.75em;
|
||||
}
|
||||
.btn-small {
|
||||
display: inline-block;
|
||||
margin-top: 0.5em;
|
||||
@ -207,6 +219,9 @@
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.section-title {
|
||||
text-align: center;
|
||||
}
|
||||
.btn {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
@ -251,7 +266,27 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-groups">
|
||||
<div class="section">
|
||||
<div class="btn-group">
|
||||
<a href="https://discord.gg/m4F328as3K" target="_blank" class="btn">
|
||||
<img src="discord.svg" alt="Discord Icon" />
|
||||
<div class="btn-text">
|
||||
Discord
|
||||
<small>Join the community</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section">
|
||||
<p class="section-title">Meshtastic</p>
|
||||
<div class="btn-group">
|
||||
<a href="https://meshtastic.org/" target="_blank" class="btn">
|
||||
<img src="meshtastic.svg" alt="Meshtastic Icon" />
|
||||
<div class="btn-text">
|
||||
Meshtastic
|
||||
<small>Learn more!</small>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://malla.ctmesh.org/" target="_blank" class="btn">
|
||||
<img src="info.svg" alt="Info Icon" />
|
||||
<div class="btn-text">
|
||||
@ -273,22 +308,47 @@
|
||||
<small>Nodes around the world</small>
|
||||
</div>
|
||||
</a>
|
||||
<a href="resources.html" class="btn">
|
||||
<img src="info.svg" alt="Info Icon" />
|
||||
<div class="btn-text">
|
||||
Meshtastic Resources
|
||||
<small>Channels, MQTT, tools</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="section">
|
||||
<p class="section-title">MeshCore</p>
|
||||
<div class="btn-group">
|
||||
<a href="https://discord.gg/m4F328as3K" target="_blank" class="btn">
|
||||
<img src="discord.svg" alt="Discord Icon" />
|
||||
<a href="https://meshcore.co.uk/" target="_blank" class="btn">
|
||||
<img src="meshcore.svg" alt="MeshCore Logo" />
|
||||
<div class="btn-text">
|
||||
Discord
|
||||
<small>Join the community</small>
|
||||
MeshCore
|
||||
<small>Project website</small>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://meshtastic.org/" target="_blank" class="btn">
|
||||
<img src="meshtastic.svg" alt="Meshtastic Icon" />
|
||||
<a href="https://meshcore-map.ctmesh.org/" target="_blank" class="btn">
|
||||
<img src="map.svg" alt="Map Icon" />
|
||||
<div class="btn-text">
|
||||
Meshtastic
|
||||
<small>Learn more!</small>
|
||||
MeshCore Map
|
||||
<small>Live node map</small>
|
||||
</div>
|
||||
</a>
|
||||
<a href="https://meshcore-wardrive.ctmesh.org/" target="_blank" class="btn">
|
||||
<img src="map.svg" alt="Map Icon" />
|
||||
<div class="btn-text">
|
||||
MeshCore Wardrive
|
||||
<small>Coverage maps</small>
|
||||
</div>
|
||||
</a>
|
||||
<a href="meshcore-resources.html" class="btn">
|
||||
<img src="info.svg" alt="Info Icon" />
|
||||
<div class="btn-text">
|
||||
MeshCore Resources
|
||||
<small>Tools and maps</small>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="site-footer">
|
||||
|
||||
204
meshcore-resources.html
Normal file
204
meshcore-resources.html
Normal file
@ -0,0 +1,204 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
<title>CT Mesh MeshCore Resources</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.png?3">
|
||||
<link rel="icon" type="image/png" href="favicon.png?3">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
body {
|
||||
font-family: "Roboto", sans-serif;
|
||||
background: url('background.svg') no-repeat center center fixed;
|
||||
background-size: cover;
|
||||
background-color: #EBEBEB;
|
||||
color: #2C2D3C;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
padding: 2em 0;
|
||||
}
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(87, 87, 87, 0.4);
|
||||
pointer-events: none;
|
||||
}
|
||||
.content-box {
|
||||
background-color: #EBEBEB;
|
||||
border-radius: 30px;
|
||||
padding: 2.5em 3em;
|
||||
margin: 1em;
|
||||
max-width: 820px;
|
||||
width: 90%;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
font-size: 28px;
|
||||
}
|
||||
h2 {
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
font-size: 20px;
|
||||
}
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
line-height: 1.4;
|
||||
}
|
||||
ul {
|
||||
margin: 0.5em 0 0.5em 1.25em;
|
||||
padding: 0;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.community-tools li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.note {
|
||||
background: #F5F5F5;
|
||||
border-left: 4px solid #67EA94;
|
||||
border-radius: 8px;
|
||||
padding: 0.75em 1em;
|
||||
margin: 0.75em 0 0.5em;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
.code-block {
|
||||
background: #F5F5F5;
|
||||
border-radius: 12px;
|
||||
padding: 1em;
|
||||
border: 1px solid #D0D0D0;
|
||||
margin: 0.75em 0;
|
||||
position: relative;
|
||||
}
|
||||
.code-block pre {
|
||||
margin: 0;
|
||||
white-space: pre-wrap;
|
||||
font-family: monospace;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
.copy-btn {
|
||||
position: absolute;
|
||||
top: 0.75em;
|
||||
right: 0.75em;
|
||||
background-color: #67EA94;
|
||||
color: #000000;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 0.4em 0.75em;
|
||||
font-size: 0.75em;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
background-color: #67EA94;
|
||||
color: #000000;
|
||||
border: none;
|
||||
padding: 0.75em 1.5em;
|
||||
border-radius: 15px;
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.back-link {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
body {
|
||||
padding-top: calc(env(safe-area-inset-top, 1em));
|
||||
}
|
||||
.content-box {
|
||||
padding: 2em;
|
||||
}
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.content-box {
|
||||
padding: 1.5em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 22px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="overlay"></div>
|
||||
<div class="content-box">
|
||||
<h1>MeshCore Resources</h1>
|
||||
|
||||
<h2>Community-run Web Tools</h2>
|
||||
<div class="community-tools">
|
||||
<p><em>These tools use data reported to our MQTT server by nodes across the state.</em></p>
|
||||
<ul>
|
||||
<li><a href="https://meshcore-map.ctmesh.org/" target="_blank">MeshCore Map</a> <strong>NEW!</strong> - live map showing MeshCore nodes</li>
|
||||
<li><a href="https://meshcore-wardrive.ctmesh.org/" target="_blank">MeshCore Wardriving Map</a> <strong>NEW!</strong> - coverage maps for MeshCore (you can also contribute!). <em>Note: a new app is in testing and may supersede this.</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>Official Links</h2>
|
||||
<p><a href="https://meshcore.co.uk/" target="_blank">meshcore.co.uk</a></p>
|
||||
<p><a href="https://flasher.meshcore.co.uk/" target="_blank">flasher.meshcore.co.uk</a></p>
|
||||
<div class="note"><strong>Note:</strong> the flasher requires WebSerial or Web Bluetooth support in your browser.</div>
|
||||
|
||||
<h2>MQTT</h2>
|
||||
<p>Our MQTT broker is <em>uplink-only</em> and designed for fixed nodes across the state to serve as gateway nodes. Its purpose is not to bridge gaps or extend mesh coverage, but to report local traffic to our own web-based tools for analytical data and metrics to assess the mesh's performance. <strong>This role is best suited for stable, well-placed nodes with reliable coverage.</strong></p>
|
||||
<p>MeshCore MQTT uplink uses <a href="https://github.com/Cisien/meshcoretomqtt" target="_blank">meshcoretomqtt</a> on a Raspberry Pi or similar Linux computer with the service installed. This configuration stanza goes in your <code>.env.local</code> file after the first two MQTT servers that upload to analyzer.letsmesh.net. <strong>This also requires a custom firmware.</strong> See <a href="https://analyzer.letsmesh.net/observer/onboard" target="_blank">custom repeater firmware setup</a>.</p>
|
||||
|
||||
<div class="code-block">
|
||||
<button class="copy-btn" type="button" data-copy-target="meshcore-mqtt">Copy all</button>
|
||||
<pre id="meshcore-mqtt"># MQTT Broker 3 - CT Mesh
|
||||
MCTOMQTT_MQTT3_ENABLED=true
|
||||
MCTOMQTT_MQTT3_SERVER=mqtt.ctmesh.org
|
||||
MCTOMQTT_MQTT3_PORT=1883
|
||||
MCTOMQTT_MQTT3_USE_TLS=false
|
||||
MCTOMQTT_MQTT3_USERNAME=meshdev
|
||||
MCTOMQTT_MQTT3_PASSWORD=large4cats</pre>
|
||||
</div>
|
||||
|
||||
<a class="btn back-link" href="index.html">Back to CT Mesh</a>
|
||||
</div>
|
||||
<script>
|
||||
const copyButtons = document.querySelectorAll("[data-copy-target]");
|
||||
copyButtons.forEach((button) => {
|
||||
button.addEventListener("click", async () => {
|
||||
const targetId = button.getAttribute("data-copy-target");
|
||||
const target = document.getElementById(targetId);
|
||||
if (!target) return;
|
||||
try {
|
||||
await navigator.clipboard.writeText(target.textContent);
|
||||
button.textContent = "Copied";
|
||||
setTimeout(() => {
|
||||
button.textContent = "Copy all";
|
||||
}, 1500);
|
||||
} catch (err) {
|
||||
button.textContent = "Copy failed";
|
||||
setTimeout(() => {
|
||||
button.textContent = "Copy all";
|
||||
}, 1500);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
68
meshcore.svg
Normal file
68
meshcore.svg
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="822.000000pt" height="391.000000pt" viewBox="0 0 822.000000 391.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.16, written by Peter Selinger 2001-2019
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,391.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M265 3878 c-2 -13 -11 -70 -20 -128 -47 -327 -178 -1211 -210 -1420
|
||||
-13 -91 -25 -171 -25 -177 0 -10 60 -13 270 -13 l269 0 6 33 c3 17 30 205 60
|
||||
417 31 212 57 389 58 394 2 5 57 -140 123 -322 l119 -332 221 0 222 0 144 223
|
||||
c79 122 173 268 208 325 35 56 64 101 65 100 3 -3 -101 -766 -109 -810 l-5
|
||||
-28 264 0 265 0 5 23 c2 12 30 198 60 412 72 499 183 1251 191 1293 l6 32
|
||||
-318 0 -319 -1 -151 -247 c-255 -415 -424 -686 -439 -701 -11 -12 -37 58 -171
|
||||
468 l-158 481 -313 0 -313 0 -5 -22z"/>
|
||||
<path d="M2706 3883 c-3 -10 -15 -83 -26 -163 -37 -253 -110 -740 -130 -870
|
||||
-11 -69 -38 -246 -60 -395 -22 -148 -43 -280 -45 -292 l-5 -23 780 0 c495 0
|
||||
780 4 780 10 0 10 46 325 55 373 l5 27 -500 0 c-470 0 -500 1 -500 18 0 15 19
|
||||
145 35 240 l6 32 439 0 c286 0 440 3 440 10 0 5 11 87 25 182 14 95 25 176 25
|
||||
180 0 4 -197 9 -438 10 l-438 3 20 143 19 142 502 0 502 0 26 178 c15 97 27
|
||||
185 27 195 0 16 -44 17 -769 17 -724 0 -770 -1 -775 -17z"/>
|
||||
<path d="M4753 3889 c-170 -28 -289 -128 -342 -285 -18 -53 -61 -313 -78 -466
|
||||
-13 -113 39 -208 139 -257 85 -41 141 -48 518 -61 179 -6 341 -16 361 -21 55
|
||||
-14 74 -42 73 -103 -1 -29 -9 -67 -18 -85 -32 -61 -29 -61 -626 -61 -297 0
|
||||
-540 -3 -540 -7 0 -5 -7 -48 -15 -98 -14 -92 -45 -296 -45 -302 0 -2 321 -2
|
||||
713 -1 l712 3 67 26 c117 46 210 135 249 239 32 85 73 357 73 490 1 100 -2
|
||||
120 -21 155 -40 75 -110 122 -213 144 -30 7 -205 16 -390 21 -385 11 -436 15
|
||||
-469 36 -22 15 -23 20 -18 84 7 78 26 122 64 147 25 17 71 18 558 21 l531 3
|
||||
27 187 c15 103 27 190 27 195 0 10 -1273 7 -1337 -4z"/>
|
||||
<path d="M6383 3823 c-7 -43 -26 -170 -42 -283 -40 -268 -109 -723 -166 -1087
|
||||
-25 -160 -45 -297 -45 -302 0 -8 89 -11 278 -11 l277 0 49 343 c26 188 50 345
|
||||
53 350 2 4 159 7 349 7 307 0 344 -2 344 -16 0 -8 -16 -118 -35 -242 -34 -227
|
||||
-65 -433 -65 -439 0 -2 128 -3 284 -3 l284 0 6 33 c3 17 46 304 97 637 50 333
|
||||
108 713 128 845 l37 240 -280 3 c-181 1 -282 -1 -286 -8 -3 -5 -28 -159 -55
|
||||
-340 l-49 -330 -348 0 -349 0 6 33 c3 17 23 158 45 312 22 154 42 292 45 308
|
||||
l5 27 -278 0 -278 0 -11 -77z"/>
|
||||
<path d="M553 1745 c-133 -29 -252 -122 -313 -243 -40 -80 -54 -150 -131 -677
|
||||
-46 -319 -60 -434 -55 -479 12 -121 83 -219 199 -278 111 -55 139 -58 753 -58
|
||||
l562 0 6 33 c3 17 15 95 26 172 11 77 22 152 25 168 l5 27 -443 0 c-271 0
|
||||
-456 4 -479 10 -45 13 -88 61 -88 101 0 50 100 743 111 770 16 39 59 76 104
|
||||
88 26 7 199 11 497 11 l456 0 6 28 c6 32 46 317 46 332 0 17 -1209 12 -1287
|
||||
-5z"/>
|
||||
<path d="M2385 1754 c-181 -40 -294 -122 -355 -259 -35 -79 -39 -98 -116 -615
|
||||
-73 -494 -76 -554 -33 -645 48 -103 159 -179 305 -210 101 -21 1067 -21 1169
|
||||
0 165 35 303 138 368 277 41 86 39 74 123 653 72 494 73 530 28 622 -32 66
|
||||
-94 118 -182 152 l-67 26 -610 2 c-335 0 -619 -1 -630 -3z m892 -390 c61 -46
|
||||
61 -38 2 -463 -60 -428 -60 -429 -139 -469 -43 -21 -54 -22 -316 -22 -329 0
|
||||
-361 7 -383 88 -13 45 87 760 113 810 19 36 52 61 99 73 17 4 159 7 314 6 268
|
||||
-2 283 -3 310 -23z"/>
|
||||
<path d="M4168 1638 c-10 -68 -37 -260 -62 -428 -25 -168 -61 -415 -80 -550
|
||||
-48 -332 -85 -578 -91 -617 l-6 -33 269 0 270 0 17 113 c10 61 27 182 39 267
|
||||
l22 155 143 0 144 0 138 -259 c77 -143 139 -263 139 -268 0 -4 149 -8 330 -8
|
||||
l331 0 -12 23 c-6 12 -72 130 -145 263 -74 132 -134 246 -134 251 0 6 17 13
|
||||
38 17 134 22 284 163 326 306 20 67 86 513 86 578 0 149 -98 259 -261 296 -58
|
||||
14 -172 16 -776 16 l-709 0 -16 -122z m1158 -301 c29 -33 30 -64 9 -195 -18
|
||||
-109 -27 -126 -81 -152 -37 -19 -62 -20 -342 -20 l-302 0 4 23 c3 12 15 87 26
|
||||
167 11 80 23 160 26 178 l5 33 315 -3 316 -3 24 -28z"/>
|
||||
<path d="M6190 1748 c0 -7 -12 -87 -25 -178 -14 -91 -50 -329 -80 -530 -30
|
||||
-201 -66 -441 -80 -535 -14 -93 -35 -233 -46 -310 -11 -77 -22 -150 -24 -162
|
||||
l-5 -23 785 0 785 0 5 23 c9 40 55 337 55 357 0 20 -10 20 -510 20 -417 0
|
||||
-510 2 -510 13 0 13 25 192 35 255 l6 32 453 0 453 0 22 143 c12 78 26 166 30
|
||||
195 l8 52 -449 0 c-352 0 -448 3 -448 13 1 6 9 68 18 135 l18 124 514 1 514 2
|
||||
27 180 c16 99 28 186 29 193 0 9 -164 12 -790 12 -625 0 -790 -3 -790 -12z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
225
resources.html
Normal file
225
resources.html
Normal file
@ -0,0 +1,225 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
|
||||
<title>CT Mesh Meshtastic Resources</title>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.png?3">
|
||||
<link rel="icon" type="image/png" href="favicon.png?3">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
body {
|
||||
font-family: "Roboto", sans-serif;
|
||||
background: url('background.svg') no-repeat center center fixed;
|
||||
background-size: cover;
|
||||
background-color: #EBEBEB;
|
||||
color: #2C2D3C;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: center;
|
||||
padding: 2em 0;
|
||||
}
|
||||
.overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: rgba(87, 87, 87, 0.4);
|
||||
pointer-events: none;
|
||||
}
|
||||
.content-box {
|
||||
background-color: #EBEBEB;
|
||||
border-radius: 30px;
|
||||
padding: 2.5em 3em;
|
||||
margin: 1em;
|
||||
max-width: 820px;
|
||||
width: 90%;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.15);
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
font-size: 28px;
|
||||
}
|
||||
h2 {
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
font-size: 20px;
|
||||
}
|
||||
h3 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.25em;
|
||||
font-size: 16px;
|
||||
}
|
||||
p {
|
||||
margin: 0.5em 0;
|
||||
line-height: 1.4;
|
||||
}
|
||||
ul {
|
||||
margin: 0.5em 0 0.5em 1.25em;
|
||||
padding: 0;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.settings {
|
||||
background: #F5F5F5;
|
||||
border-radius: 12px;
|
||||
padding: 1em;
|
||||
border: 1px solid #D0D0D0;
|
||||
margin: 0.75em 0;
|
||||
}
|
||||
.settings code {
|
||||
font-family: monospace;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
.copy-btn {
|
||||
background-color: #67EA94;
|
||||
color: #000000;
|
||||
border: none;
|
||||
border-radius: 10px;
|
||||
padding: 0.25em 0.6em;
|
||||
font-size: 0.75em;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
margin-left: 0.5em;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
background-color: #67EA94;
|
||||
color: #000000;
|
||||
border: none;
|
||||
padding: 0.75em 1.5em;
|
||||
border-radius: 15px;
|
||||
cursor: pointer;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.community-tools {
|
||||
margin-top: 0.75em;
|
||||
padding-top: 0.5em;
|
||||
}
|
||||
.community-tools ul {
|
||||
margin: 0.5em 0 0.5em 1.25em;
|
||||
}
|
||||
.community-tools li {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
.back-link {
|
||||
margin-top: 1.5em;
|
||||
}
|
||||
@media (max-width: 800px) {
|
||||
body {
|
||||
padding-top: calc(env(safe-area-inset-top, 1em));
|
||||
}
|
||||
.content-box {
|
||||
padding: 2em;
|
||||
}
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.content-box {
|
||||
padding: 1.5em;
|
||||
}
|
||||
h1 {
|
||||
font-size: 22px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="overlay"></div>
|
||||
<div class="content-box">
|
||||
<h1>Meshtastic Resources</h1>
|
||||
|
||||
<h2>Mesh Channels</h2>
|
||||
<h3>Default (Primary) Channel</h3>
|
||||
<p><em>Most CT chatter occurs on the default LongFast channel.</em></p>
|
||||
<p>Name: <code id="channel-primary-name">LongFast</code> or (blank) <button class="copy-btn" type="button" data-copy-target="channel-primary-name">Copy</button></p>
|
||||
<p>Key: <code id="channel-primary-key">AQ==</code> <button class="copy-btn" type="button" data-copy-target="channel-primary-key">Copy</button></p>
|
||||
<p>Key size: Default or <code>1 byte</code></p>
|
||||
|
||||
<h3>CT's established community secondary channel</h3>
|
||||
<p>Name: <code id="channel-secondary-name">ConnNet</code> <button class="copy-btn" type="button" data-copy-target="channel-secondary-name">Copy</button></p>
|
||||
<p>Key: <code id="channel-secondary-key">pJgk5XqJY8Ar+jSqC5W81g==</code> <button class="copy-btn" type="button" data-copy-target="channel-secondary-key">Copy</button></p>
|
||||
<p>Key size: 128 bit</p>
|
||||
|
||||
<h2>MQTT</h2>
|
||||
<p>Our MQTT broker is <em>uplink-only</em> and designed for fixed nodes across the state to serve as gateway nodes. Its purpose is not to bridge gaps or extend mesh coverage, but to report local traffic to our own <a href="https://map.ctmesh.org" target="_blank">map</a> and other web-based tools for analytical data and metrics to assess the mesh's performance. <strong>This role is best suited for stable, well-placed nodes with reliable coverage.</strong> If that describes your setup, follow the steps at on <a href="https://meshinfo.ctmesh.org/" target="_blank">this page</a> to get set up.</p>
|
||||
|
||||
<h3>Key Settings</h3>
|
||||
<div class="settings">
|
||||
<p>MQTT > Enabled > ON</p>
|
||||
<p>MQTT > Encryption Enabled > ON</p>
|
||||
<p>MQTT > Map Report > OFF</p>
|
||||
<p>MQTT > Root Topic > <code>msh/US/CT</code></p>
|
||||
<p>MQTT > Address > <code>mqtt.ctmesh.org</code></p>
|
||||
<p>MQTT > Username > <code>meshdev</code></p>
|
||||
<p>MQTT > Password > <code>large4cats</code></p>
|
||||
<p>MQTT > TLS Enabled > OFF</p>
|
||||
<p>Channels > Primary Channel > Positions Enabled > ON</p>
|
||||
<p>Channels > Primary Channel > Approximate Location > (set as desired)</p>
|
||||
<p>Channels > Primary Channel > MQTT Uplink > ON</p>
|
||||
<p>Channels > Primary Channel > MQTT Downlink > OFF</p>
|
||||
<p>Settings > Modules > Neighbor Info > ON</p>
|
||||
<p>LoRa > Ok to MQTT > ON</p>
|
||||
</div>
|
||||
|
||||
<p><strong>Note:</strong> CT Mesh's MQTT server is bridged and uplinks to the MQTT servers for both <a href="https://meshtastic.liamcottle.net" target="_blank">meshtastic.liamcottle.net</a> and <a href="https://meshmap.net" target="_blank">meshmap.net</a>.</p>
|
||||
|
||||
<h2>Community-run Web Tools</h2>
|
||||
<div class="community-tools">
|
||||
<p><em>These tools use data reported to our MQTT server by nodes across the state.</em></p>
|
||||
<ul>
|
||||
<li><a href="https://map.ctmesh.org/?lat=41.6558113360196&lng=287.3377990722657&zoom=10" target="_blank">Meshtastic Map</a> - live map of Meshtastic nodes CT Mesh has heard</li>
|
||||
<li><a href="https://malla.ctmesh.org/" target="_blank">Malla</a> - deeper packet-level metrics and mesh performance insights fed from MQTT</li>
|
||||
<li><a href="https://potato.ctmesh.org/" target="_blank">PotatoMesh</a> <strong>NEW!</strong> - packet, chat, node list, and map fed from RF on Box Mountain</li>
|
||||
<li><a href="https://meshinfo.ctmesh.org/" target="_blank">MeshInfo</a> <em>legacy, partially broken</em> - MQTT gateway setup info, secondary map, graphs, message history, etc.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<h2>Infrastructure Nodes</h2>
|
||||
<p><strong>Important:</strong> Infrastructure roles like <code>ROUTER</code>, <code>REPEATER</code>, <code>ROUTER_CLIENT</code>, or <code>ROUTER_LATE</code> are rarely appropriate. Unless your node is sitting on top of one of the tallest buildings in Hartford with clear line-of-sight across the region, using these roles will hurt more than help. For almost everyone, the correct choice is <code>CLIENT</code>. If you think you've got a node that truly warrants an infrastructure role, reach out first - we'd rather make sure it benefits the mesh than inadvertently weakens it.</p>
|
||||
|
||||
<a class="btn back-link" href="index.html">Back to CT Mesh</a>
|
||||
</div>
|
||||
<script>
|
||||
const copyButtons = document.querySelectorAll("[data-copy-target]");
|
||||
copyButtons.forEach((button) => {
|
||||
const defaultLabel = button.textContent;
|
||||
button.addEventListener("click", async () => {
|
||||
const targetId = button.getAttribute("data-copy-target");
|
||||
const target = document.getElementById(targetId);
|
||||
if (!target) return;
|
||||
try {
|
||||
await navigator.clipboard.writeText(target.textContent);
|
||||
button.textContent = "Copied";
|
||||
setTimeout(() => {
|
||||
button.textContent = defaultLabel;
|
||||
}, 1500);
|
||||
} catch (err) {
|
||||
button.textContent = "Copy failed";
|
||||
setTimeout(() => {
|
||||
button.textContent = defaultLabel;
|
||||
}, 1500);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user