{"id":128,"date":"2026-01-11T22:59:42","date_gmt":"2026-01-11T22:59:42","guid":{"rendered":"https:\/\/michaelwinchester.com\/mesh-plug\/?page_id=128"},"modified":"2026-01-11T22:59:43","modified_gmt":"2026-01-11T22:59:43","slug":"connectivity-checklist","status":"publish","type":"page","link":"https:\/\/michaelwinchester.com\/mesh-plug\/connectivity-checklist\/","title":{"rendered":"Connectivity Checklist"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Mesh-Plug Connectivity Checklist<\/h1>\n\n\n\n<p><em>(Meshtastic + MQTT + WordPress)<\/em><\/p>\n\n\n\n<p>This checklist verifies that <strong>Meshtastic devices<\/strong>, <strong>your MQTT broker<\/strong>, and <strong>Mesh-Plug<\/strong> are all connected using the <em>correct transport<\/em>.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Key rule:<\/strong><br>Devices\/apps use <strong>MQTT over TLS (8883)<\/strong>; browsers use <strong>MQTT over WebSockets (9001)<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. Port &amp; Transport Map (Read This First)<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Component<\/th><th>Port<\/th><th>Transport<\/th><th>Why<\/th><\/tr><\/thead><tbody><tr><td>Meshtastic Android<\/td><td><strong>8883<\/strong><\/td><td>MQTT over TLS<\/td><td>Native MQTT client<\/td><\/tr><tr><td>Meshtastic Devices<\/td><td><strong>8883<\/strong><\/td><td>MQTT over TLS<\/td><td>Standard IoT transport<\/td><\/tr><tr><td>Mesh-Plug (WordPress)<\/td><td><strong>9001<\/strong><\/td><td>MQTT over WebSockets (WSS)<\/td><td>Required by browsers<\/td><\/tr><tr><td><code>mosquitto_sub\/pub<\/code><\/td><td><strong>8883 only<\/strong><\/td><td>MQTT over TLS<\/td><td>CLI does <strong>not<\/strong> support WSS<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u26a0\ufe0f <code>mosquitto_sub<\/code> <strong>will never work<\/strong> on port 9001; protocol errors are expected.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. Android Meshtastic Settings (Publisher)<\/h2>\n\n\n\n<p><strong>MQTT Settings<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Host: <code>mqtt.your-domain.com<\/code><\/li>\n\n\n\n<li>Port: <strong>8883<\/strong><\/li>\n\n\n\n<li>TLS: <strong>ON<\/strong><\/li>\n\n\n\n<li>Username \/ Password: <em>(your broker creds)<\/em><\/li>\n\n\n\n<li>Root topic: <code>msh<\/code><\/li>\n\n\n\n<li>JSON output: <strong>ON<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>After changing settings<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Toggle MQTT <strong>OFF \u2192 ON<\/strong><\/li>\n\n\n\n<li>Send:\n<ul class=\"wp-block-list\">\n<li>Exchange User Info<\/li>\n\n\n\n<li>Send Position<\/li>\n\n\n\n<li>Chat message<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. Mesh-Plug Settings (Subscriber)<\/h2>\n\n\n\n<p><strong>Broker<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>URL: <code>wss:\/\/mqtt.your-domain.com:9001\/mqtt<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Topics<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Subscribe topic: <code>msh\/#<\/code><\/li>\n\n\n\n<li>Publish prefix (if enabled): <code>msh<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Important stability setting<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gateway Hex:<\/strong><br>Set this explicitly (example: <code>!b2a7c7a8<\/code>)<br>Do <strong>not<\/strong> rely on auto-learn once your system is stable.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. Broker Sanity Checks (Server)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Confirm ports are listening<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>nc -vz mqtt.your-domain.com 8883\nnc -vz mqtt.your-domain.com 9001\n<\/code><\/pre>\n\n\n\n<p>Both should succeed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Confirm 9001 is WebSockets<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -i -k --http1.1 \\\n  -H \"Connection: Upgrade\" \\\n  -H \"Upgrade: websocket\" \\\n  https:&#47;&#47;mqtt.your-domain.com:9001\/mqtt\n<\/code><\/pre>\n\n\n\n<p>Expected:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 101 Switching Protocols\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5. Verify Meshtastic Traffic (CLI Test)<\/h2>\n\n\n\n<p>Run this <strong>before<\/strong> checking WordPress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mosquitto_sub -v \\\n  -h mqtt.your-domain.com \\\n  -p 8883 \\\n  --cafile \/etc\/ssl\/certs\/ca-certificates.crt \\\n  -u YOUR_USER \\\n  -P 'YOUR_PASSWORD' \\\n  -t 'msh\/#'\n<\/code><\/pre>\n\n\n\n<p>Then trigger actions in the Android app.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">You should see messages like:<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>msh\/2\/json\/... {\"type\":\"nodeinfo\"...}\nmsh\/2\/json\/... {\"type\":\"position\"...}\nmsh\/2\/json\/... {\"payload\":{\"text\":\"hello\"}}\n<\/code><\/pre>\n\n\n\n<p>If you see traffic here but <strong>not<\/strong> in Mesh-Plug, the issue is browser\/WSS config.<br>If you see <strong>nothing<\/strong>, Android is not publishing.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. Common Failure Modes (and Fixes)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c No data anywhere<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Android accidentally set to <strong>9001<\/strong><\/li>\n\n\n\n<li>Root topic doubled (<code>msh\/msh<\/code>)<\/li>\n\n\n\n<li>MQTT toggled on but never reconnected<\/li>\n<\/ul>\n\n\n\n<p><strong>Fix:<\/strong> Android \u2192 port <strong>8883<\/strong>, toggle MQTT off\/on.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c Mesh-Plug connected but no chat or nodes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gateway Hex auto-learn polluted by client swapping<\/li>\n<\/ul>\n\n\n\n<p><strong>Fix:<\/strong> Set Gateway Hex explicitly and reload dashboard.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u274c <code>mosquitto_sub<\/code> protocol error<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Attempting to test <strong>9001<\/strong><\/li>\n<\/ul>\n\n\n\n<p><strong>Fix:<\/strong> Use <strong>8883 only<\/strong> for CLI testing.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7. Golden Rule (Pin This)<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Devices publish on 8883.<br>Browsers subscribe on 9001.<br>Same broker. Same topics. Different transports.<\/strong><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Mesh-Plug Connectivity Checklist (Meshtastic + MQTT + WordPress) This checklist verifies that Meshtastic devices, your MQTT broker, and Mesh-Plug are all connected using the correct transport. Key rule:Devices\/apps use MQTT over TLS (8883); browsers use MQTT over WebSockets (9001). 1. Port &amp; Transport Map (Read This First) Component Port Transport Why Meshtastic Android 8883 MQTT [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-128","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/pages\/128","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/comments?post=128"}],"version-history":[{"count":1,"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/pages\/128\/revisions"}],"predecessor-version":[{"id":129,"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/pages\/128\/revisions\/129"}],"wp:attachment":[{"href":"https:\/\/michaelwinchester.com\/mesh-plug\/wp-json\/wp\/v2\/media?parent=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}