Beta of V4.3.0 available

387 views
Skip to first unread message

Tom Keffer

unread,
Dec 14, 2020, 11:25:12 AM12/14/20
to weewx-development
This release includes an important bug fix, plus a few additions.

I am particularly interested in the first item on the list: the on-the-fly patch of the daily summaries to fix a V4.2 bug. This bug caused the daily summaries to weight the sums improperly. The patch fixes them. It should run on startup of weewxd, and take only a couple seconds. 


-tk


CHANGES:
Version 4.2.0 had a bug, which caused the sums in the daily summary to be
incorrectly calculated. This version includes a patch to fix the problem. It
runs once at startup. Fixes issue #623.

Service weewx.wxxtypes.StdDelta was inadvertently left out of the list of
services to be run. Fortunately, it is not used. Yet. Added it back in.

Added the "old" NWS algorithm as an option for calculating heat index.

Changed how various undocumented parameters in [StdWXCalculate] are specified.
The only one people are likely to have used is 'ignore_zero_wind'. Its name has
changed to 'force_null', and it has been moved. See the Upgrading Guide.

Documented the various [StdWXCalculate] options.

Fixed corner case for windDir when using software record generation,
ignore_zero_wind=True, and windSpeed=0 for entire record interval. Now emits
last windDir value.

Fixed problem when looking up stars with more than one word in their name.
Fixes issue #620.

Fixed problem where wind gust direction is not available when using software
record generation.

t...@tom.org

unread,
Dec 14, 2020, 8:23:25 PM12/14/20
to weewx-development
Docker image: mitct02/weewx:4.3.0b1

t...@tom.org

unread,
Dec 15, 2020, 9:46:11 AM12/15/20
to weewx-development
Not sure exactly what info besides the below logs would be interesting, but when I use 4.3.0b1 instead of 4.2.0, it fails. This is a non-critical instance of weewx, so I am happy to help debug and try stuff..

using vt-dev
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Initializing weewx version 4.3.0b1
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Using Python 3.6.9 (default, Oct  8 2020, 12:12:24)
[GCC 8.4.0]
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Platform Linux-5.4.49+-x86_64-with-Ubuntu-18.04-bionic
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Locale is 'en_US.UTF-8'
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Using configuration file /home/weewx/weewx.conf
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO __main__: Debug is 1
Dec 15 09:40:19 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO weewx.engine: Loading station type Vantage (weewx.drivers.vantage)
Dec 15 09:40:23 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO weewx.engine: StdConvert target unit is 0x1
Dec 15 09:40:24 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 15 09:40:24 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] INFO weewx.manager: recalculate_weights: Using database 'weewx_vt_dev'
Daily summaries at V2.0. Patching to V3.0
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__: Caught unrecoverable exception:
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  not enough arguments for format string
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  Traceback (most recent call last):
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 238, in execute
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      query = query % args
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  TypeError: not enough arguments for format string
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  During handling of the above exception, another exception occurred:
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  Traceback (most recent call last):
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weedb/mysql.py", line 52, in guarded_fn
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      return fn(*args, **kwargs)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weedb/mysql.py", line 262, in execute
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.cursor.execute(mysql_string, tuple(sql_tuple))
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 240, in execute
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.errorhandler(self, ProgrammingError, str(m))
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 52, in defaulterrorhandler
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      raise errorclass(errorvalue)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  _mysql_exceptions.ProgrammingError: not enough arguments for format string
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  During handling of the above exception, another exception occurred:
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  Traceback (most recent call last):
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "./bin/weewxd", line 148, in main
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      engine = weewx.engine.StdEngine(config_dict)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/engine.py", line 93, in __init__
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.loadServices(config_dict)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/engine.py", line 161, in loadServices
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      obj = weeutil.weeutil.get_object(svc)(self, config_dict)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/wxservices.py", line 38, in __init__
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.db_manager = engine.db_binder.get_manager(data_binding=data_binding, initialize=True)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 534, in get_manager
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.manager_cache[data_binding] = open_manager(manager_dict, initialize)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 684, in open_manager
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      manager_dict['schema'])
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 164, in open_with_create
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      dbmanager = cls(connection, table_name=table_name, schema=schema)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 831, in __init__
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.patch_sums()
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 1341, in patch_sums
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self.recalculate_weights(start_d=datetime.date(2020,6,1))
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 1178, in recalculate_weights
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self._do_tranche(mark_date, end_of_tranche, progress_fn)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 1202, in _do_tranche
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self._do_scratch_reweight(timespan)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 1242, in _do_scratch_reweight
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      self._do_scratch_single(timespan, obs_type, cursor)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weewx/manager.py", line 1296, in _do_scratch_single
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      cursor.execute(update_sql, (start_ts, stop_ts))
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****    File "/home/weewx/bin/weedb/mysql.py", line 61, in guarded_fn
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****      raise klass(e)
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  weedb.DatabaseError: not enough arguments for format string
Dec 15 09:40:30 weewx-deployment-vt-dev-576879b87d-8llg6 weewx[60] CRITICAL __main__:     ****  Exiting.
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 238, in execute
    query = query % args
