Author Topic: MQTT Help  (Read 699 times)

0 Members and 1 Guest are viewing this topic.

Offline TinkerTown

  • Senior Member
  • **
  • Posts: 68
MQTT Help
« on: April 06, 2021, 08:12:21 PM »
Hi,

I have been trying to get MQTT working with Weewx and the Belchertown skin for weeks and I am stuck. I thought I had everything working, but I can't get past the page sitting at connecting when trying to update the data. I will try and provide as much data as I can, but I am not a technical writer, so if you need anything to help me get this working just ask!

I believe I know the issue, but I have not been able to figure out how to get it working. My site has a signed SSL certificate and because of that, the connection between the server running Weewx and the MQTT server has to be encrypted, but no matter what I try, I cannot figure out how to get MQTT working with certificates to communicate with the server running Weewx. I am hoping someone can give me instructions on configuring certificates and MQTT to talk to the Weewx server. I have left the information below as a reference. If anyone has or can write instructions to configure the MQTT to work with a certificate would help immensely!

Creating certificates according to some walk throughs, gives me:

1617708378: Error: Unable to load CA certificates. Check cafile "/etc/mosquitto/certs/mosq_serv.key".
1617708378: OpenSSL Error[0]: error:0B084088:x509 certificate routines:X509_load_cert_crl_file:no certificate or crl found



I am running Weewx 4.5.1 on a Raspberry Pi 4. I am using Ubuntu Server 20.04.
I have the Belchertown Skin and running the site on Apache2. I have the webpage running a signed SSL certificate.
I have a virtual server running Ubuntu 20.04 that has the MQTT service running.
Weewx is writing to MySQL on a separate Virtual server.

I followed a guide at https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/ But once I got to the SLSL I couldn't follow because I don't use LetsEncrypt.

System information MQTT Server /etc/mosquitto/conf.d/myconfig.conf:
persistence false
mqtt

listener 1883
protocol mqtt
websockets

listener 9001
protocol websockets

allow_anonymous true
password_file /etc/mosquitto/passwd

acl_file /etc/mosquitto/acl

ACL file:
Allow anonymous access to the sys

topic read $SYS/#
Allow anonymous to read weather

topic read weather/#
weewx readwrite to the loop

user weewxmqttuser
topic weather/#

Netstat results on MQTT server:

sudo netstat -tulpn | grep 1883
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 757/mosquitto
tcp6 0 0 :::1883 :::* LISTEN 757/mosquitto

sudo netstat -tulpn | grep 9001
tcp6 0 0 :::9001 :::* LISTEN 757/mosquitto

UFW Rules:
Status: active

 To                         Action      From
 --                         ------      ----

[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 8883/tcp ALLOW IN Anywhere
[ 5] 9001/tcp ALLOW IN Anywhere
[ 6] 1883 ALLOW IN Anywhere
[ 7] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 9] 443/tcp (v6) ALLOW IN Anywhere (v6)
[10] 8883/tcp (v6) ALLOW IN Anywhere (v6)
[11] 9001/tcp (v6) ALLOW IN Anywhere (v6)
[12] 1883 (v6) ALLOW IN Anywhere (v6)

Firewall Rules from Router:
               WAN    TCP    *    *    WAN address    1883    192.168.1.14    1883    MQTT Protocol    
               WAN    TCP    *    *    WAN address    9001    192.168.1.14    9001    Websocket    
               WAN    TCP    *    *    WAN address    8883    192.168.1.14    8883    MQTT Listener    

sudo tail -f /var/log/mosquitto/mosquitto.log

1617572146: Opening ipv4 listen socket on port 1883.
1617572146: Opening ipv6 listen socket on port 1883.
1617572146: Opening websockets listen socket on port 9001.
1617572291: New connection from 192.168.1.12 on port 1883.
1617572291: New client connected from 192.168.1.12 as weewx_2d392566 (p2, c1, k60, u'weewxmqttuser').
1617572291: Client weewx_2d392566 disconnected.
1617572311: New connection from 192.168.1.12 on port 1883.
1617572311: New client connected from 192.168.1.12 as weewx_a7c2cafa (p2, c1, k60, u'weewxmqttuser').
1617572311: Client weewx_a7c2cafa disconnected.
1617572332: New connection from 192.168.1.12 on port 1883.
1617572332: New client connected from 192.168.1.12 as weewx_2d574dc3 (p2, c1, k60, u'weewxmqttuser').

On the RBPI running weewx I see:
Apr 4 15:16:16 weewx-pi weewx[2455] INFO weewx.restx: MQTT: Published record 2021-04-04 15:16:00 MDT (1617570960)

On the Weewx PI, the config files:

[[MQTT]]
    server_url = mqtt://weewxmqttuser:PASSWORD@192.168.1.14:1883
    topic = weather
    unit_system = US
    binding = archive, loop
    aggregation = aggregate

[[Belchertown]]
    skin = Belchertown
    HTML_ROOT = /var/www/maladomini.net/
    [[[Extras]]]
        earthquake_enabled = 1
        earthquake_server = USGS
        forecast_enabled = 1
        forecast_api_id = REDACTED
        forecast_api_secret = REDACTED
        googleAnalyticsId = REDACTED
    mqtt_websockets_host = "192.168.1.14"
    mqtt_websockets_port = 9001
    mqtt_websockets_enabled = 1
    mqtt_websockets_ssl = 0
    mqtt_websockets_topic = "weather/loop"
    disconnect_live_website_visitor = 1800000

[Engine]

