I've been trouble shooting getting the Belchertown skin MQTT Websocket real time updates to work on my site
shakerweather.com for a lot of this week.
I have WeeWx installed on a dedicated thin client on Ubuntu 20.04 LTS and have Mosquitto and NGINX installed on the same machine. Running bare metal, no docker or VMs here.
External access to WeeWx website is handled via NGINX reverse proxy manager with SSL certs on a different server via docker. Requests to
shakerweather.com are sent to the proxy server and then to the WeeWx machine.
With this setup, the site is served up fine internally and externally with the updates at archive intervals every 5 minutes.
I know that the weewx-mqtt extension is installed correctly as I have been able to test it locally and get the websocket updates to work perfectly with the following configs:
weewx.conf
[[MQTT]]
server_url = mqtt://user:pw@localhost:8883/
topic = weather
unit_system = US
binding = archive, loop
aggregation = aggregate
skin.conf
# MQTT Websockets defaults
mqtt_websockets_enabled = 1
mqtt_websockets_host = "localhost"
mqtt_websockets_port = 8083
mqtt_websockets_ssl = 0
mqtt_websockets_topic = "weather/loop"
disconnect_live_website_visitor = 1800000
I am only able to see the the real time updates on the local machine only with WeeWx and Mosquitto. If I try to access it by IP address elsewhere on my LAN on other clients it does not connect and eventually fails. No luck externally either - despite my NGINX Reverse Proxy Manger handling serving the page and SSL certs the websocket real time updates don't pass through. That was my original thought of how it would work.
After much trial and error, and reading every thread imaginable on this along with many messages and some correspondence with Pat O'Brien I decided to go ahead and setup a Digital Ocean Ubuntu VM and install Mosquito there to serve as a cloud broker. I followed Pat's instructions exactly as he outlines in setting up the cloud broker:
https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/
I have the cloud MQTT broker installed correctly at Digital Ocean with Let's Encrypt, and ran tests on it. Messages can be sent when authenticated, ports are open, etc. However, I can get no further with the websockets real time updates than "Connected. Waiting for data". If I reboot the cloud MQTT broker I immediately get a disconnected message on the website so it does appear to be connecting and waiting for data. Somehow the data is simply not transferring from my WeeWx client to the cloud MQTT broker at Digital Ocean. The other weird thing is if I try to access
shakerweather.com or the website by local IP address on the machine that hosts WeeWx I always get a failed message, won't even connect to the server. However, any other client on my LAN and external on WAN does not have this issue.
Here are my current configs:
weewx.conf
[[MQTT]]
server_url = mqtt://
user:p...@mqtt.beldenserver.com:8883/ topic = weather
unit_system = US
binding = archive, loop
aggregation = aggregate
[[[tls]]]
tls_version = tlsv1
ca_certs = /etc/ssl/certs/ca-certificates.crt
skin.conf
# MQTT Websockets defaults
mqtt_websockets_enabled = 1
mqtt_websockets_host = "
mqtt.beldenserver.com"
mqtt_websockets_port = 8083
mqtt_websockets_ssl = 1
mqtt_websockets_topic = "weather/loop"
disconnect_live_website_visitor = 1800000
At this point, I have spent 20+ hours on this and hoping someone here can point me in the right direction, it seems data is just not feeding the MQTT topic. I'm fine with using Digital Ocean as a cloud MQTT server just to get it up and running. My preferred state is eventually to selfhost it all.
Thanks in advance for anything I may be overlooking, advice or possible solutions.