TypeError: not enough arguments for format string

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/weewx/bin/weedb/mysql.py", line 52, in guarded_fn
    return fn(*args, **kwargs)
  File "/home/weewx/bin/weedb/mysql.py", line 262, in execute
    self.cursor.execute(mysql_string, tuple(sql_tuple))
  File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py", line 240, in execute
    self.errorhandler(self, ProgrammingError, str(m))
  File "/usr/lib/python3/dist-packages/MySQLdb/connections.py", line 52, in defaulterrorhandler
    raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not enough arguments for format string

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./bin/weewxd", line 261, in <module>
    main()
  File "./bin/weewxd", line 148, in main
    engine = weewx.engine.StdEngine(config_dict)
  File "/home/weewx/bin/weewx/engine.py", line 93, in __init__
    self.loadServices(config_dict)
  File "/home/weewx/bin/weewx/engine.py", line 161, in loadServices
    obj = weeutil.weeutil.get_object(svc)(self, config_dict)
  File "/home/weewx/bin/weewx/wxservices.py", line 38, in __init__
    self.db_manager = engine.db_binder.get_manager(data_binding=data_binding, initialize=True)
  File "/home/weewx/bin/weewx/manager.py", line 534, in get_manager
    self.manager_cache[data_binding] = open_manager(manager_dict, initialize)
  File "/home/weewx/bin/weewx/manager.py", line 684, in open_manager
    manager_dict['schema'])
  File "/home/weewx/bin/weewx/manager.py", line 164, in open_with_create
    dbmanager = cls(connection, table_name=table_name, schema=schema)
  File "/home/weewx/bin/weewx/manager.py", line 831, in __init__
    self.patch_sums()
  File "/home/weewx/bin/weewx/manager.py", line 1341, in patch_sums
    self.recalculate_weights(start_d=datetime.date(2020,6,1))
  File "/home/weewx/bin/weewx/manager.py", line 1178, in recalculate_weights
    self._do_tranche(mark_date, end_of_tranche, progress_fn)
  File "/home/weewx/bin/weewx/manager.py", line 1202, in _do_tranche
    self._do_scratch_reweight(timespan)
  File "/home/weewx/bin/weewx/manager.py", line 1242, in _do_scratch_reweight
    self._do_scratch_single(timespan, obs_type, cursor)
  File "/home/weewx/bin/weewx/manager.py", line 1296, in _do_scratch_single
    cursor.execute(update_sql, (start_ts, stop_ts))
  File "/home/weewx/bin/weedb/mysql.py", line 61, in guarded_fn
    raise klass(e)
weedb.DatabaseError: not enough arguments for format string


Tom Keffer

unread,
Dec 15, 2020, 10:03:18 AM12/15/20
to t...@tom.org, weewx-development
Thanks, Tom! You've uncovered a bug that was not exercised by the test suites. I'll get something out later today.

--
You received this message because you are subscribed to the Google Groups "weewx-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-developm...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-development/ea415725-f7f7-4be5-b36c-5274bff744dan%40googlegroups.com.

Tom Mitchell

unread,
Dec 15, 2020, 10:14:46 AM12/15/20
to Tom Keffer, weewx-development
Great, thanks! Standing by to test it in my environment.

--
Tom Mitchell
t...@tom.org
Real Time Beverly, MA Weather
http://weather.tom.org

"The whole problem with the world
  is that fools and fanatics are
  always so certain of themselves,
  and wiser people so full of doubts."
  - Bertrand Russell

Tom Keffer

unread,
Dec 15, 2020, 2:22:07 PM12/15/20
to Tom Mitchell, weewx-development
Tom, can you replace your copy of /home/weewx/bin/weewx/manager.py with the attached?

Thanks,

-tk
manager.py

Tom Keffer

unread,
Dec 18, 2020, 12:07:58 PM12/18/20
to weewx-development
Beta 2 is available. It fixes the MySQL problem that Tom M. experienced.

Vince Skahan

unread,
Dec 18, 2020, 9:45:29 PM12/18/20
to weewx-development
Tom - do you need this one checked on the usual os suspects (centos/debian/ubuntu of both systemd+init.d variants) or is it safe to assume that you guys have already run the usual checks for os variances ?

Tom Keffer

unread,
Dec 19, 2020, 9:20:27 AM12/19/20
to Vince Skahan, weewx-development
Things are mostly under control, but what is undertested is MySQL. I've tested pretty thoroughly under Debian, but only sporadically under CentOS, and not at all under suse.

-tk

On Fri, Dec 18, 2020 at 6:45 PM Vince Skahan <vince...@gmail.com> wrote:
Tom - do you need this one checked on the usual os suspects (centos/debian/ubuntu of both systemd+init.d variants) or is it safe to assume that you guys have already run the usual checks for os variances ?

--
You received this message because you are subscribed to the Google Groups "weewx-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-developm...@googlegroups.com.

Andy

unread,
Dec 22, 2020, 3:23:33 PM12/22/20
to weewx-development
Changed how various undocumented parameters in [StdWXCalculate] are specified.
The only one people are likely to have used is 'ignore_zero_wind'. Its name has
changed to 'force_null', and it has been moved. See the Upgrading Guide.

Where is the beta Upgrading Guide?

Andy Little

unread,
Dec 22, 2020, 3:58:17 PM12/22/20
to weewx-development
I found the guide in the dev branch of the weewx repo.

Andy


You received this message because you are subscribed to a topic in the Google Groups "weewx-development" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/weewx-development/8UbCU0aODJc/unsubscribe.
To unsubscribe from this group and all its topics, send an email to weewx-developm...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-development/bcef8fa2-4dd5-4ef4-90e6-56792e9b9f8bn%40googlegroups.com.

