Thanks for looking into this for me. I feel like I've read a bunch of pages and that I'm really close to this. I've attached my weewx.conf, mosquitto.conf, and local.conf (located at /etc/mosquitto/conf.d/).
Looking at the mosquitto log file, I'm seeing this error a ton of times: 1722824003: mosquitto version 2.0.11 starting 1722824003: Config loaded from /etc/mosquitto/mosquitto.conf. 1722824003: Opening websockets listen socket on port 9001. 1722824003: Opening ipv4 listen socket on port 1883. 1722824003: Opening ipv6 listen socket on port 1883. 1722824003: Opening ipv4 listen socket on port 1883. 1722824003: Error: Address already in use Although ps -ef is only showing one mosquitto running which I see the service running with systemctl. On Monday, August 5, 2024 at 9:04:15 PM UTC-4 vince wrote: > Can't help without seeing your current mosquitto config file and your > weewx.conf file at a minimum. Remember you need to restart weewx after > making weewx.conf changes and that your mosquitto broker is running and > accepting incoming traffic into the ip address you are trying to talk to. > > You might check your mosquitto broker's logfile too to see if anything > there is being logged that might help. > > On Sunday, August 4, 2024 at 8:12:53 PM UTC-7 M&M wrote: > >> Vince, I followed that link and I'm making some progress. Thank you. I >> now get the message on my local page: >> >> >> Connected. Waiting for data. Last Updated 4 August 2024, 23:00:00 >> >> I've been reading over some threads of people having the same issue but >> those fixes are not working for me. Thoughts? >> >> On Friday, August 2, 2024 at 4:01:58 PM UTC-4 Stefanos Kalaitzis wrote: >> >>> >>> Try this in weewx.conf :** but be careful with the unit_system >>> [[MQTT]] >>> topic = your_topic >>> unit_system = METRICWX >>> binding = loop >>> aggregation = aggregate >>> log_success = false >>> log_failure = true >>> server_url = mqtt://broker.hivemq.com:1883 >>> >>> [[[inputs]]] >>> [[[[windSpeed]]]] >>> units = km_per_hour >>> [[[[windGust]]]] >>> units = km_per_hour >>> >>> In belchertown stanza : >>> >>> >>> #--- MQTT Websockets (for Real Time Streaming) Options --- >>> mqtt_websockets_enabled = 1 >>> >>> mqtt_websockets_host = broker.hivemq.com >>> mqtt_websockets_port = 8884 >>> mqtt_websockets_ssl = 1 >>> mqtt_websockets_topic = yourtopic/loop >>> # disconnect_live_website_visitor = 1800000 >>> >>> **Change only the topic and the unit system you are using. Because i am >>> writing from mobile please forgive me if something is strange to your eyes. >>> >>> Στις Παρ 2 Αυγ 2024, 21:42 ο χρήστης vince <vince...@gmail.com> έγραψε: >>> >>>> You're probably overthinking. It's really very simple. You don't need >>>> SSL if you're just going to run on your LAN. You likely don't even need >>>> to >>>> password protect it either if you are LAN only. >>>> >>>> See the example starting at line 72 of >>>> https://github.com/vinceskahan/weewx-odds-and-ends/blob/master/install-belchertown-websockets >>>> >>>> for the minimal mosquitto MQTT server setup that works for me. >>>> >>>> On Friday, August 2, 2024 at 10:56:59 AM UTC-7 M&M wrote: >>>> >>>>> I've read a bunch about MQTT, Belchertown, and Weewx so I thought I >>>>> would able to get this working. From the pages I read on github and >>>>> such, >>>>> it didn't seem like it took a lot of configuration to mosquitto to get it >>>>> working. From the links I posted above that I followed, it didn't seem >>>>> that I needed to have SSL certs working yet to get it working locally. I >>>>> figured I would do that first before venturing out to get this working on >>>>> a >>>>> website. So I'll go back and see what I can configure to get the certs >>>>> added to my conf files. >>>>> >>>>> Do you have any websites that you suggest to use to get this working? >>>>> I feel like I'm close. >>>>> >>>>> On Friday, August 2, 2024 at 8:41:28 AM UTC-4 gary....@gmail.com >>>>> wrote: >>>>> >>>>>> I see you haven't done much research. >>>>>> If you want to understand this and get the Belchertown skin to work, >>>>>> you need to do some. >>>>>> A default mosquitto.conf isn't going to work as you want. >>>>>> You will likely need SSL certs in order to have websockets work via >>>>>> the internet vs local LAN. >>>>>> You should have writing to mosquitto password protected, but >>>>>> allow anonymous reading. >>>>>> >>>>>> When MQTT/Websockets works, it is great. Getting there requires a >>>>>> passing familiarity with the care and feeding of mosquitto. >>>>>> >>>>>> On Thursday, August 1, 2024 at 11:38:28 PM UTC-4 M&M wrote: >>>>>> >>>>>>> Where can I find out if I have acl? >>>>>>> >>>>>>> My mosquitto.conf file looks a bit different. I didn't change any >>>>>>> of it after it was installed besides the two listener lines. It looks >>>>>>> like >>>>>>> this: >>>>>>> >>>>>>> pi@raspberrypi:~ $ more /etc/mosquitto/mosquitto.conf >>>>>>> # Place your local configuration in /etc/mosquitto/conf.d/ >>>>>>> # >>>>>>> # A full description of the configuration file is at >>>>>>> # /usr/share/doc/mosquitto/examples/mosquitto.conf.example >>>>>>> >>>>>>> pid_file /run/mosquitto/mosquitto.pid >>>>>>> >>>>>>> persistence true >>>>>>> persistence_location /var/lib/mosquitto/ >>>>>>> >>>>>>> log_dest file /var/log/mosquitto/mosquitto.log >>>>>>> >>>>>>> include_dir /etc/mosquitto/conf.d >>>>>>> >>>>>>> listener 1883 >>>>>>> listener 9001 >>>>>>> protocol websockets >>>>>>> >>>>>>> On Thursday, August 1, 2024 at 9:38:48 AM UTC-4 gary....@gmail.com >>>>>>> wrote: >>>>>>> >>>>>>>> Do you have an acl and does it resemble this? >>>>>>>> # Allow anonymous access to the sys >>>>>>>> topic read $SYS/# >>>>>>>> >>>>>>>> # Allow anonymous to read weather >>>>>>>> topic read weather/# >>>>>>>> topic read tester/# >>>>>>>> >>>>>>>> # weewx readwrite to the loop >>>>>>>> user weewx >>>>>>>> topic weather/# >>>>>>>> topic tester/# >>>>>>>> >>>>>>>> Did you create a password for the weewx user (not the linux user, >>>>>>>> the mqtt user)? >>>>>>>> >>>>>>>> Does your mosquitto conf file resemble this? >>>>>>>> persistence false >>>>>>>> allow_anonymous true >>>>>>>> password_file /etc/mosquitto/pwfile >>>>>>>> acl_file /etc/mosquitto/acl >>>>>>>> # Insecure mqtt to localhost only, and secure mqtt >>>>>>>> listener 1883 >>>>>>>> listener 8883 >>>>>>>> certfile /etc/mosquitto/certs/cert.pem >>>>>>>> cafile /etc/mosquitto/certs/chain.pem >>>>>>>> keyfile /etc/mosquitto/certs/privkey.pem >>>>>>>> protocol mqtt >>>>>>>> >>>>>>>> # websockets >>>>>>>> listener 8080 >>>>>>>> certfile /etc/mosquitto/certs/cert.pem >>>>>>>> cafile /etc/mosquitto/certs/chain.pem >>>>>>>> keyfile /etc/mosquitto/certs/privkey.pem >>>>>>>> protocol websockets >>>>>>>> On Wednesday, July 31, 2024 at 11:47:46 PM UTC-4 M&M wrote: >>>>>>>> >>>>>>>>> I checked mosquitto.conf and it has "listener 1883" in it. I also >>>>>>>>> disabled my pihole and checked that my raspberry pi is listening on >>>>>>>>> port >>>>>>>>> 1883. >>>>>>>>> >>>>>>>>> On Friday, July 26, 2024 at 11:23:25 PM UTC-4 M&M wrote: >>>>>>>>> >>>>>>>>>> I checked journalctl and now I'm seeing this error: >>>>>>>>>> >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd[1141]: ERROR >>>>>>>>>> user.ambientweatherapi: AmbientAPI get_devices() returned empty dict >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd.py[1141]: ambientweatherapi >>>>>>>>>> driver encountered an error. >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd[1141]: ERROR >>>>>>>>>> user.ambientweatherapi: ambientweatherapi driver encountered an >>>>>>>>>> error. >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd.py[1141]: Error caught was: >>>>>>>>>> AmbientAPI get_devices() returned empty dict >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd[1141]: ERROR >>>>>>>>>> user.ambientweatherapi: Error caught was: AmbientAPI get_devices() >>>>>>>>>> returned >>>>>>>>>> empty dict >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd.py[1141]: ambientweatherapi >>>>>>>>>> driver had an error sending data to weewx. >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd[1141]: ERROR >>>>>>>>>> user.ambientweatherapi: ambientweatherapi driver had an error >>>>>>>>>> sending data >>>>>>>>>> to weewx. >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd.py[1141]: Error caught was: >>>>>>>>>> Previous error occured, skipping packet build. >>>>>>>>>> Jul 26 23:16:30 raspberrypi weewxd[1141]: ERROR >>>>>>>>>> user.ambientweatherapi: Error caught was: Previous error occured, >>>>>>>>>> skipping >>>>>>>>>> packet build. >>>>>>>>>> >>>>>>>>>> On Friday, July 26, 2024 at 11:20:51 PM UTC-4 M&M wrote: >>>>>>>>>> >>>>>>>>>>> Making some progress. I am back to having weewx running and I >>>>>>>>>>> now have mosquito running as well. I was able to test that service >>>>>>>>>>> by >>>>>>>>>>> mosquitto_sub and mosquitto_pub which worked by sending "hello >>>>>>>>>>> world". >>>>>>>>>>> However when I check my local Belchertown page, it now says this at >>>>>>>>>>> the top: >>>>>>>>>>> >>>>>>>>>>> Failed connecting to the weather station. Please try again >>>>>>>>>>> later! Last Updated 26 July 2024, 23:10:00 >>>>>>>>>>> >>>>>>>>>>> On Friday, July 26, 2024 at 2:02:17 PM UTC-4 M&M wrote: >>>>>>>>>>> >>>>>>>>>>>> Oh thats right! I edited the /etc/default/locales file. I >>>>>>>>>>>> changed it from en_GB.UTF-8 to en_US.UTF-8 since I was trying to >>>>>>>>>>>> fix the >>>>>>>>>>>> time in Belchertown skin to show a 12h time format. I believe I >>>>>>>>>>>> fixed it >>>>>>>>>>>> and for some reason, i decided to edit the locales file. I'll >>>>>>>>>>>> change that >>>>>>>>>>>> back when I get to that system. >>>>>>>>>>>> >>>>>>>>>>>> Thanks. I believe that is what will fix it. >>>>>>>>>>>> >>>>>>>>>>>> On Friday, July 26, 2024 at 12:17:42 PM UTC-4 vince wrote: >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> https://stackoverflow.com/questions/14547631/python-locale-error-unsupported-locale-settling >>>>>>>>>>>>> >>>>>>>>>>>>> Have you messed with system locale at the os level or edited >>>>>>>>>>>>> it in some weewx or mqtt config file ? There have been some >>>>>>>>>>>>> skeletal >>>>>>>>>>>>> reports about this over the years but I've never really >>>>>>>>>>>>> understood the >>>>>>>>>>>>> explanations. >>>>>>>>>>>>> >>>>>>>>>>>>> On Friday, July 26, 2024 at 3:41:42 AM UTC-7 Mark Jenks wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Make sure MQTT is running correctly. You can test it via >>>>>>>>>>>>>> CLI. This page goes into configuring a cert, you can stop >>>>>>>>>>>>>> reading at >>>>>>>>>>>>>> that point. >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> https://medium.com/gravio-edge-iot-platform/how-to-set-up-a-mosquitto-mqtt-broker-securely-using-client-certificates-82b2aaaef9c8 >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Thursday, July 25, 2024 at 10:27:54 PM UTC-5 M&M wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Also I tried commenting out all of the MQTT lines in >>>>>>>>>>>>>>> weewx.conf so that I could get the service running again but it >>>>>>>>>>>>>>> isn't >>>>>>>>>>>>>>> running at all. Giving me the same error as I posted above. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thursday, July 25, 2024 at 11:11:15 PM UTC-4 M&M wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> I'm getting closer. Mosquito service is running but weewx >>>>>>>>>>>>>>>> gives me the follow error in journalctl: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Jul 25 22:59:55 raspberrypi weewxd[25852]: INFO __main__: >>>>>>>>>>>>>>>> Terminating weewx version 5.0.2 >>>>>>>>>>>>>>>> Jul 25 22:59:55 raspberrypi systemd[1]: weewx.service: >>>>>>>>>>>>>>>> Succeeded. >>>>>>>>>>>>>>>> Jul 25 22:59:55 raspberrypi systemd[1]: Stopped WeeWX. >>>>>>>>>>>>>>>> Jul 25 22:59:55 raspberrypi systemd[1]: weewx.service: >>>>>>>>>>>>>>>> Consumed 3h 44min 13.462s CPU time. >>>>>>>>>>>>>>>> Jul 25 23:00:51 raspberrypi systemd[1]: Started WeeWX. >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: INFO __main__: >>>>>>>>>>>>>>>> Initializing weewxd version 5.0.2 >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: INFO __main__: >>>>>>>>>>>>>>>> Command line: /usr/share/weewx/weewxd.py /etc/weewx/weewx.conf >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: Traceback (most >>>>>>>>>>>>>>>> recent call last): >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/usr/share/weewx/weewxd.py", line 265, in <module> >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: main() >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/usr/share/weewx/weewxd.py", line 107, in main >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: weewx_root, >>>>>>>>>>>>>>>> user_module = weeutil.startup.initialize(config_dict) >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/usr/share/weewx/weeutil/startup.py", line 67, in initialize >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: >>>>>>>>>>>>>>>> importlib.import_module('user.extensions') >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/usr/lib/python3.9/importlib/__init__.py", line 127, in >>>>>>>>>>>>>>>> import_module >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: return >>>>>>>>>>>>>>>> _bootstrap._gcd_import(name[level:], package, level) >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap>", line 1030, in _gcd_import >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap>", line 1007, in _find_and_load >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap>", line 986, in _find_and_load_unlocked >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap>", line 680, in _load_unlocked >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap_external>", line 790, in exec_module >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File "<frozen >>>>>>>>>>>>>>>> importlib._bootstrap>", line 228, in _call_with_frames_removed >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/etc/weewx/bin/user/extensions.py", line 18, in <module> >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: >>>>>>>>>>>>>>>> locale.setlocale(locale.LC_ALL, '') >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: File >>>>>>>>>>>>>>>> "/usr/lib/python3.9/locale.py", line 610, in setlocale >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: return >>>>>>>>>>>>>>>> _setlocale(category, locale) >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi weewxd[28347]: locale.Error: >>>>>>>>>>>>>>>> unsupported locale setting >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi systemd[1]: weewx.service: Main >>>>>>>>>>>>>>>> process exited, code=exited, status=1/FAILURE >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi systemd[1]: weewx.service: >>>>>>>>>>>>>>>> Failed with result 'exit-code'. >>>>>>>>>>>>>>>> Jul 25 23:00:53 raspberrypi systemd[1]: weewx.service: >>>>>>>>>>>>>>>> Consumed 2.050s CPU time. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Thursday, July 25, 2024 at 1:47:21 PM UTC-4 vince wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Pat's docs are authoritative for Belchertown and the MQTT >>>>>>>>>>>>>>>>> stuff looks ok to me. Just follow that. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://github.com/weewx/weewx/wiki/mqtt has Tom's >>>>>>>>>>>>>>>>> instructions for installing the MQTT extension. You can >>>>>>>>>>>>>>>>> check it at least >>>>>>>>>>>>>>>>> minimally by running "weectl extension list" and it should >>>>>>>>>>>>>>>>> show up in the >>>>>>>>>>>>>>>>> list of installed extensions. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Your config file stuff for weewx that you posted looked ok >>>>>>>>>>>>>>>>> to me. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Thursday, July 25, 2024 at 9:54:13 AM UTC-7 M&M wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> That is correct that I have the MQTT installed as an >>>>>>>>>>>>>>>>>> extension for weewx which is running on the pi. I checked >>>>>>>>>>>>>>>>>> for a >>>>>>>>>>>>>>>>>> mqtt.service and I'm not seeing one on there. I'm also not >>>>>>>>>>>>>>>>>> seeing a >>>>>>>>>>>>>>>>>> mosquitto_sub or pub installed so I think I must have missed >>>>>>>>>>>>>>>>>> anothe page to >>>>>>>>>>>>>>>>>> get this installed and working. From searching around right >>>>>>>>>>>>>>>>>> now, it looks >>>>>>>>>>>>>>>>>> like I need to follow this page: >>>>>>>>>>>>>>>>>> https://obrienlabs.net/how-to-setup-your-own-mqtt-broker/ >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I'm hoping to get this on a website that doesn't cost >>>>>>>>>>>>>>>>>> anything but one step at a time. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Am I on the right track? >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> On Wednesday, July 24, 2024 at 10:50:45 PM UTC-4 vince >>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Connection refused generally means the remote computer >>>>>>>>>>>>>>>>>>> is not accepting incoming connections on that port. It >>>>>>>>>>>>>>>>>>> looks to me like >>>>>>>>>>>>>>>>>>> you are trying to connect to the MQTT server on the same pi >>>>>>>>>>>>>>>>>>> ? Did you >>>>>>>>>>>>>>>>>>> enable and start the MQTT server ? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Did you test it with mosquitto_sub and mosquitto_pub to >>>>>>>>>>>>>>>>>>> know that the MQTT server is working ok ? >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> The authoritative belchertown docs are at >>>>>>>>>>>>>>>>>>> https://github.com/poblabs/weewx-belchertown?tab=readme-ov-file#mqtt-and-mqtt-websockets-optional >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> if you haven't gone through them already. Note that it has >>>>>>>>>>>>>>>>>>> a prerequisite >>>>>>>>>>>>>>>>>>> to install the MQTT extension which itself has prerequisite >>>>>>>>>>>>>>>>>>> python modules. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Test with mosquitto_sub/pub first to know your MQTT >>>>>>>>>>>>>>>>>>> server is working as desired, then do the weewx part. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Wednesday, July 24, 2024 at 7:30:33 PM UTC-7 M&M >>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Somewhat of a new user here to Weewx. I am running it >>>>>>>>>>>>>>>>>>>> on a Raspberry Pi Zero W (192.168.0.196) and also >>>>>>>>>>>>>>>>>>>> installed the Belchertown >>>>>>>>>>>>>>>>>>>> skin. I followed these steps ( >>>>>>>>>>>>>>>>>>>> https://www.wxforum.net/index.php?topic=43377.0) to >>>>>>>>>>>>>>>>>>>> install and configure MQTT but I'm running into some >>>>>>>>>>>>>>>>>>>> errors. Here is what >>>>>>>>>>>>>>>>>>>> part of my weewx.conf file looks like for the MQTT stuff: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> [[MQTT]] >>>>>>>>>>>>>>>>>>>> server_url = mqtt:// >>>>>>>>>>>>>>>>>>>> random_username:random_...@192.168.0.196:1883 >>>>>>>>>>>>>>>>>>>> <http://random_username:random_password@192.168.0.196:1883> >>>>>>>>>>>>>>>>>>>> unit_system = US >>>>>>>>>>>>>>>>>>>> topic = weather >>>>>>>>>>>>>>>>>>>> binding = archive, loop >>>>>>>>>>>>>>>>>>>> aggregation = aggregate >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> [[Belchertown]] >>>>>>>>>>>>>>>>>>>> skin = Belchertown >>>>>>>>>>>>>>>>>>>> HTML_ROOT = /var/www/html/weewx/belchertown >>>>>>>>>>>>>>>>>>>> enable = true >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> [[[Extras]]] >>>>>>>>>>>>>>>>>>>> #--- MQTT Websockets (for Real Time >>>>>>>>>>>>>>>>>>>> Streaming) Options --- >>>>>>>>>>>>>>>>>>>> mqtt_websockets_enabled = 1 >>>>>>>>>>>>>>>>>>>> mqtt_websockets_host = 192.168.0.x >>>>>>>>>>>>>>>>>>>> mqtt_websockets_port = 9001 >>>>>>>>>>>>>>>>>>>> mqtt_websockets_ssl = 0 >>>>>>>>>>>>>>>>>>>> mqtt_websockets_topic = weather/loop >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I also added user.mqtt.MQTT to restful_services at the >>>>>>>>>>>>>>>>>>>> end of the file. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> The error I'm seeing in journalctl is: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Jul 24 22:16:40 raspberrypi weewxd[25776]: ERROR >>>>>>>>>>>>>>>>>>>> user.mqtt: Failed to connect to MQTT server (mqtt:// >>>>>>>>>>>>>>>>>>>> random_username:x...@192.168.0.196:1883 >>>>>>>>>>>>>>>>>>>> <http://random_username:xxx@192.168.0.196:1883>): >>>>>>>>>>>>>>>>>>>> [Errno 111] Connection refused >>>>>>>>>>>>>>>>>>>> Jul 24 22:16:40 raspberrypi weewxd[25776]: ERROR >>>>>>>>>>>>>>>>>>>> weewx.restx: MQTT: Failed to publish record 2024-07-24 >>>>>>>>>>>>>>>>>>>> 22:15:00 EDT >>>>>>>>>>>>>>>>>>>> (1721873700): MQTT client not available >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Any ideas what I'm missing? >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "weewx-user" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to weewx-user+...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/weewx-user/81877241-40e9-426e-ae14-1d2d709008ecn%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/weewx-user/81877241-40e9-426e-ae14-1d2d709008ecn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/1947876e-66be-4268-a135-8792b26f79d2n%40googlegroups.com.
# Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example listener 9001 protocol websockets listener 1883 allow_anonymous true
# WEEWX CONFIGURATION FILE # # Copyright (c) 2009-2024 Tom Keffer <tkef...@gmail.com> # See the file LICENSE.txt for your rights. ############################################################################## # This section is for general configuration information. # Set to 1 for extra debug info, otherwise comment it out or set to zero. debug = 0 # Whether to log successful operations. May get overridden below. log_success = True # Whether to log unsuccessful operations. May get overridden below. log_failure = True # This configuration file was created by ... version = 5.0.2 ############################################################################## # This section is for information about the station. [Station] # Description of the station location, such as your town. location = "XXXXXXXXXXXXX" # Latitude in decimal degrees. Negative for southern hemisphere. latitude = XXXX # Longitude in decimal degrees. Negative for western hemisphere. longitude = -YYYY # Altitude of the station, with the unit it is in. This is used only # if the hardware cannot supply a value. altitude = XXX, foot # Choose 'foot' or 'meter' for unit # Set to type of station hardware. There must be a corresponding stanza # in this file, which includes a value for the 'driver' option. station_type = ambientweatherapi # If you have a website, you may specify an URL station_url = https://www.wunderground.com/dashboard/pws/XXXXX # The start of the rain year (1=January; 10=October, etc.). This is # downloaded from the station if the hardware supports it. rain_year_start = 1 # Start of week (0=Monday, 6=Sunday) week_start = 6 ############################################################################## [ambientweatherapi] # This section for the AmbientWeatheAPI driver for weewx # The time (in seconds) between LOOP packets and getting API data # The ObserverIP only pushes data every 60 seconds. loop_interval = 60 #API Log level log_level = ERROR aw_debug = 1 #Log file location log_file = /var/log/weewx.log #URL to the Ambient Weather API #api_url = https://api.ambientweather.net/v1 api_url = XXXXXXXXXXXX #Ambient Weather API App Key api_app_key = XXXXXXXXXXXXXXXXXXX #Ambient Weather API Key api_key = YYYYYYYYYYYYYYYYYYYYYYYY #MAC Address of station to reutrn data (default is the first station in the list.) #station_mac = 'E8:DB:84:E3:DA:CC' #Ambient Weather Use Meteobridge (default if False) #use_meteobridge = '' # Name of Hardware device. hardware = Ambient Weather WS-2902 # The driver to use: driver = user.ambientweatherapi ############################################################################## [Simulator] # This section is for the weewx weather station simulator. # The time (in seconds) between LOOP packets. loop_interval = 2.5 # The simulator mode can be either 'simulator' or 'generator'. # Real-time simulator. Sleep between each LOOP packet. mode = simulator # Generator. Emit LOOP packets as fast as possible (useful for testing). #mode = generator # The start time. Format is YYYY-mm-ddTHH:MM. If not specified, the # default is to use the present time. #start = 2011-01-01T00:00 # The driver to use. driver = weewx.drivers.simulator ############################################################################## [WS28xx] # This section is for the La Crosse WS-2800 series of weather stations. # Radio frequency to use between USB transceiver and console: US or EU # US uses 915 MHz, EU uses 868.3 MHz. Default is US. transceiver_frequency = US # The station model, e.g., 'LaCrosse C86234' or 'TFA Primus' model = Ambient Weather WS-2902 # The driver to use: driver = weewx.drivers.ws28xx #[ambientweatherapi] # driver = user.ambientweatherapi # loop_interval = 120 # api_url = https://api.ambientweather.net/v1 # api_app_key = XXXXXXXXXXXXXXXX # api_key = YYYYYYYYYYYYYYY # hardware = My Weather Station ############################################################################## [Interceptor] # This section is for the network traffic interceptor driver. # The driver to use: driver = user.interceptor # Specify the hardware device to capture. Options include: # acurite-bridge - acurite internet bridge, smarthub, or access # observer - fine offset WH2600/HP1000/HP1003, ambient WS2902 # lw30x - oregon scientific LW301/LW302 # lacrosse-bridge - lacrosse GW1000U/C84612 internet bridge # ecowitt-client - any hardware that uses the ecowitt protocol # wu-client - any hardware that uses the weather underground protocol device_type = acurite-bridge ############################################################################## # This section is for uploading data to Internet sites [StdRESTful] # Uncomment and change to override logging for uploading services. # log_success = True # log_failure = True [[StationRegistry]] # To register this weather station at weewx.com, set this to true, and # set option 'station_url', located in the [Station] section above. register_this_station = True [[AWEKAS]] # This section is for configuring posts to AWEKAS. # If you wish to post to AWEKAS, set the option 'enable' to true, then # specify a username and password. # Use quotes around the password to guard against parsing errors. enable = false username = replace_me password = replace_me [[CWOP]] # This section is for configuring posts to CWOP. # If you wish to post to CWOP, set the option 'enable' to true, # then specify the station ID (e.g., CW1234). enable = false station = replace_me # If this is an APRS (radio amateur) station, specify the # passcode (e.g., 12345). Otherwise, ignore. passcode = replace_me [[PWSweather]] # This section is for configuring posts to PWSweather.com. # If you wish to post to PWSweather.com, set the option 'enable' to # true, then specify a station and password. # Use quotes around the password to guard against parsing errors. enable = false station = replace_me password = replace_me [[WOW]] # This section is for configuring posts to WOW. # If you wish to post to WOW, set the option 'enable' to true, then # specify a station and password. # Use quotes around the password to guard against parsing errors. enable = false station = replace_me password = replace_me [[Wunderground]] # This section is for configuring posts to the Weather Underground. # If you wish to post to the Weather Underground, set the option # 'enable' to true, then specify a station (e.g., 'KORHOODR3'). Use # the station key (find it at # https://www.wunderground.com/member/devices) for the password. enable = false station = replace_me password = replace_me # Set the following to True to have weewx use the WU "Rapidfire" # protocol. Not all hardware can support it. See the User's Guide. rapidfire = False [[MQTT]] server_url = mqtt://192.168.0.196:1883 unit_system = US topic = weather/loop binding = archive, loop aggregation = aggregate log_success = false log_failure = true ############################################################################## # This section specifies what reports, using which skins, to generate. [StdReport] # Where the skins reside, relative to WEEWX_ROOT SKIN_ROOT = skins # Where the generated reports should go, relative to WEEWX_ROOT HTML_ROOT = /var/www/html/weewx # Uncomment and change to override logging for reports. # log_success = True # log_failure = True # The database binding indicates which data should be used in reports. data_binding = wx_binding # Each of the following subsections defines a report that will be run. # See the customizing guide to change the units, plot types and line # colors, modify the fonts, display additional sensor data, and other # customizations. Many of those changes can be made here by overriding # parameters, or by modifying templates within the skin itself. [[SeasonsReport]] # The SeasonsReport uses the 'Seasons' skin, which contains the # images, templates and plots for the report. skin = Seasons enable = true [[SmartphoneReport]] # The SmartphoneReport uses the 'Smartphone' skin, and the images and # files are placed in a dedicated subdirectory. skin = Smartphone enable = false HTML_ROOT = /var/www/html/weewx/smartphone [[MobileReport]] # The MobileReport uses the 'Mobile' skin, and the images and files # are placed in a dedicated subdirectory. skin = Mobile enable = false HTML_ROOT = /var/www/html/weewx/mobile [[Belchertown]] skin = Belchertown HTML_ROOT = /var/www/html/weewx/belchertown enable = true [[[Extras]]] # For help refer to the docs at https://github.com/poblabs/weewx-belchertown # and consult skin.conf for the configurable elements and their hierarchy #--- General Options --- # belchertown_debug = 0 belchertown_locale = en_GB.UTF-8 theme = dark # theme_toggle_enabled = 1 # logo_image = "" # logo_image_dark = "" site_title = Home Base Weather Site # station_observations = "barometer","dewpoint","outHumidity","rainWithRainRate" # beaufort_category = 0 # manifest_name = "My Weather Website" # manifest_short_name = "MWW" # aeris_map = 0 # radar_html = '' # (default seems to center on your lat/lon) # radar_html_dark = None radar_zoom = 8 # radar_marker = 0 # almanac_extras = 1 # highcharts_enabled = 1 # graph_page_show_all_button = 1 # graph_page_default_graphgroup = "day" # highcharts_homepage_graphgroup = "day" # highcharts_decimal = "auto" # highcharts_thousands = "auto" # googleAnalyticsId = "" # pi_kiosk_bold = "false" # pi_theme = "auto" webpage_autorefresh = 150000 # reload_hook_images = 0 # reload_images_radar = 300 # reload_images_hook_asi = -1 # reload_images_hook_af = -1 # reload_images_hook_as = -1 # reload_images_hook_ac = -1 # show_last_updated_alert = 0 # last_updated_alert_threshold = 1800 #--- MQTT Websockets (for Real Time Streaming) Options --- mqtt_websockets_enabled = 1 mqtt_websockets_host = 192.168.0.196 mqtt_websockets_port = 9001 mqtt_websockets_ssl = 0 mqtt_websockets_topic = weather/loop disconnect_live_website_visitor = 1800000 #--- Forecast Options --- forecast_enabled = 1 forecast_provider = "aeris" forecast_api_id = YYYYYYYYYYYYYYYYYYY forecast_api_secret = XXXXXXXXXXXXXXXXXXXX forecast_units = "us" # forecast_lang = "en" # forecast_stale = 3540 # forecast_aeris_use_metar = 1 # forecast_interval_hours = 24 # forecast_alert_enabled = 0 # forecast_alert_limit = 1 # forecast_show_daily_forecast_link = 0 # forecast_daily_forecast_link = "" aqi_enabled = 1 # aqi_location_enabled = 0 #--- Earthquake Options --- earthquake_enabled = 1 # earthquake_maxradiuskm = 1000 # earthquake_stale = 10740 earthquake_server = USGS # geonet_mmi = 4 #--- Social Options --- # facebook_enabled = 0 # twitter_enabled = 0 # twitter_hashtags = "weewx #weather" # social_share_html = "" #--- Kiosk Options --- # radar_html_kiosk = "" # radar_width_kiosk = 490 # radar_height_kiosk = 362 # mqtt_websockets_host_kiosk = "" # mqtt_websockets_port_kiosk = "" # mqtt_websockets_ssl_kiosk = "" # forecast_interval_hours_kiosk = 24 # aqi_enabled_kiosk = 0 #------------------------------------------------------------- #--- #--- python's ConfigObj has a limitation in how it processes #--- comments, so we need to define an 'unused' variable below #--- to ensure that this whole stanza makes it into weewx.conf #--- #--- please ignore the following 'unused' variable #--- #------------------------------------------------------------- work_around_ConfigObj_limitations = true [[StandardReport]] # This is the old "Standard" skin. By default, it is not enabled. skin = Standard enable = false [[FTP]] # FTP'ing the results to a webserver is treated as just another report, # albeit one with an unusual report generator! skin = Ftp # If you wish to use FTP, set "enable" to "true", then fill out the # next four lines. # Use quotes around the password to guard against parsing errors. enable = false user = replace_me password = replace_me server = replace_me # The ftp server name, e.g, www.myserver.org path = replace_me # The destination directory, e.g., /weather # Set to True for an FTP over TLS (FTPS) connection. Not all servers # support this. secure_ftp = False # To upload files from something other than what HTML_ROOT is set # to above, specify a different HTML_ROOT here. #HTML_ROOT = /var/www/html/weewx # Most FTP servers use port 21. port = 21 # Set to 1 to use passive mode, zero for active mode passive = 1 [[RSYNC]] # rsync'ing to a webserver is treated as just another report. skin = Rsync # If you wish to use rsync, you must configure passwordless ssh using # public/private key authentication from the user account that weewx # runs to the user account on the remote machine where the files # will be copied. # # If you wish to use rsync, set "enable" to "true", then # fill out server, user, and path. # The server should appear in your .ssh/config file. # The user is the username used in the identity file. # The path is the destination directory, such as /var/www/html/weather. # Be sure that the user has write permissions on the destination! enable = false server = replace_me user = replace_me path = replace_me # To upload files from something other than what HTML_ROOT is set # to above, specify a different HTML_ROOT here. #HTML_ROOT = /var/www/html/weewx # Rsync can be configured to remove files from the remote server if # they don't exist under HTML_ROOT locally. USE WITH CAUTION: if you # make a mistake in the remote path, you could could unintentionally # cause unrelated files to be deleted. Set to 1 to enable remote file # deletion, zero to allow files to accumulate remotely. delete = 0 # Options in the [[Defaults]] section below will apply to all reports. # What follows are a few of the more popular options you may want to # uncomment, then change. [[Defaults]] # Which language to use for all reports. Not all skins support all # languages. You can override this for individual reports. lang = en # Which unit system to use for all reports. Choices are 'us', 'metric', # or 'metricwx'. You can override this for individual reports. unit_system = us [[[Units]]] # Option "unit_system" above sets the general unit system, but # overriding specific unit groups is possible. These are popular # choices. Uncomment and set as appropriate. The unit is always # in the singular, e.g., 'mile_per_hour', NOT 'miles_per_hour' [[[[Groups]]]] # group_altitude = meter # Options are 'foot' or 'meter' # group_pressure = mbar # Options are 'inHg', 'mmHg', 'mbar', or 'hPa' # group_rain = mm # Options are 'inch', 'cm', or 'mm' # group_rainrate = mm_per_hour # Options are 'inch_per_hour', 'cm_per_hour', or 'mm_per_hour' # group_temperature = degree_C # Options are 'degree_C', 'degree_F', or 'degree_K' # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused # Uncommenting the following section frequently results in more # attractive formatting of times and dates, but may not work in # your locale. [[[[TimeFormats]]]] hour = %I %p day = %I:%M week = %I:%M on %A month = %d-%b-%Y %I:%M year = %d-%b-%Y %I:%M rainyear = %d-%b-%Y %I:%M current = %d-%b-%Y %I:%M ephem_day = %I:%M ephem_year = %d-%b-%Y %I:%M # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused [[[Labels]]] # Users frequently change the labels for these observation types. [[[[Generic]]]] # inHumidity = Inside Humidity # inTemp = Inside Temperature # outHumidity = Outside Humidity # outTemp = Outside Temperature # extraTemp1 = Temperature1 # extraTemp2 = Temperature2 # extraTemp3 = Temperature3 # The following line is used to keep the above lines indented # properly. It can be ignored. unused = unused ############################################################################## # This service converts the unit system coming from the hardware to a unit # system in the database. [StdConvert] # The target_unit affects only the unit system in the database. Once # chosen it cannot be changed without converting the entire database. # Modification of target_unit after starting weewx will result in # corrupt data - the database will contain a mix of US and METRIC data. # # The value of target_unit does not affect the unit system for # reporting - reports can display US, Metric, or any combination of units. # # In most cases, target_unit should be left as the default: US # # In particular, those migrating from a standard wview installation # should use US since that is what the wview database contains. # DO NOT MODIFY THIS VALUE UNLESS YOU KNOW WHAT YOU ARE DOING! target_unit = US # Options are 'US', 'METRICWX', or 'METRIC' ############################################################################## # This section can adjust data using calibration expressions. [StdCalibrate] [[Corrections]] # For each type, an arbitrary calibration expression can be given. # It should be in the units defined in the StdConvert section. # Example: foo = foo + 0.2 ############################################################################## # This section is for quality control checks. If units are not specified, # values must be in the units defined in the StdConvert section. [StdQC] [[MinMax]] barometer = 26, 32.5, inHg pressure = 24, 34.5, inHg outTemp = -40, 120, degree_F inTemp = 10, 120, degree_F outHumidity = 0, 100 inHumidity = 0, 100 windSpeed = 0, 120, mile_per_hour rain = 0, 10, inch ############################################################################## # This section controls the origin of derived values. [StdWXCalculate] [[Calculations]] # How to calculate derived quantities. Possible values are: # hardware - use the value provided by hardware # software - use the value calculated by weewx # prefer_hardware - use value provide by hardware if available, # otherwise use value calculated by weewx pressure = prefer_hardware altimeter = prefer_hardware appTemp = prefer_hardware barometer = prefer_hardware cloudbase = prefer_hardware dewpoint = prefer_hardware ET = prefer_hardware heatindex = prefer_hardware humidex = prefer_hardware inDewpoint = prefer_hardware maxSolarRad = prefer_hardware rainRate = prefer_hardware windchill = prefer_hardware windrun = prefer_hardware ############################################################################## # For hardware that supports it, this section controls how often the # onboard clock gets updated. [StdTimeSynch] # How often to check the weather station clock for drift (in seconds) clock_check = 14400 # How much it can drift before we will correct it (in seconds) max_drift = 5 ############################################################################## # This section is for configuring the archive service. [StdArchive] # If the station hardware supports data logging then the archive interval # will be downloaded from the station. Otherwise, specify it (in seconds). archive_interval = 300 # If possible, new archive records are downloaded from the station # hardware. If the hardware does not support this, then new archive # records will be generated in software. # Set the following to "software" to force software record generation. record_generation = hardware # Whether to include LOOP data in hi/low statistics. loop_hilo = True # Uncomment and change to override logging for archive operations. # log_success = True # log_failure = True # The data binding used to save archive records. data_binding = wx_binding ############################################################################## # This section binds a data store to a database. [DataBindings] [[wx_binding]] # The database must match one of the sections in [Databases]. # This is likely to be the only option you would want to change. database = archive_sqlite # The name of the table within the database. table_name = archive # The manager handles aggregation of data for historical summaries. manager = weewx.manager.DaySummaryManager # The schema defines the structure of the database. # It is *only* used when the database is created. schema = schemas.wview_extended.schema ############################################################################## # This section defines various databases. [Databases] # A SQLite database is simply a single file. [[archive_sqlite]] database_name = weewx.sdb database_type = SQLite # MySQL [[archive_mysql]] database_name = weewx database_type = MySQL ############################################################################## # This section defines defaults for the different types of databases. [DatabaseTypes] # Defaults for SQLite databases. [[SQLite]] driver = weedb.sqlite # Directory in which database files are located, relative to WEEWX_ROOT SQLITE_ROOT = /var/lib/weewx # Defaults for MySQL databases. [[MySQL]] driver = weedb.mysql # The host where the database is located. host = localhost # The user name for logging in to the host. user = weewx # Use quotes around the password to guard against parsing errors. password = weewx ############################################################################## # This section configures the internal weewx engine. [Engine] # This 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 restful_services = weewx.restx.StdStationRegistry, weewx.restx.StdWunderground, weewx.restx.StdPWSweather, weewx.restx.StdCWOP, weewx.restx.StdWOW, weewx.restx.StdAWEKAS report_services = weewx.engine.StdPrint, weewx.engine.StdReport
# Place your local configuration in /etc/mosquitto/conf.d/ # # A full description of the configuration file is at # /usr/share/doc/mosquitto/examples/mosquitto.conf.example pid_file /run/mosquitto/mosquitto.pid persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d #listener 1883 #listener 9001 #protocol websockets