GithubHelp home page GithubHelp logo

byows_rpi's Introduction

Hi there ๐Ÿ‘‹

This is @jardiamj! ๐Ÿ‘‹

  • ๐ŸŒฑ Iโ€™m currently pursuing a Masters in Computer Science at University Of Washington - Bothell.
  • ๐Ÿ“š As part of my thesis I am working on developing simulation models for Emergency Services Communication Systems AKA the 911 system.
  • ๐Ÿ“š I hold a Bachelors degree in Agriculture and Natural Resourses.
  • โค๏ธ I love nature ๐ŸŒฟ, gardening ๐ŸŒฑ ๐ŸŒน, woodworking ๐Ÿ”จ, sports โšฝ and technology ๐Ÿ’ป. In no specific order.
  • ๐Ÿ’ฌ I also love conversations and the sharing of ideas with like minded people.

byows_rpi's People

Contributors

djenk41us avatar fuzzyazurik avatar jardiamj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

byows_rpi's Issues

Unable to load driver

Hi, I build a weather station using the Raspberry pi weather station guide, all is working perfectly with the python3 code: upload to weather underground, store data to SQLite, etc....
I use a Raspberry 3b equipped with a real clock an battery.
I follow your guide for the installation.

When I start weewx ``sudo weewxd /etc/weewx/weewx.conf`

The program stop`and /var/log/syslog look like that:

Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Initializing weewx version 3.9.2
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Using Python 2.7.16 (default, Apr 6 2019, 01:42:57) #12[GCC 8.2.0]
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Platform Linux-4.19.66-v7+-armv7l-with-debian-10.1
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Locale is 'en_GB.UTF-8'
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Using configuration file /etc/weewx/weewx.conf
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Loading station type BYOWS (user.byows_rpi)
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Import of driver failed: int() can't convert non-string with explicit base (<type 'exceptions.TypeError'>)
Sep 19 15:03:20 raspberrypi weewx[1457]: engine: Unable to load driver: int() can't convert non-string with explicit base
Sep 19 15:03:20 raspberrypi weewx[1457]: ****

Exiting...
I reinstall all the library that I use with python3 with pip to have them with python 2.7, all my wiring is operational, I don't know what to do do now.
Thanks in advance for your time.

Connecting other sensors

Hi Jardi!

I appreciate your BYOWS_RPi driver , working with all sensors, but i would like to develop further.
Are there any solution to connect - to the BYOWS_RPi driver - other DIY sensors like sun radiation meter (tiny solar cell), dust and smoke sensor?

Best wishes,
Zoltan

Pin 8 is already in use by SPI...?

Hi! Thanks for writing this driver, it'll let me get a bargain-basement weather station online...once I get it working. ;)

For now all I have is a BME280, so in weewx.conf I have a sensors = bme280 line so that should be all it's trying to access. But weewx can't load the driver. The log has the following lines:

Apr 20 10:45:36 raspberrypi weewx[3240]: BYOWS RPi: driver version is 0.51
Apr 20 10:45:36 raspberrypi weewx[3240]: engine: Import of driver failed: pin 8 is already in use by SPI(port=0, device=0) (<class 'gpiozero.exc.GPIOPinInUse'>)
Apr 20 10:45:36 raspberrypi weewx[3240]: engine: Unable to load driver: pin 8 is already in use by SPI(port=0, device=0)
Apr 20 10:45:36 raspberrypi weewx[3240]: **** Exiting...

I'm not sure why it should even be trying to talk to SPI or GPIO pin 8, as the sensor is hooked up to I2C on GPIO2/3.

I've tried the bme280_sensor.py sample script from the raspberrypi.org build instructions and it works fine, so I know the sensor is ok and is talking to the pi over I2C.

I've also tried running "PYTHONPATH=/usr/share/weewx python /usr/share/weewx/user/byows_rpi.py" to test it outside of weewx and see if I got a more detailed error message but all I get is the following:

Traceback (most recent call last):
File "/usr/share/weewx/user/byows_rpi.py", line 335, in
station = ByowsRpiStation()
File "/usr/share/weewx/user/byows_rpi.py", line 113, in init
self.bme280_sensor.load_calibration_params(self.bme280_bus, self.bme280_address)
File "/usr/local/lib/python2.7/dist-packages/bme280/init.py", line 153, in load_calibration_params
compensation_params.dig_T1 = read.unsigned_short(0x88)
File "/usr/local/lib/python2.7/dist-packages/bme280/reader.py", line 40, in unsigned_short
return self._bus.read_word_data(self._address, register) & 0xffff
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 449, in read_word_data
self._set_address(i2c_addr, force=force)
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 333, in _set_address
ioctl(self.fd, I2C_SLAVE, address)
TypeError: argument must be an int, or have a fileno() method

