Weewx and Acurite Access setup instructions

743 views
Skip to first unread message

meteo219

unread,
Sep 1, 2022, 11:46:33 AM9/1/22
to weewx-user
Hello folks,

I am trying to setup weewx from my old 2015 Acurite 5-in-1 weather station through the Acurite Access but I am not having any luck.  First, I can get weewx to work from my weather display via USB without issue but I am looking to see if I can capture data through the Access in case I upgrade to the Acurite Atlas.  Long story short, my relative humidity sensor is failing (showing a constant 99% relative humidity); the board looks fine, but Acurite doesn't have a replacement part for it.  So, I can either buy a newer Acurite 5-in-1 or upgrade to the Atlas knowing their is no USB option on the Atlas weather display.

Does anyone have step by step directions on how to setup weewx using the interceptor.py with the Acurite Access.  I currently send data to WU and CWOP.  I have read the readme that came with the interceptor.py, but I just get errors when trying.

For example using it to listen:

PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py --device=acurite-bridge --mode=listen --port=80
Traceback (most recent call last):
  File "/usr/share/weewx/user/interceptor.py", line 2671, in <module>
    device = InterceptorDriver.DEVICE_TYPES.get(options.device_type)(
  File "/usr/share/weewx/user/interceptor.py", line 1002, in __init__
    super(AcuriteBridge, self).__init__(
  File "/usr/share/weewx/user/interceptor.py", line 430, in __init__
    self._server = Consumer.TCPServer(address, port, handler)
  File "/usr/share/weewx/user/interceptor.py", line 585, in __init__
    TCPServer.__init__(self, (address, int(port)), handler)
  File "/usr/lib64/python3.10/socketserver.py", line 452, in __init__
    self.server_bind()
  File "/usr/lib64/python3.10/socketserver.py", line 466, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

Using sniff:

PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/interceptor.py --device=acurite-b
ridge --mode=sniff --iface=enp0s3 --filter="src 192.168.0.245 and dst port 80"
Traceback (most recent call last):
  File "/usr/share/weewx/user/interceptor.py", line 2671, in <module>
    device = InterceptorDriver.DEVICE_TYPES.get(options.device_type)(
  File "/usr/share/weewx/user/interceptor.py", line 1002, in __init__
    super(AcuriteBridge, self).__init__(
  File "/usr/share/weewx/user/interceptor.py", line 427, in __init__
    self._server = Consumer.SniffServer(
  File "/usr/share/weewx/user/interceptor.py", line 466, in __init__
    import pcap
ModuleNotFoundError: No module named 'pcap'

I am running Fedora 36, with libpcap installed:

rpm -qa|grep -i pcap
libpcap-1.10.1-3.fc36.x86_64

Any ideas and suggestions would be greatly appreciated.  I want to make sure I can get the interceptor.py working with the Access before purchasing a new weather station.

Sincerely,

Jeff

an oldman

unread,
Sep 1, 2022, 5:06:11 PM9/1/22
to weewx-user
hi
fedora 36 does not have a pcap rpm for python3 you would have to install the pcap with pip3 if there is one for python3
i use sdr for my atlas, 5n1s, lightning, towers and pro sensors on fedora 36

gjr80

unread,
Sep 1, 2022, 6:04:53 PM9/1/22
to weewx-user
Regards your listen mode error. Check you don't have something else on your WeeWX device using port 80. Obvious candidate is a web server.

Gary

meteo219

unread,
Sep 3, 2022, 5:52:43 PM9/3/22
to weewx-user
Hi guys,

I do have a webserver on my weewx device (192.168.0.98) running Fedora 36 so yes that error does make sense.  I am looking to avoid the sdr route if possible as it requires more hardware.  Currently, my Acurite Access (192.168.0.245) is feeding WU with data from my Acurite Iris 5-in-1 weather station.  I am trying to use weewx with the interceptor.py to capture the data from an Acurite Access across the network so that I can send the data to CWOP as well.  I was using VISReader to send data to both WU and CWOP, but if I upgrade to the Acurite Atlas, I will need to move on and use something else like weewx.  I was able to get weewx to work with the USB option from my Acurite Iris 5-in-1 weather display, but that goes away with the Atlas as well. 

Does anyone have the following setup instructions?

Use the Interceptor Driver to capture data from an Acurite Access base station by grabbing data uploaded to Weather Underground (WU).

It sounds like someone out there has it configured, but I can't get it to work.  I get errors every time I try using the interceptor.py:

python3[5027]: weewx[5027] ERROR weewx.engine: Import of driver failed: [Errno 98] Address already in use (<class 'OSError'>)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****  Traceback (most recent call last):
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/weewx/engine.py", line 119, in setupStation
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      self.console = loader_function(config_dict, self)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 316, in loader
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      return InterceptorDriver(**config_dict[DRIVER_NAME])
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 2529, in __init__
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      self._device = self.DEVICE_TYPES.get(self._device_type)(**stn_dict)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 728, in __init__
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      super(WUClient, self).__init__(
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 430, in __init__
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      self._server = Consumer.TCPServer(address, port, handler)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/share/weewx/user/interceptor.py", line 585, in __init__
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      TCPServer.__init__(self, (address, int(port)), handler)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/lib64/python3.10/socketserver.py", line 452, in __init__
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      self.server_bind()
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****    File "/usr/lib64/python3.10/socketserver.py", line 466, in server_bind
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****      self.socket.bind(self.server_address)
python3[5027]: weewx[5027] CRITICAL weewx.engine:     ****  OSError: [Errno 98] Address already in use
python3[5027]: weewx[5027] CRITICAL __main__: Unable to load driver: [Errno 98] Address already in use
python3[5027]: weewx[5027] CRITICAL __main__:     ****  Exiting...

I have tried using these settings:

[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
    #   wu-client - any hardware that uses the weather underground protocol
    device_type = wu-client  # I have tried acurite-bridge as well
    pcap_filter = src 192.168.0.245 and port 80

    [[sensor_map]]
        outTemp = temperature.00000009.*    # I do have multiple sensors attached to Access, so this the ID for the 5-in-1

Thanks again,

Jeff

vince

unread,
Sep 3, 2022, 6:02:25 PM9/3/22
to weewx-user
On Saturday, September 3, 2022 at 2:52:43 PM UTC-7 meteo219 wrote:
I do have a webserver on my weewx device (192.168.0.98) running Fedora 36 so yes that error does make sense.  

So.....perhaps you might try shutting down your webserver (temporarily) or run it on a different port.

You can't bind to a port that is already in use.
 

Jeff Chabot

unread,
Sep 3, 2022, 7:06:35 PM9/3/22
to weewx...@googlegroups.com
Hi Vince,

That was definitely part of my problem.  I moved the webserver to port 81 and no more error messages.  But, now I am just getting empty queues:

python3[8517]: weewx[8517] INFO user.interceptor: driver version is 0.60
python3[8517]: weewx[8517] INFO user.interceptor: device type: wu-client
python3[8517]: weewx[8517] INFO user.interceptor: hardware name: weatherstation via interceptor
python3[8517]: weewx[8517] INFO user.interceptor: mode is listen
python3[8517]: weewx[8517] INFO user.interceptor: listen on :80
python3[8517]: weewx[8517] INFO user.interceptor: sensor map: {'pressure': 'pressure', 'barometer': 'barometer', 'outHumidity': 'humidity_out', 'inHumidity': 'humidity_in', 'outTemp': 'temperature_out', 'inTemp': 'temperature_in', 'windSpeed': 'wind_speed', 'windGust': 'wind_gust', 'windDir': 'wind_dir', 'windGustDir': 'wind_gust_dir', 'radiation': 'solar_radiation', 'dewpoint': 'dewpoint', 'windchill': 'windchill', 'rain': 'rain', 'rainRate': 'rain_rate', 'UV': 'uv', 'txBatteryStatus': 'battery', 'extraTemp1': 'temperature_1', 'extraTemp2': 'temperature_2', 'extraTemp3': 'temperature_3', 'extraHumid1': 'humidity_1', 'extraHumid2': 'humidity_2', 'soilTemp1': 'soil_temperature_1', 'soilTemp2': 'soil_temperature_2', 'soilMoist1': 'soil_moisture_1', 'soilMoist2': 'soil_moisture_2', 'soilMoist3': 'soil_moisture_3', 'soilMoist4': 'soil_moisture_4', 'leafWet1': 'leafwetness_1', 'leafWet2': 'leafwetness_2', 'pm2_5': 'pm2_5', 'extraTemp4': 'temperature_4', 'extraTemp5': 'temperature_5', 'extraTemp6': 'temperature_6', 'extraTemp7': 'temperature_7', 'extraTemp8': 'temperature_8', 'extraHumid3': 'humidity_3', 'extraHumid4': 'humidity_4', 'extraHumid5': 'humidity_5', 'extraHumid6': 'humidity_6', 'extraHumid7': 'humidity_7', 'extraHumid8': 'humidity_8', 'soilTemp3': 'soil_temperature_3', 'soilTemp4': 'soil_temperature_4'}
python3[8517]: weewx[8517] DEBUG user.interceptor: start tcp server
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdTimeSynch
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdTimeSynch
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdConvert
python3[8517]: weewx[8517] INFO weewx.engine: StdConvert target unit is 0x1
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdConvert
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdCalibrate
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdCalibrate
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdQC
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdQC
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.wxservices.StdWXCalculate
python3[8517]: weewx[8517] INFO weewx.wxservices: StdWXCalculate will use data binding wx_binding
python3[8517]: weewx[8517] DEBUG weewx.manager: Daily summary version is 4.0
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.wxservices.StdWXCalculate
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.wxxtypes.StdWXXTypes
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdWXXTypes
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.wxxtypes.StdPressureCooker
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdPressureCooker
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.wxxtypes.StdRainRater
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdRainRater
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.wxxtypes.StdDelta
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.wxxtypes.StdDelta
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdArchive
python3[8517]: weewx[8517] INFO weewx.engine: Archive will use data binding wx_binding
python3[8517]: weewx[8517] INFO weewx.engine: Record generation will be attempted in 'hardware'
python3[8517]: weewx[8517] INFO weewx.engine: Using archive interval of 300 seconds (specified in weewx configuration)
python3[8517]: weewx[8517] DEBUG weewx.engine: Use LOOP data in hi/low calculations: 1
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdArchive
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdStationRegistry
python3[8517]: weewx[8517] INFO weewx.restx: StationRegistry: Station will be registered.
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdStationRegistry
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdWunderground
python3[8517]: weewx[8517] INFO weewx.restx: Wunderground: Posting not enabled.
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdWunderground
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdPWSweather
python3[8517]: weewx[8517] INFO weewx.restx: PWSweather: Posting not enabled.
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdPWSweather
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdCWOP
python3[8517]: weewx[8517] INFO weewx.restx: CWOP: Data for station EW7458 will be posted
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdCWOP
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdWOW
python3[8517]: weewx[8517] INFO weewx.restx: WOW: Posting not enabled.
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdWOW
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.restx.StdAWEKAS
python3[8517]: weewx[8517] INFO weewx.restx: AWEKAS: Posting not enabled.
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.restx.StdAWEKAS
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdPrint
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdPrint
python3[8517]: weewx[8517] DEBUG weewx.engine: Loading service weewx.engine.StdReport
python3[8517]: weewx[8517] INFO weewx.engine: 'pyephem' detected, extended almanac data is available
python3[8517]: weewx[8517] DEBUG weewx.engine: Finished loading service weewx.engine.StdReport
python3[8517]: weewx[8517] INFO __main__: Starting up weewx version 4.8.0
python3[8517]: weewx[8517] DEBUG weewx.engine: Station does not support reading the time
python3[8517]: weewx[8517] INFO weewx.engine: Using binding 'wx_binding' to database 'weewx.sdb'
python3[8517]: weewx[8517] INFO weewx.manager: Starting backfill of daily summaries
python3[8517]: weewx[8517] INFO weewx.manager: Daily summaries up to date
python3[8517]: weewx[8517] INFO weewx.engine: Starting main packet loop.
python3[8517]: weewx[8517] DEBUG weewx.manager: Daily summary version is 4.0
python3[8517]: weewx[8517] DEBUG user.interceptor: empty queue

I think that I am getting real close now. I have some ideas such as putting the sensor_map code back in place to see if that helps.

Thanks again,

Jeff




--
You received this message because you are subscribed to a topic in the Google Groups "weewx-user" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/weewx-user/TuaSMUbgBFg/unsubscribe.
To unsubscribe from this group and all its topics, send an email to weewx-user+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/e446d79b-2a07-4789-ae81-59db6b29f77en%40googlegroups.com.

meteo219

unread,
Sep 6, 2022, 12:08:53 PM9/6/22
to weewx-user
So adding the sensor_map didn't help.  I am not seeing any data using the interceptor.py looking at that Access.  The Access and my Fedora VM are plugged into the same network switch and I can access the Access website using: http://192.168.0.245/.  Based on what I read, it sounds like I may need to plug the Access directory into another network port shared by the Fedora VM.  I do have two Ethernet adapters so I gave it a try.  In this configuration, the Acurite Access just blinks red.  I don't think that option will work.

Any other ideas?  Is there anyone capturing data across the network from the Access using the interceptor tool?  Thanks in advance for your help.

Sincerely

Jeff

an oldman

unread,
Sep 6, 2022, 5:19:20 PM9/6/22
to weewx-user
i use the access's wunderground for pressure
setup access -> fedora -> myacurite.com (web)

fedora hijack dns rtupdate.wunderground.com -> fedora apache cgi script
fedora runs dhcpd and dns server for the wired network the access is on

Andy

unread,
Sep 7, 2022, 11:46:35 AM9/7/22
to weewx-user
The Access and my Fedora VM are plugged into the same network switch - Switches are Layer 2 devices, generally you will not see traffic from Acurite Access to the acurite servers. 

 I do have two Ethernet adapters so I gave it a try.  In this configuration, the Acurite Access just blinks red. -    Did you bridge the interfaces to allow traffic to pass between them? Does blinking red indicate the Access cannot reach the internet?

Somehow you need to see traffic from the Acurite Access. Seems like you are very close with the two interface method. I would try that before going down the DNS hijack route. 

from the docs:

Example: sniff mode for any WU client

   This example assumes two network interfaces on the computer running weewx.

1) Plug the computer into the local network using the first interface (eth0).
   Plug the device into the second interface (eth1).
   Bridge the two network interfaces.
   If you run any web services on the computer, configure them to listen on
   interface eth0, not eth1.

2) Set parameters in the weewx configuration file.  The device has IP address
   of X.X.X.X

[Interceptor]
    driver = user.interceptor
    device_type = wu-client
    mode = sniff
    iface = eth1
    pcap_filter = src X.X.X.X and dst port 80

Andy

an oldman

unread,
Sep 7, 2022, 3:37:14 PM9/7/22
to weewx-user
hi andy
access passes through fedora to the internet.
enp1s0 is the access
wlp4s0 is wifi to router (internet)

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0                UG    600    0        0 wlp4s0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp4s0
192.168.2.0     0.0.0.0         255.255.255.0   U     100    0        0 enp1s0

i send to myacurite but not WU that's why i DNS hijack rtupdate.wunderground.com
Reply all
Reply to author
Forward
0 new messages