Andy

unread,
Dec 23, 2020, 9:58:31 AM12/23/20
to weewx-development
moved to mariadb today.

<pre class="prettyprint">
75002 records transferred from source database 'kcameadow21.sdb' to destination database 'weewx' in 262.91 seconds.
</pre>

Tom Keffer

unread,
Dec 26, 2020, 5:10:41 PM12/26/20
to Andy, weewx-development
Version 4.3.0b3 is now available. This is likely to be the last beta before general release.

Vince Skahan

unread,
Dec 27, 2020, 5:13:02 PM12/27/20
to weewx-development
Tom - did that extension installer update to write out all the comments from install.py into weewx.conf make it in ?

I'm testing by installing/uninstalling https://github.com/tkeffer/weewx-nmea-xdr.git as the extension to use. wee_extension seems to be stripping all the comments in xdr_config out when wee_extension installs the extension.  The idea of course was to include the comments when adding the stuff to weewx.conf.

Vince Skahan

unread,
Dec 27, 2020, 7:23:18 PM12/27/20
to weewx-development
Tom - more data for you.  I did clean setup.py installs of 4.2.0 and 4.3.0b3 and then used wee_extension to install the weewx-nmea-xdr installation.  The resulting stanza added to weewx is different.  The beta strips all comments.  The 4.2.0 behavior is far better even if it did miss comments at the root level as you mentioned later in the thread in weewx-users (link)

(beta 3)
======
# Options for extension 'xdr'
[XDR]
    port = /dev/ttyACM0
    baudrate = 9600
    timeout = 5
    max_packets = 5
    [[sensor_map]]
        pressure = P
        outTemp = C

(4.2.0)
=====
# Options for extension 'xdr'
[XDR]
    # The port where the NMEA source is located. Default is '/dev/ttyACM0'
    port = /dev/ttyACM0
    # Its baudrate. Default is '9600'.
    baudrate = 9600
    # How long to wait for an XDR packet before giving up. Default is 5 seconds.
    timeout = 5
    # Max number of NMEA packets to process during a LOOP event. Default is 5 packets
    max_packets = 5

    # Map from weewx names to sensor names. Only these types will be processed.
    # Typical sensor map:
    [[sensor_map]]
        pressure = P
        outTemp = C


Tom Keffer

unread,
Dec 27, 2020, 7:25:43 PM12/27/20
to Vince Skahan, weewx-development
Yes, it should be in V4.3.

Tom Keffer

unread,
Dec 27, 2020, 7:26:48 PM12/27/20
to Vince Skahan, weewx-development
Just saw your second message. OK, I'll take a look at it.

-tk

Tom Keffer

unread,
Dec 28, 2020, 11:08:15 AM12/28/20
to Vince Skahan, weewx-development
Phew, that turned out to be a lot more complicated than I thought. ConfigObj holds any "initial" comments in a different spot.

In any case, fixed in commit 2cc2d56.

Andy

unread,
Dec 28, 2020, 11:27:26 AM12/28/20
to weewx-development
upgraded from beta 2 to 3

Dec 28 08:17:18 raspberrypi3-2 weewx[27189] INFO __main__: Initializing weewx version 4.3.0b3
Dec 28 08:17:18 raspberrypi3-2 weewx[27189] INFO __main__: Using Python 3.7.3 (default, Jul 25 2020, 13:03:44) #012[GCC 8.3.0]
Dec 28 08:17:18 raspberrypi3-2 weewx[27189] INFO __main__: Platform Linux-5.10.1-v7+-armv7l-with-debian-10.7
Dec 28 08:17:18 raspberrypi3-2 weewx[27189] INFO __main__: Locale is 'en_US.UTF-8'
Dec 28 08:17:18 raspberrypi3-2 weewx[27189] INFO __main__: PID file is /var/run/weewx.pid
Dec 28 08:17:18 raspberrypi3-2 weewx[27195] INFO __main__: Using configuration file /home/weewx/weewx.conf
Dec 28 08:17:18 raspberrypi3-2 weewx[27195] INFO __main__: Debug is 0
Dec 28 08:17:18 raspberrypi3-2 weewx[27195] INFO weewx.engine: Loading station type SDR (user.sdr)

Vince Skahan

unread,
Dec 28, 2020, 2:53:59 PM12/28/20
to weewx-development
Thanks Tom...

Tests fine here with the two updated files dropped into place manually.  I also added a comment above [XDR] in my copy of install.py from weewx-nmea-xdr and it looks perfect after installing with wee_extension.  All the comments and content made it in ok.  Uninstalling cleanly works fine too.

[...unexpected feature alert...]

I just noticed that you can use wee_extension to set/unset global key=values by installing/uninstalling a pseudo extension.

Example - save the code below as foo/install.py then install with 'wee_extension --install foo' and you'll see it changed debug=0 to debug=1 and there is a 'enable-debug' extension now installed.

I did note that uninstall indeed uninstalls, so if anything you tweak that is a mandatory variable in weewx.conf that will cause the restart to fail, so I dunno if that's a big downside of this approach, but it does get me thinking about wee_extension as maybe a way for componetizing doing frequently needed things rather than expecting folks to edit weewx.conf when they aren't Linux editor fluent.

Something like:
 - user has issues