Not sure what I'm doing wrong here, can you please help? Let me know if there's any more info you might need from me. Thanks!

Davis Anemometer 6410 RJ11 to USB Adapter Setup

hey thanks for sharing your work!

I only connected the Davis Anemometer to the RPi4B Model and now it would be great to read out the wind data. Can you give me some advice on how to change your code according my setup?

Happy greetings
Paul

Unable to disable simulator drive

I have installed the byows driver on the latest version of weewx running buster on pi3b.

I have restarted the weewx service but when i load the web gui

http://localhost/weewx

It displays data from the simulator driver.

List Drivers returns

pi@weatherpi:~ $ wee_config --list-drivers
Module name Driver name Version Status
user.byows_rpi BYOWS 0.51
weewx.drivers.acurite ? ? No module named 'usb'
weewx.drivers.cc3000 ? ? No module named 'serial'
weewx.drivers.fousb ? ? No module named 'usb'
weewx.drivers.simulator Simulator 3.2
weewx.drivers.te923 ? ? No module named 'usb'
weewx.drivers.ultimeter ? ? No module named 'serial'
weewx.drivers.vantage Vantage 3.2.0
weewx.drivers.wmr100 ? ? No module named 'usb'
weewx.drivers.wmr200 ? ? No module named 'usb'
weewx.drivers.wmr300 ? ? No module named 'usb'
weewx.drivers.wmr9x8 ? ? No module named 'serial'
weewx.drivers.ws1 WS1 0.40
weewx.drivers.ws23xx WS23xx 0.41
weewx.drivers.ws28xx ? ? No module named 'usb'

Is there something else i need to do?

TypeError - BYOWS_RPi

Keep getting this error. Can you maybe have a look why ?

pi@Weather:~/weather $ sudo PYTHONPATH=/usr/share/weewx python ./byows_rpi.py
Traceback (most recent call last):
File "./byows_rpi.py", line 335, in
station = ByowsRpiStation()
File "./byows_rpi.py", line 113, in init
self.bme280_sensor.load_calibration_params(self.bme280_bus, self.bme280_address)
File "/usr/local/lib/python2.7/dist-packages/bme280/init.py", line 153, in load_calibration_params
compensation_params.dig_T1 = read.unsigned_short(0x88)
File "/usr/local/lib/python2.7/dist-packages/bme280/reader.py", line 40, in unsigned_short
return self._bus.read_word_data(self._address, register) & 0xffff
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 470, in read_word_data
self._set_address(i2c_addr, force=force)
File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 354, in _set_address
ioctl(self.fd, I2C_SLAVE, address)
TypeError: argument must be an int, or have a fileno() method

Permission error?

