Open smadds opened 1 year ago
I thought this sounded like a good idea and I was going to prepare a Pull Request to add the container to IOTstack but I'm not having much luck.
By way of background, I have been running the macOS version of MQTT Explorer. The macOS version works perfectly so I don't know why that experience isn't translating to the Docker version.
This is the service definition I'm using:
mqtt-explorer:
container_name: mqtt-explorer
image: smeagolworms4/mqtt-explorer
restart: unless-stopped
environment:
- HTTP_PORT=4000
- CONFIG_PATH=/mqtt-explorer/config
# - HTTP_USER=
# - HTTP_PASSWORD=
# - SSL_KEY_PATH=
# - SSH_CERT_PATH=
ports:
- "4000:4000"
volumes:
- ./volumes/mqtt-explorer:/mqtt-explorer/config
I start the container, then check its log:
$ docker logs mqtt-explorer
LOAD MODULE WRAPPED: electron
Start MQTT Explorer node server
- http-port: 4000
- config-path: /mqtt-explorer/config
- http-user:
- http-password:
- ssl-key-path:
- ssl-cert-path:
subscribing connection/add/mqtt
subscribing connection/remove
subscribing storage/store
subscribing storage/load
subscribing storage/clear
server is listening on 4000
Nothing that screams out as being wrong. I fire up a browser and connect to the instance. Then:
I delete the two default connections.
I hit + for a new connection:
I give it a name.
I turn off Validate certificate
Encryption is off - I leave it alone
For the host name I supply mqtt.my.domain.com
. This is the same domain name as is used by every device in the house (ESP32, ESP8266, Pis, Macs) to publish, as well as any tool (except Node-RED) that subscribes to any topic.
Node-RED is running on the same host as Mosquitto so flows just subscribe to
mosquitto:1883
across the internal bridged network.
Port defaults to 1883 - I leave it alone
Username and password are empty - I leave them alone (my Mosquitto instance lives behind my firewall and is never exposed so I don't care about credentials)
I click Advanced:
/merle/#
so I add thatI click Save
I click Connect.
The window repaints. Writes "disconnect" on the right hand side and puts mqtt.my.domain.com
in the top left hand corner.
Nothing else happens.
I click on the domain name and …
Splat. The dialog box that appears contains:
Oooooops!
I hoped that you would never see this window, but MQTT-Explorer had an unexpected error.
cleanup@http://sec-dev.my.domain.com:4000/3.bundle.js:25338:38
@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15158:251
@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15274:468
Ki@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15158:174
Mi@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15165:223
Sj@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15197:75
Sj@[native code]
@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15274:468
Jj@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15192:372
yj@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15183:378
yj@[native code]
@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15067:116
@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15274:468
fg@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15067:63
gg@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15066:498
Ga@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15231:97
gd@http://sec-dev.my.domain.com:4000/vendors.bundle.js:15012:373
gd@[native code]
Please report this issue with a short description of what happened to https://github.com/thomasnordquist/MQTT-Explorer/issues
I tap Restart and try again. Same result.
I re-check the log. The only additional lines are:
New client: b1ZomcXmzQGr6RP-AAAB
subscribing conn/publish/73227bd0-c070-4c92-bc4f-ae6d2eb7d47a
New client: OyvHogUEBzN0g9lvAAAD
unsubscribeAll conn/publish/73227bd0-c070-4c92-bc4f-ae6d2eb7d47a
subscribing conn/publish/73227bd0-c070-4c92-bc4f-ae6d2eb7d47a
New client: irs-S8dWqHOSnT6eAAAF
The settings file contains:
$ cat ~/IOTstack/volumes/mqtt-explorer/settings.json
{
"ConnectionManager_connections": {
"73227bd0-c070-4c92-bc4f-ae6d2eb7d47a": {
"configVersion": 1,
"certValidation": false,
"clientId": "mqtt-explorer-8dbb21e8",
"id": "73227bd0-c070-4c92-bc4f-ae6d2eb7d47a",
"name": "Merle",
"encryption": false,
"subscriptions": [
{
"topic": "/merle/#",
"qos": 0
}
],
"type": "mqtt",
"host": "mqtt.my.domain.com",
"port": 1883,
"protocol": "mqtt"
}
}
}
All looks correct.
When I very carefully do the identical configuration steps in the macOS app, I get:
which is obviously working, while the browser-based version just gets:
The "mqtt.my.domain.com" line in the browser never gets a disclosure triangle and, as I said, clicking on the line results in the error message.
Noting that the macOS version:
my working hypothesis was:
/merle/camera/snoop
. It has the retain flag set so it arrives immediately.Not so. Proof.
I have a small bash script named mossieMonitor
that uses mosquitto_sub
to subscribe to /merle/#
and bungs out timestamped messages as they arrive. Here it is running outside container-space on the Pi:
$ mossieMonitor
2023-04-21T23:20:08+1000 /merle/camera/snoop/hello {"message": "camera passed hello test"}
2023-04-21T23:20:11+1000 /merle/box-hiking/grid {"T01":513.17,"T02":0.00,"a":0.00,"v":244.50,"w":0.00,"pf":1.00,"f":49.99}
2023-04-21T23:20:21+1000 /merle/box-hiking/grid {"T01":513.17,"T02":0.00,"a":0.00,"v":244.50,"w":0.00,"pf":1.00,"f":50.00}
2023-04-21T23:20:31+1000 /merle/box-hiking/grid {"T01":513.17,"T02":0.00,"a":0.00,"v":244.50,"w":0.00,"pf":1.00,"f":50.00}
^C
The mqtt-explorer container doesn't have the Mosquitto clients so I need to add those:
$ docker exec mqtt-explorer ash -c "apk update && apk add mosquitto-clients"
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/main/aarch64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.15/community/aarch64/APKINDEX.tar.gz
v3.15.8-46-gf5157076646 [https://dl-cdn.alpinelinux.org/alpine/v3.15/main]
v3.15.8-46-gf5157076646 [https://dl-cdn.alpinelinux.org/alpine/v3.15/community]
OK: 15742 distinct packages available
(1/4) Installing cjson (1.7.15-r0)
(2/4) Installing c-ares (1.18.1-r0)
(3/4) Installing mosquitto-libs (2.0.14-r1)
(4/4) Installing mosquitto-clients (2.0.14-r1)
Executing busybox-1.34.1-r5.trigger
OK: 8 MiB in 20 packages
Copy the script into the container:
$ docker cp ~/.local/bin/mossieMonitor mqtt-explorer:.
Preparing to copy...
Copying to container - 2.048kB
Successfully copied 2.048kB to mqtt-explorer:.
Run the script inside the container:
$ docker exec mqtt-explorer /mossieMonitor
2023-04-21T13:21:05+0000 /merle/camera/snoop/hello {"message": "camera passed hello test"}
2023-04-21T13:21:11+0000 /merle/box-hiking/grid {"T01":513.17,"T02":0.00,"a":0.00,"v":244.30,"w":0.00,"pf":1.00,"f":49.96}
2023-04-21T13:21:21+0000 /merle/box-hiking/grid {"T01":513.17,"T02":0.00,"a":0.00,"v":244.20,"w":0.00,"pf":1.00,"f":49.97}
^C
So, the container can definitely communicate with the broker.
I've tried Safari and Chrome to see if this is a browser difference. I've tried a laptop, desktop and iPad to see if it's a platform difference.
I'm stumped.
You say it's working perfectly well for you so it's probably something incredibly obvious and dumb that I'm doing. Any ideas?
I'm doing all this on a Pi4 running full 64-bit Bullseye:
$ uname -a
Linux sec-dev 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
It would be great to have MQTT Explorer in the IOTStack.
I have found that the smeagolworms4/mqtt-explorer docker image is stable on my RPi
Thanks for all your good work