# The following section specifies which services should be run and in what order.
[[Services]]
    prep_services = weewx.engine.StdTimeSynch
    data_services = ,
    process_services = weewx.engine.StdConvert, weewx.engine.StdCalibrate, weewx.engine.StdQC, weewx.wxservices.StdWXCalculate
    xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, weewx.wxxtypes.StdDelta
    archive_services = weewx.engine.StdArchive

<.restx.StdWOW, weewx.restx.StdAWEKAS, user.mqtt.MQTT, user.owm.OpenWeatherMap, user.wcloud.WeatherCloud
report_services = weewx.engine.StdPrint, weewx.engine.StdReport

Syslog when I restart the Weewx Service:

Apr 4 15:43:25 weewx-pi systemd[1]: Stopping LSB: weewx weather system...
Apr 4 15:43:25 weewx-pi weewx[2840]: * Stopping weewx weather system weewx
Apr 4 15:43:25 weewx-pi weewx[2790] INFO main: Received signal TERM (15).
Apr 4 15:43:25 weewx-pi weewx[2790] INFO weewx.engine: Main loop exiting. Shutting engine down.
Apr 4 15:43:25 weewx-pi weewx[2790] INFO weewx.engine: Shutting down StdReport thread
Apr 4 15:43:26 weewx-pi weewx[2790] INFO user.gw1000: Gw1000Collector thread has been terminated
Apr 4 15:43:26 weewx-pi weewx[2790] INFO main: Terminating weewx version 4.5.1
Apr 4 15:43:30 weewx-pi weewx[2840]: . ...done.
Apr 4 15:43:30 weewx-pi systemd[1]: weewx.service: Succeeded.
Apr 4 15:43:30 weewx-pi systemd[1]: Stopped LSB: weewx weather system.
Apr 4 15:43:30 weewx-pi systemd[1]: Starting LSB: weewx weather system...
Apr 4 15:43:30 weewx-pi weewx[2869]: * Starting weewx weather system weewx
Apr 4 15:43:31 weewx-pi weewx[2880] INFO main: Initializing weewx version 4.5.1
Apr 4 15:43:31 weewx-pi weewx[2880] INFO main: Using Python 3.8.5 (default, Jan 27 2021, 15:41:15) #12[GCC 9.3.0]
Apr 4 15:43:31 weewx-pi weewx[2880] INFO main: Platform Linux-5.4.0-1032-raspi-aarch64-with-glibc2.29
Apr 4 15:43:31 weewx-pi weewx[2880] INFO main: Locale is 'C.UTF-8'
Apr 4 15:43:31 weewx-pi weewx[2880] INFO main: PID file is /var/run/weewx.pid
Apr 4 15:43:31 weewx-pi weewx[2883] INFO main: Using configuration file /home/weewx/weewx.conf
Apr 4 15:43:31 weewx-pi weewx[2883] INFO main: Debug is 0
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Loading station type GW1000 (user.gw1000)
Apr 4 15:43:31 weewx-pi weewx[2869]: ...done.
Apr 4 15:43:31 weewx-pi systemd[1]: Started LSB: weewx weather system.
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: field map (Cut to reduce Clutter)
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: driver version is 0.3.1
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: GW1000 address is 192.168.1.7:45000
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: poll interval is 20 seconds
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: StdConvert target unit is 0x1
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Archive will use data binding wx_binding
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Record generation will be attempted in 'hardware'
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Using archive interval of 60 seconds (specified in weewx configuration)
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: StationRegistry: Station will be registered.
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: Wunderground-RF: Data for station KNMLOVIN14 will be posted
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: PWSWeather: Data for station PWSLOVNM1 will be posted
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: CWOP: Data for station FW9112 will be posted
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: WOW: Data for station [redacted key] will be posted
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: AWEKAS: Data will be uploaded for user [redacted]
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.mqtt: service version is 0.23
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.mqtt: binding to ['archive', 'loop']
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.mqtt: topic is weather
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.mqtt: desired unit system is US
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.mqtt: data will be uploaded to mqtt://weewxmqttuser:xxx@192.168.1.14:1883
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.owm: service version is 0.9
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.owm: Data will be uploaded for tinkertown
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.wcloud: service version is 0.13
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.wcloud: Data will be uploaded for id=[redacted]
Apr 4 15:43:31 weewx-pi weewx[2883] INFO main: Starting up weewx version 4.5.1
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Using binding 'wx_binding' to database 'weewx'
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.manager: Starting backfill of daily summaries
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.manager: Daily summaries up to date
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.engine: Starting main packet loop.
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: Using 'rainyear' for rain total
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: skipping rain measurement of 0.0: no last rain
Apr 4 15:43:31 weewx-pi weewx[2883] INFO user.gw1000: Skipping lightning count of 0: no last count
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: MQTT: Published record 2021-04-04 15:43:31 MDT (1617572611)
Apr 4 15:43:31 weewx-pi weewx[2883] INFO weewx.restx: Wunderground-RF: Published record 2021-04-04 15:43:31 MDT (1617572611)

Alas, all I see when I access the website is:

My Station Weather Conditions
(Just a yellow dot) Connecting to weather station real-time data. Last Updated April 4, 2021, 3:50:00 PM

I would appreciate any help you can provide. I am not a master at Linux, but usually, I can follow guides and find the info on the internet somewhere, but I am stumped on getting this working. I know I am missing something, but I just can't figure it out.

Thank you!

I did a connection from a remote tester on port 9001 and it looks like I connect.

1617585978: New client connected from ::ffff:68.233.158.163 as clientId-K4vLZSaW47 (p1, c1, k60, u'weewxmqttuser').
Ecowitt GW1000 | WS-2902C |Weewx on Raspberry Pi
WU: KNMLOVIN14  |  PWSweather: PWSLOVNM1
CWOP: FW9112; https://lovingtonweather.com

 

anything