I installed Weewx 5.1 on a RPI 2 and made a BYOWS station. It worked, but I screwed up installing updates and shutdown the RPI, so my SD was skrewed. I made a new installation, but no having trouble to get Weewx with BYOWS driver working. BYOWS scripts work, Weewx installing works (works fine with simulator. But when I install BYOWS driver and set the BYOWS as default in weewx.conf I get this error:

groetg@byows-jim:~ $ sudo systemctl status weewx
ร— weewx.service - WeeWX
Loaded: loaded (/lib/systemd/system/weewx.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Tue 2024-07-09 17:38:35 CEST; 5min ago
Duration: 1.661s
Docs: https://weewx.com/docs
Process: 17613 ExecStart=weewxd /etc/weewx/weewx.conf (code=exited, status=4)
Main PID: 17613 (code=exited, status=4)
CPU: 1.651s

Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL weewx.engine: **** File "/usr/local/lib/python3.11/dist-packages/gpiozero/pins/pi.py", line 639, in _set_when_changed
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL weewx.engine: **** self._enable_event_detect()
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL weewx.engine: **** File "/usr/local/lib/python3.11/dist-packages/gpiozero/pins/rpigpio.py", line 220, in _enable_event_detect
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL weewx.engine: **** GPIO.add_event_detect(
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL weewx.engine: **** RuntimeError: Failed to add edge detection
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL main: Unable to load driver: Failed to add edge detection
Jul 09 17:38:35 byows-jim weewxd[17613]: CRITICAL main: **** Exiting...
Jul 09 17:38:35 byows-jim systemd[1]: weewx.service: Main process exited, code=exited, status=4/NOPERMISSION
Jul 09 17:38:35 byows-jim systemd[1]: weewx.service: Failed with result 'exit-code'.
Jul 09 17:38:35 byows-jim systemd[1]: weewx.service: Consumed 1.651s CPU time.


DEBUG info:
Using configuration file /etc/weewx/weewx.conf

System info
Platform: Linux-6.6.31+rpt-rpi-v7-armv7l-with-glibc2.36
Python Version: 3.11.2

Load Information
1 minute load average: 0.14
5 minute load average: 0.37
15 minute load average: 0.35

General Weewx info
Weewx version 5.1.0 detected.

Currently installed extensions
Extension Name Version Description
byows_rpi 0.51 Bring Your Own Weather Station (BYOWS) Driver for the Raspberry Pi

Archive info
Database name: weewx.sdb
Table name: archive
Version 4.0
Unit system: 1 (US)
First good timestamp: 2024-07-09 15:50:00 CEST (1720533000)
Last good timestamp: 2024-07-09 17:25:00 CEST (1720538700)
Number of records: 20
weewx (weewx.conf) is set to use an archive interval of 300 seconds.
The station hardware was not interrogated to determine the archive interval.

Supported SQL keys
dateTime usUnits interval
altimeter appTemp appTemp1
barometer batteryStatus1 batteryStatus2
batteryStatus3 batteryStatus4 batteryStatus5
batteryStatus6 batteryStatus7 batteryStatus8
cloudbase co co2
consBatteryVoltage dewpoint dewpoint1
ET extraHumid1 extraHumid2
extraHumid3 extraHumid4 extraHumid5
extraHumid6 extraHumid7 extraHumid8
extraTemp1 extraTemp2 extraTemp3
extraTemp4 extraTemp5 extraTemp6
extraTemp7 extraTemp8 forecast
hail hailBatteryStatus hailRate
heatindex heatindex1 heatingTemp
heatingVoltage humidex humidex1
inDewpoint inHumidity inTemp
inTempBatteryStatus leafTemp1 leafTemp2
leafWet1 leafWet2 lightning_distance
lightning_disturber_count lightning_energy lightning_noise_count
lightning_strike_count luminosity maxSolarRad
nh3 no2 noise
o3 outHumidity outTemp
outTempBatteryStatus pb pm10_0
pm1_0 pm2_5 pressure
radiation rain rainBatteryStatus
rainRate referenceVoltage rxCheckPercent
signal1 signal2 signal3
signal4 signal5 signal6
signal7 signal8 snow
snowBatteryStatus snowDepth snowMoisture
snowRate so2 soilMoist1
soilMoist2 soilMoist3 soilMoist4
soilTemp1 soilTemp2 soilTemp3
soilTemp4 supplyVoltage txBatteryStatus
UV uvBatteryStatus windBatteryStatus
windchill windDir windGust
windGustDir windrun windSpeed

Databases configured in weewx.conf:
archive_sqlite:
database_name weewx.sdb
driver weedb.sqlite
SQLITE_ROOT /var/lib/weewx
archive_mysql:
database_name weewx
driver weedb.mysql
host localhost
user weewx
password weewx

--- Start configuration file /etc/weewx/weewx.conf ---

WEEWX CONFIGURATION FILE

Copyright (c) 2009-2024 Tom Keffer [email protected]

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 = 1

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.1.0
config_path = /etc/weewx/weewx.conf
WEEWX_ROOT = /etc/weewx

##############################################################################

This section is for information about the station.

[Station]

# Description of the station location, such as your town.
location = "Burgerbrug, NH"

# Latitude in decimal degrees. Negative for southern hemisphere.
latitude = 52.755603
# Longitude in decimal degrees. Negative for western hemisphere.
longitude = 4.6754483

# Altitude of the station, with the unit it is in. This is used only
# if the hardware cannot supply a value.
altitude = 0, meter    # 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 = BYOWS

# If you have a website, you may specify an URL. The URL is required if you
# intend to register your station. The URL must include the scheme, for
# example, "http://" or "https://"
station_url = XXXXXX

# 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

##############################################################################

[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

##############################################################################

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 = False

[[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 = XXXXXX
    password = XXXXXX

[[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 = XXXXXX
    # If this is an APRS (radio amateur) station, specify the
    # passcode (e.g., 12345). Otherwise, ignore.
    passcode = XXXXXX

[[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 = XXXXXX
    password = XXXXXX

[[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 = XXXXXX
    password = XXXXXX

[[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 = XXXXXX
    password = XXXXXX
    
    # 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

##############################################################################

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

[[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 = true
    user = XXXXXX
    password = XXXXXX
    server = XXXXXX    # The ftp server name, e.g, www.myserver.org
    path = /weerindedraai.nl/www/borst    # 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 = XXXXXX
    user = XXXXXX
    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]]]]
            # day        = %H:%M
            # week       = %H:%M on %A
            # month      = %d-%b-%Y %H:%M
            # year       = %d-%b-%Y %H:%M
            # rainyear   = %d-%b-%Y %H:%M
            # current    = %d-%b-%Y %H:%M
            # ephem_day  = %H:%M
            # ephem_year = %d-%b-%Y %H:%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 = XXXXXX
    # Use quotes around the password to guard against parsing errors.
    password = XXXXXX

##############################################################################

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

[BYOWS]
# This section is for the Raspberry Pi Bring Your Own Weather Station driver.

# [REQUIRED]
# The driver to use.
driver = user.byows_rpi

# [OPTIONAL]
# How often should the driver generate packets in seconds
loop_interval = 2.5

# [OPTIONAL]
# Pin to which anemometer is connected, the DEFAULT is pin 5.
anemometer_pin = 5

# [OPTIONAL]
# Pin to which rain bucket is connected, the DEFAULT is pin 6.
rain_bucket_pin = 6

# [OPTIONAL]
# Port and address for sensor bme280, the DEFAULT are port=1 address=0x77
bme280_port = 1
bme280_address = 0x76

# [OPTIONAL]
# Channel to which wind vane is connected to on MCP3008, The DEFAULT is channel 0
mcp3008_channel = 0

# [OPTIONAL]
# Anemometer adjustment value, the DEFAULT is 1.18
anemometer_adjustment = 1.18

# [OPTIONAL]
# Bucket Size in mm, the DEFAULT is 0.2794 mm.
bucket_size = 0.2794

# [OPTIONAL]
# Anemometer radious in cm, the DEFAULT is 9.0 cm.    
anemometer_radius_cm = 9.0

GPIO library no longer supported?

When I try to start weewx with the BYOWS extension enabled, it crashes and the kernel complains about GPIO (doesn't seem to matter which GPIO pin I set for the anemometer; here it's 24, but I've tried others with otherwise identical results):

Apr 02 16:02:59 radiopi systemd[1]: Started weewx.service - WeeWX.
Apr 02 16:02:59 radiopi sudo[1744]: pam_unix(sudo:session): session closed for user root
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Initializing weewxd version 5.0.2
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Command line: /usr/share/weewx/weewxd.py /etc/weewx/weewx.conf
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Using Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Located at /usr/bin/python3
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Platform Linux-6.6.20+rpt-rpi-v8-aarch64-with-glibc2.36
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Locale: 'en_GB.UTF-8'
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Entry path: /usr/share/weewx/weewxd.py
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: WEEWX_ROOT: /etc/weewx
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Configuration file: /etc/weewx/weewx.conf
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: User module: /etc/weewx/bin/user
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Debug: 0
Apr 02 16:03:00 radiopi weewxd[1748]: INFO weewx.engine: Loading station type BYOWS (user.byows_rpi)
Apr 02 16:03:00 radiopi weewxd[1748]: INFO user.byows_rpi: using driver BYOWS
Apr 02 16:03:00 radiopi weewxd[1748]: INFO user.byows_rpi: driver version is 0.51
Apr 02 16:03:00 radiopi weewxd[1748]: 2024-04-02 16:03:00 xCreatePipe: Can't set permissions (436) for //.lgd-nfy0, No such file or directory
Apr 02 16:03:00 radiopi weewxd[1748]: /usr/lib/python3/dist-packages/gpiozero/devices.py:295: PinFactoryFallback: Falling back from lgpio: [Errno 2] No such file or directory: '.lgd-nfy-3'
Apr 02 16:03:00 radiopi weewxd[1748]:   warnings.warn(
Apr 02 16:03:00 radiopi weewxd[1748]: ERROR weewx.engine: Import of driver failed: Failed to add edge detection (<class 'RuntimeError'>)
Apr 02 16:03:00 radiopi kernel: export_store: invalid GPIO 24
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****  Traceback (most recent call last):
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/share/weewx/weewx/engine.py", line 115, in setupStation
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.console = loader_function(config_dict, self)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 44, in loader
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      return ByowsRpi(**config_dict[DRIVER_NAME])
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 72, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.station = ByowsRpiStation(**params)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                     ^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 103, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.wind_gauge = WindGauge(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                        ^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 238, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.wind_speed_sensor = Button(anem_pin)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                               ^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 103, in __call__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self = super().__call__(*args, **kwargs)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 412, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      super().__init__(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 417, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      super().__init__(*args, **kwargs)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 168, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.pin.when_changed = self._pin_changed
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      ^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/__init__.py", line 471, in <lambda>
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      lambda self, value: self._set_when_changed(value),
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 636, in _set_when_changed
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self._enable_event_detect()
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/rpigpio.py", line 220, in _enable_event_detect
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      GPIO.add_event_detect(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****  RuntimeError: Failed to add edge detection
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL __main__: Unable to load driver: Failed to add edge detection
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL __main__:     ****  Exiting...
Apr 02 16:03:00 radiopi systemd[1]: weewx.service: Main process exited, code=exited, status=4/NOPERMISSION
Apr 02 16:03:00 radiopi systemd[1]: weewx.service: Failed with result 'exit-code'.

The discussion on the edge-detection error here and other things I've gleaned from around the internet suggest that the gpiozero python library is no longer supported.

Or perhaps I'm doing something else wrong?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.