- ask them to run 'sudo wee_extension --install /usr/share/weewx/extensions/enable-debug' then 'sudo sysctl restart weewx' and get us the logs
- then tell them to run 'sudo wee_extension --uninstall enable-debug' to reverse things (assuming lack of a debug= line doesn't blow up weewx of course)

Example below just sets debug=1

#
# example install.py for setting a global variable
# based on the weewx-nmea-xdr example install.py
#

"""Installer for the demo extension"""
try:
    # Python 2
    from StringIO import StringIO
except ImportError:
    # Python 3
    from io import StringIO

import configobj
from weecfg.extension import ExtensionInstaller

extension_config = """
# enable weewx debugging
debug=1
"""
extension_dict = configobj.ConfigObj(StringIO(extension_config))

def loader():
    return EnableDebugInstaller()

class EnableDebugInstaller(ExtensionInstaller):
    def __init__(self):
        super(EnableDebugInstaller, self).__init__(
            version="0.01",
            name='enable-debug',
            description='enable debug in weewx.conf.',
            author="your name here",
            author_email="your_...@example.com",
            config=extension_dict,
            files=[]
            )



gjr80

unread,
Dec 29, 2020, 11:20:26 PM12/29/20
to weewx-development
Have to say I am impressed. First time upgrading a weewx-multi install with wee_config --upgrade and it worked just fine, on both WeeWX instances. Noticed the re-weighting from v2 to v3 when I upgraded the simple (ecowitt) install, so was preparing myself to manually re-weight a couple of databases in the more complex (vantage) install but all three databases in the vantage install were re-weighted in turn during startup. All databases were MariaDB. Upgraded the solar PV system as well, just a single instance with SQLite, again all was well.

Not really an accurate comparison but the re-weighting of two MariaDB databases with 8 years of vantage data felt about the same (5 odd minutes) as the re-weighting of about 6 months of ecowitt data in another MariaDB and the re-weighting of about four years of SQLite solar PV data seemed noticeably faster at just under one minute.

Gary

Tom Keffer

unread,
Dec 30, 2020, 8:09:01 AM12/30/20
to gjr80, weewx-development
Gary, those times that you quoted. Are they from using wee_database --reweight?

How long did the startup reweightings take? It only does from 1-Jun-2020, so should go very fast.

gjr80

unread,
Dec 30, 2020, 6:19:12 PM12/30/20
to weewx-development
Tom, all times were WeeWX re-weighting during start, none were from wee_database (after seeing WeeWX start re-weighting the weewx database I thought I woudl have to manually do my other databases so had typed the wee_database command all ready to go but never needed it as the other databases were re-weighted automatically during startup). Also, hadn't realised that only records since 1 June 2020 were being re-weighted, had assumed it was all. In that case all of my databases would have been the same, they all have records from 1 June 2020 onwards.

FWIW here are some log extracts showing times. To be fair the cmon and weewxwd databases have only a handful of columns so hence the quick patch times. aurora db has more columns than cmon/weewxwd but not as many as ecowitt and weewx which both use the extended schema:

ecowitt instance single MySQL db (217 seconds):

Dec 30 13:46:15 cockatoo weewx-ecowitt[9395] INFO weewx.engine: StdConvert target unit is 0x10
Dec 30 13:46:15 cockatoo weewx-ecowitt[9395] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 30 13:46:15 cockatoo weewx-ecowitt[9395] INFO weewx.manager: recalculate_weights: Using database 'ecowitt'
Dec 30 13:49:52 cockatoo weewx-ecowitt[9395] INFO weewx.manager: Patch finished.
Dec 30 13:49:52 cockatoo weewx-ecowitt[9395] INFO weewx.engine: Archive will use data binding wx_binding

vantage instance multiple MySQL db (220/21/21 seconds):

Dec 30 13:56:26 cockatoo weewx-vantage[9648] INFO weewx.engine: StdConvert target unit is 0x10
Dec 30 13:56:26 cockatoo weewx-vantage[9648] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 30 13:56:26 cockatoo weewx-vantage[9648] INFO weewx.manager: recalculate_weights: Using database 'weewx'
Dec 30 14:00:06 cockatoo weewx-vantage[9648] INFO weewx.manager: Patch finished.
Dec 30 14:00:06 cockatoo weewx-vantage[9648] INFO user.cmon: service version is 0.20
Dec 30 14:00:06 cockatoo weewx-vantage[9648] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 30 14:00:06 cockatoo weewx-vantage[9648] INFO weewx.manager: recalculate_weights: Using database 'cmon'
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.manager: Patch finished.
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: sysinfo: Linux cockatoo 5.4.72-v7+ #1356 SMP Thu Oct 22 13:56:54 BST 2020 armv7l
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: processor: 3
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: model name: ARMv7 Processor rev 4 (v7l)
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: BogoMIPS: 57.60
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: Features: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: CPU implementer: 0x41
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: CPU architecture: 7
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: CPU variant: 0x0
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: CPU part: 0xd03
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: CPU revision: 4
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: Hardware: BCM2835
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: Revision: a22082
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: Serial: 000000001d027eb8
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.cmon: cpuinfo: Model: Raspberry Pi 3 Model B Rev 1.2
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.engine: Archive will use data binding wx_binding
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.engine: Record generation will be attempted in 'hardware'
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.engine: Using archive interval of 300 seconds (specified by hardware)
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO user.wd: WdArchive will use data binding wd_binding
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 30 14:00:27 cockatoo weewx-vantage[9648] INFO weewx.manager: recalculate_weights: Using database 'weewxwd'
Dec 30 14:00:48 cockatoo weewx-vantage[9648] INFO weewx.manager: Patch finished.
Dec 30 14:00:48 cockatoo weewx-vantage[9648] INFO user.wd: Using binding 'wd_binding' to database 'weewxwd'

solar PV SQLite db(49 seconds):

Dec 30 14:10:52 aurora weewx[3649] INFO weewx.engine: StdConvert target unit is 0x1
Dec 30 14:10:52 aurora weewx[3649] INFO weewx.manager: Daily summaries at V2.0. Patching to V3.0
Dec 30 14:10:52 aurora weewx[3649] INFO weewx.manager: recalculate_weights: Using database 'aurora.sdb'
Dec 30 14:11:41 aurora weewx[3649] INFO weewx.manager: Patch finished.
Dec 30 14:11:41 aurora weewx[3649] INFO weewx.engine: Archive will use data binding aurora_binding

I guess when you look at it all it doesn't mean much in terms of time taken, I was impressed that the patching was automatically applied to multiple databases.

Gary


Vince Skahan

unread,
Dec 30, 2020, 6:40:12 PM12/30/20
to weewx-development
On Wednesday, December 30, 2020 at 5:09:01 AM UTC-8 Tom Keffer wrote:
How long did the startup reweightings take? It only does from 1-Jun-2020, so should go very fast.

Just curious, but why is it only reweighting just the last 7 months of data ?

Tom Keffer

unread,
Dec 30, 2020, 7:00:50 PM12/30/20
to Vince Skahan, weewx-development
Gary: those MySQL patch times are longer than I had hoped. On my (SQLite) Fit-PC it took only 4 of 5 seconds

Vince: Because the problem was introduced by a V4.2 bug. So, we need only patch from when V4.2 was introduced (26-Oct), plus a safety to cover any archive loggers. An extra five months is probably overly conservative. Maybe I should pair that back to two.

-tk


--
You received this message because you are subscribed to the Google Groups "weewx-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to weewx-developm...@googlegroups.com.

Vince Skahan

unread,
Dec 30, 2020, 7:38:03 PM12/30/20
to weewx-development
Thanks for the explanation.   I copied my sqlite3 db over to a vagrant VM running on a i3 NUC with 8GB and it took 11 seconds to update on a weewx restart, FWIW.  That's pretty snappy.

gjr80

unread,
Dec 31, 2020, 6:25:07 AM12/31/20
to weewx-development
I guess your Fit-PC has a bit more oomph than my Rpi3B. You probably could drop the five months to something smaller, but you know as soon as you do there will be someone out there who clean installed 4.2.0 with more days in the logger than you choose to patch. I guess no matter what some folks will miss out somewhere either with incorrectly weighted summaries or missing an archive record or two while their summaries are patched.

Gary

Joel Bion

unread,
Dec 31, 2020, 6:28:08 AM12/31/20
to gjr80, weewx-development
Is there a way to keep to the 5 months, but detect and recover from any archive records being missed?

-Joel

On Dec 31, 2020, at 3:25 AM, gjr80 <gjrod...@gmail.com> wrote:

I guess your Fit-PC has a bit more oomph than my Rpi3B. You probably could drop the five months to something smaller, but you know as soon as you do there will be someone out there who clean installed 4.2.0 with more days in the logger than you choose to patch. I guess no matter what some folks will miss out somewhere either with incorrectly weighted summaries or missing an archive record or two while their summaries are patched.

Tom Keffer

unread,
Dec 31, 2020, 7:45:55 AM12/31/20
to Joel Bion, gjr80, weewx-development
That's what the logger is for. It will store any records, which WeeWX will retrieve during the startup phase.

Jerry Keefe

unread,
Jan 2, 2021, 6:23:02 PM1/2/21
to weewx-development
I tried installing 4.3.0b3 on macOS last Catalina build 10.15.7 by setup.py method with an updated Python (courtesy of brew) 3.9.1. Almost all went well except an error about configobj at the end

sudo python3 ./setup.py install
Password:
running install
running build
running build_py
running build_scripts
running install_lib
copying build/lib/weedb/__init__.py -> /Users/rycweather/weewx/bin/weedb
copying build/lib/weedb/sqlite.py -> /Users/rycweather/weewx/bin/weedb
copying build/lib/weedb/mysql.py -> /Users/rycweather/weewx/bin/weedb
copying build/lib/weeimport/weathercatimport.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/weeimport.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/__init__.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/wdimport.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/wuimport.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/csvimport.py -> /Users/rycweather/weewx/bin/weeimport
copying build/lib/weeimport/cumulusimport.py -> /Users/rycweather/weewx/bin/weeimport
creating /Users/rycweather/weewx/bin/user
copying build/lib/user/__init__.py -> /Users/rycweather/weewx/bin/user
copying build/lib/user/extensions.py -> /Users/rycweather/weewx/bin/user
copying build/lib/schemas/wview.py -> /Users/rycweather/weewx/bin/schemas
copying build/lib/schemas/__init__.py -> /Users/rycweather/weewx/bin/schemas
copying build/lib/schemas/wview_small.py -> /Users/rycweather/weewx/bin/schemas
copying build/lib/schemas/wview_extended.py -> /Users/rycweather/weewx/bin/schemas
copying build/lib/six.py -> /Users/rycweather/weewx/bin
copying build/lib/weeplot/__init__.py -> /Users/rycweather/weewx/bin/weeplot
copying build/lib/weeplot/genplot.py -> /Users/rycweather/weewx/bin/weeplot
copying build/lib/weeplot/utilities.py -> /Users/rycweather/weewx/bin/weeplot
copying build/lib/weewx/accum.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/tags.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/wxmanager.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/drivers/acurite.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/ws1.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/te923.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/ws23xx.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/ws28xx.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/__init__.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/wmr300.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/wmr9x8.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/fousb.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/wmr100.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/simulator.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/ultimeter.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/vantage.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/drivers/cc3000.py -> /Users/rycweather/weewx/bin/weewx/drivers
copying build/lib/weewx/units.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/uwxutils.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/qc.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/reportengine.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/wxformulas.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/crc16.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/wxservices.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/__init__.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/filegenerator.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/cheetahgenerator.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/xtypes.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/wxengine.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/station.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/wxxtypes.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/engine.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/defaults.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/almanac.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/manager.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/imagegenerator.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/weewx/restx.py -> /Users/rycweather/weewx/bin/weewx
copying build/lib/daemon.py -> /Users/rycweather/weewx/bin
copying build/lib/weeutil/config.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/Moon.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/Sun.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/log.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/__init__.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/logger.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/ftpupload.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/rsyncupload.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/timediff.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weeutil/weeutil.py -> /Users/rycweather/weewx/bin/weeutil
copying build/lib/weecfg/config.py -> /Users/rycweather/weewx/bin/weecfg
copying build/lib/weecfg/database.py -> /Users/rycweather/weewx/bin/weecfg
copying build/lib/weecfg/__init__.py -> /Users/rycweather/weewx/bin/weecfg
copying build/lib/weecfg/extension.py -> /Users/rycweather/weewx/bin/weecfg
byte-compiling /Users/rycweather/weewx/bin/weedb/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weedb/sqlite.py to sqlite.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weedb/mysql.py to mysql.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/weathercatimport.py to weathercatimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/weeimport.py to weeimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/wdimport.py to wdimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/wuimport.py to wuimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/csvimport.py to csvimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeimport/cumulusimport.py to cumulusimport.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/user/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/user/extensions.py to extensions.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/schemas/wview.py to wview.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/schemas/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/schemas/wview_small.py to wview_small.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/schemas/wview_extended.py to wview_extended.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/six.py to six.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeplot/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeplot/genplot.py to genplot.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeplot/utilities.py to utilities.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/accum.py to accum.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/tags.py to tags.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/wxmanager.py to wxmanager.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/acurite.py to acurite.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/ws1.py to ws1.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/te923.py to te923.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/ws23xx.py to ws23xx.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/ws28xx.py to ws28xx.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/wmr300.py to wmr300.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/wmr9x8.py to wmr9x8.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/fousb.py to fousb.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/wmr100.py to wmr100.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/simulator.py to simulator.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/ultimeter.py to ultimeter.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/vantage.py to vantage.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/drivers/cc3000.py to cc3000.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/units.py to units.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/uwxutils.py to uwxutils.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/qc.py to qc.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/reportengine.py to reportengine.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/wxformulas.py to wxformulas.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/crc16.py to crc16.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/wxservices.py to wxservices.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/filegenerator.py to filegenerator.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/cheetahgenerator.py to cheetahgenerator.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/xtypes.py to xtypes.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/wxengine.py to wxengine.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/station.py to station.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/wxxtypes.py to wxxtypes.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/engine.py to engine.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/defaults.py to defaults.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/almanac.py to almanac.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/manager.py to manager.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/imagegenerator.py to imagegenerator.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weewx/restx.py to restx.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/daemon.py to daemon.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/config.py to config.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/Moon.py to Moon.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/Sun.py to Sun.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/log.py to log.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/logger.py to logger.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/ftpupload.py to ftpupload.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/rsyncupload.py to rsyncupload.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/timediff.py to timediff.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weeutil/weeutil.py to weeutil.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weecfg/config.py to config.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weecfg/database.py to database.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weecfg/__init__.py to __init__.cpython-39.pyc
byte-compiling /Users/rycweather/weewx/bin/weecfg/extension.py to extension.cpython-39.pyc
running install_scripts
copying build/scripts-3.9/wee_debug -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_database -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_extension -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_reports -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_config -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/weewxd -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_import -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wee_device -> /Users/rycweather/weewx/bin
copying build/scripts-3.9/wunderfixer -> /Users/rycweather/weewx/bin
changing mode of /Users/rycweather/weewx/bin/wee_debug to 755
changing mode of /Users/rycweather/weewx/bin/wee_database to 755
changing mode of /Users/rycweather/weewx/bin/wee_extension to 755
changing mode of /Users/rycweather/weewx/bin/wee_reports to 755
changing mode of /Users/rycweather/weewx/bin/wee_config to 755
changing mode of /Users/rycweather/weewx/bin/weewxd to 755
changing mode of /Users/rycweather/weewx/bin/wee_import to 755
changing mode of /Users/rycweather/weewx/bin/wee_device to 755
changing mode of /Users/rycweather/weewx/bin/wunderfixer to 755
running install_data
copying LICENSE.txt -> /Users/rycweather/weewx/
copying README.md -> /Users/rycweather/weewx/
massaging weewx.conf -> /Users/rycweather/weewx/weewx.conf.4.3.0b3
copying /tmp/tmpqskc4tbe -> /Users/rycweather/weewx/weewx.conf.4.3.0b3
copying docs/copyright.htm -> /Users/rycweather/weewx/docs
copying docs/devnotes.htm -> /Users/rycweather/weewx/docs
copying docs/readme.htm -> /Users/rycweather/weewx/docs
copying docs/upgrading.htm -> /Users/rycweather/weewx/docs
copying docs/changes.txt -> /Users/rycweather/weewx/docs
copying docs/suse.htm -> /Users/rycweather/weewx/docs
copying docs/logging.md -> /Users/rycweather/weewx/docs
copying docs/accum.md -> /Users/rycweather/weewx/docs
copying docs/redhat.htm -> /Users/rycweather/weewx/docs
copying docs/usersguide.htm -> /Users/rycweather/weewx/docs
copying docs/hardware.htm -> /Users/rycweather/weewx/docs
copying docs/setup.htm -> /Users/rycweather/weewx/docs
copying docs/utilities.htm -> /Users/rycweather/weewx/docs
copying docs/macos.htm -> /Users/rycweather/weewx/docs
copying docs/xtypes.md -> /Users/rycweather/weewx/docs
copying docs/debian.htm -> /Users/rycweather/weewx/docs
copying docs/customizing.htm -> /Users/rycweather/weewx/docs
copying docs/css/tocbot-4.12.0.css -> /Users/rycweather/weewx/docs/css
copying docs/css/tocbot-4.3.1.css -> /Users/rycweather/weewx/docs/css
copying docs/css/weewx_ui.css -> /Users/rycweather/weewx/docs/css
copying docs/images/logo-ubuntu.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-centos.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-linux.png -> /Users/rycweather/weewx/docs/images
copying docs/images/funky_degree.png -> /Users/rycweather/weewx/docs/images
copying docs/images/daycompare.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-redhat.png -> /Users/rycweather/weewx/docs/images
copying docs/images/day-gap-showing.png -> /Users/rycweather/weewx/docs/images
copying docs/images/sample_monthrain.png -> /Users/rycweather/weewx/docs/images
copying docs/images/dayvaporp.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-fedora.png -> /Users/rycweather/weewx/docs/images
copying docs/images/image_parts.xcf -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-debian.png -> /Users/rycweather/weewx/docs/images
copying docs/images/weektempdew.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-mint.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-rpi.png -> /Users/rycweather/weewx/docs/images
copying docs/images/day-gap-not-shown.png -> /Users/rycweather/weewx/docs/images
copying docs/images/daywindvec.png -> /Users/rycweather/weewx/docs/images
copying docs/images/favicon.png -> /Users/rycweather/weewx/docs/images
copying docs/images/weekgustoverlay.png -> /Users/rycweather/weewx/docs/images
copying docs/images/pipeline.png -> /Users/rycweather/weewx/docs/images
copying docs/images/image_parts.png -> /Users/rycweather/weewx/docs/images
copying docs/images/ferrites.jpg -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-weewx.png -> /Users/rycweather/weewx/docs/images
copying docs/images/yearhilow.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-suse.png -> /Users/rycweather/weewx/docs/images
copying docs/images/sample_monthtempdew.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-opensuse.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-apple.png -> /Users/rycweather/weewx/docs/images
copying docs/images/logo-pypi.svg -> /Users/rycweather/weewx/docs/images
copying docs/images/daytemp_with_avg.png -> /Users/rycweather/weewx/docs/images
copying docs/images/antialias.gif -> /Users/rycweather/weewx/docs/images
copying docs/js/cash.js -> /Users/rycweather/weewx/docs/js
copying docs/js/cash.min.js -> /Users/rycweather/weewx/docs/js
copying docs/js/tocbot-4.3.1.min.js -> /Users/rycweather/weewx/docs/js
copying docs/js/tocbot-4.12.0.min.js -> /Users/rycweather/weewx/docs/js
copying docs/js/tocbot-4.3.1.js -> /Users/rycweather/weewx/docs/js
copying docs/js/weewx.js -> /Users/rycweather/weewx/docs/js
copying docs/js/tocbot-4.12.0.js -> /Users/rycweather/weewx/docs/js
copying docs/examples/tag.htm -> /Users/rycweather/weewx/docs/examples
copying examples/vaporpressure.py -> /Users/rycweather/weewx/examples
copying examples/lowBattery.py -> /Users/rycweather/weewx/examples
copying examples/alarm.py -> /Users/rycweather/weewx/examples
copying examples/mem.py -> /Users/rycweather/weewx/examples
copying examples/stats.py -> /Users/rycweather/weewx/examples
copying examples/transfer_db.py -> /Users/rycweather/weewx/examples
copying examples/xstats/changelog -> /Users/rycweather/weewx/examples/xstats
copying examples/xstats/readme.txt -> /Users/rycweather/weewx/examples/xstats
copying examples/xstats/install.py -> /Users/rycweather/weewx/examples/xstats
copying examples/xstats/bin/user/xstats.py -> /Users/rycweather/weewx/examples/xstats/bin/user
copying examples/xstats/skins/xstats/skin.conf -> /Users/rycweather/weewx/examples/xstats/skins/xstats
copying examples/xstats/skins/xstats/index.html.tmpl -> /Users/rycweather/weewx/examples/xstats/skins/xstats
creating /Users/rycweather/weewx/examples/tests
copying examples/tests/test_vaporpressure.py -> /Users/rycweather/weewx/examples/tests
copying examples/basic/changelog -> /Users/rycweather/weewx/examples/basic
copying examples/basic/readme.txt -> /Users/rycweather/weewx/examples/basic
copying examples/basic/install.py -> /Users/rycweather/weewx/examples/basic
copying examples/basic/skins/basic/skin.conf -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/basic/skins/basic/favicon.ico -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/basic/skins/basic/index.html.tmpl -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/basic/skins/basic/current.inc -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/basic/skins/basic/basic.css -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/basic/skins/basic/hilo.inc -> /Users/rycweather/weewx/examples/basic/skins/basic
copying examples/pmon/changelog -> /Users/rycweather/weewx/examples/pmon
copying examples/pmon/readme.txt -> /Users/rycweather/weewx/examples/pmon
copying examples/pmon/install.py -> /Users/rycweather/weewx/examples/pmon
copying examples/pmon/bin/user/pmon.py -> /Users/rycweather/weewx/examples/pmon/bin/user
copying examples/pmon/skins/pmon/skin.conf -> /Users/rycweather/weewx/examples/pmon/skins/pmon
copying examples/pmon/skins/pmon/index.html.tmpl -> /Users/rycweather/weewx/examples/pmon/skins/pmon
copying examples/fileparse/changelog -> /Users/rycweather/weewx/examples/fileparse
copying examples/fileparse/readme.txt -> /Users/rycweather/weewx/examples/fileparse
copying examples/fileparse/install.py -> /Users/rycweather/weewx/examples/fileparse
copying examples/fileparse/bin/user/fileparse.py -> /Users/rycweather/weewx/examples/fileparse/bin/user
copying util/udev/rules.d/fousb.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/cc3000.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/ws28xx.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/te923.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/weewx.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/acurite.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/wmr100.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/vantage.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/wmr200.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/udev/rules.d/wmr300.rules -> /Users/rycweather/weewx/util/udev/rules.d
copying util/logwatch/scripts/services/weewx -> /Users/rycweather/weewx/util/logwatch/scripts/services
copying util/logwatch/conf/logfiles/weewx.conf -> /Users/rycweather/weewx/util/logwatch/conf/logfiles
copying util/logwatch/conf/services/weewx.conf -> /Users/rycweather/weewx/util/logwatch/conf/services
copying util/init.d/weewx.redhat -> /Users/rycweather/weewx/util/init.d
copying util/init.d/weewx-multi -> /Users/rycweather/weewx/util/init.d
copying util/init.d/weewx.debian -> /Users/rycweather/weewx/util/init.d
copying util/init.d/weewx.lsb -> /Users/rycweather/weewx/util/init.d
copying util/init.d/weewx.bsd -> /Users/rycweather/weewx/util/init.d
copying util/init.d/weewx.suse -> /Users/rycweather/weewx/util/init.d
copying util/systemd/weewx.service -> /Users/rycweather/weewx/util/systemd
copying util/default/weewx -> /Users/rycweather/weewx/util/default
copying util/newsyslog.d/weewx.conf -> /Users/rycweather/weewx/util/newsyslog.d
copying util/scripts/wee_debug -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_database -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_extension -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_reports -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_config -> /Users/rycweather/weewx/util/scripts
copying util/scripts/weewxd -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_import -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wee_device -> /Users/rycweather/weewx/util/scripts
copying util/scripts/wunderfixer -> /Users/rycweather/weewx/util/scripts
copying util/launchd/com.weewx.weewxd.plist -> /Users/rycweather/weewx/util/launchd
copying util/rsyslog.d/weewx.conf -> /Users/rycweather/weewx/util/rsyslog.d
copying util/solaris/weewx-smf.xml -> /Users/rycweather/weewx/util/solaris
copying util/import/wu-example.conf -> /Users/rycweather/weewx/util/import
copying util/import/cumulus-example.conf -> /Users/rycweather/weewx/util/import
copying util/import/csv-example.conf -> /Users/rycweather/weewx/util/import
copying util/import/weathercat-example.conf -> /Users/rycweather/weewx/util/import
copying util/import/wd-example.conf -> /Users/rycweather/weewx/util/import
copying util/logrotate.d/weewx -> /Users/rycweather/weewx/util/logrotate.d
copying util/apache/conf.d/weewx.conf -> /Users/rycweather/weewx/util/apache/conf.d
running install_egg_info
Writing /Users/rycweather/weewx/bin/weewx-4.3.0b3-py3.9.egg-info
Traceback (most recent call last):
  File "/Users/rycweather/weewx/bin/wee_config", line 12, in <module>
    from weecfg.config import ConfigEngine, Logger
  File "/Users/rycweather/weewx/bin/weecfg/__init__.py", line 22, in <module>
    import configobj
ModuleNotFoundError: No module named 'configobj'

Tom Keffer

unread,
Jan 2, 2021, 6:29:46 PM1/2/21
to Jerry Keefe, weewx-development
Did you install configobj?

Make sure you follow the install guide for MacOS.

Jerry Keefe

unread,
Jan 2, 2021, 6:43:31 PM1/2/21
to weewx-development
Looks like that was it.  I needed to run through the Python setup when going from python@3.8 to python@3.9
Install completed after configobj reinstall

Reply all
Reply to author
Forward
0 new messages