I mean this in the gentlest way, but this is basically what the SQLite database is doing for you: saving various values in a file where they can be retrieved via a general query statement.
On Fri, Jan 19, 2024 at 6:16 AM WindnFog <foc1...@gmail.com> wrote: > I encountered the same problem trying to calculate the all time humidex in > the index.html.tmpl template. This was taking about 3 minutes on a Pi 4. > Rather than add humidex to the database (probably the best solution), I > calculated all-time humidex once a day using a small program and invoking > it with cron. I saved it in a text file that I could then use the Cheetah > include statement to read it into index.the html.tmpl template. This runs > in 2 seconds on a Pi 4 and 1 second on a pi 5; if you have an algorithm for > appTemp, a similar approach might work. I was not comfortable with > modifying the database because that's not my area of expertise: > > #!/usr/bin/env python3 > # -*- coding: utf-8 -*- > > """ > Program: WeeWX Humidex calculator > Author: Paul M Dunphy > Date: 12 December 2023 > Version: 1.0.0 > Description: This script sweeps through the Weewx database and > calculates the > derived parameter humidex for each record. It then > returns the > maximum humidex and the date/time when it occured. This > takes > about 1.5 seconds on a 900,000 record database as opposed > to 3.5 > minutes by the WeeWX system if the recommended aggregate > values > are implemented in the Standard/index.html.tmpl file: > > $alltime.humidex.max ($alltime.humidex.max.degree_F) > $alltime.humidex.maxtime.format($ALLTIMEFMT) > > It's not clear why the weeWX system takes so long. > Possibly > because it's doing many other things at the same time. > > This runs on a Raspberry Pi 4B (4 GB Ram) using Debian 12 > """ > > # Required Libraries > > import sqlite3 > import math > from datetime import datetime > import pytz > from pytz import timezone > > > def calculate_humidex(temperature, dewpoint): > # Constants for the formula > k = 273.15 # Conversion factor for Celsius to Kelvin > > # Convert temperatures to Kelvin > temperature + k > dewpoint_k = dewpoint + k > > # Calculate vapor pressure in hPa > vapor_pressure = 6.112 * math.exp(5417.7530 * ((1 / 273.16) - (1 / > dewpoint_k))) > > # Humidex calculation > humidex = temperature + ((vapor_pressure - 10) * 0.5555) > return humidex > > > def get_max_humidex(database_path): > # Connect to the WeeWX database > conn = sqlite3.connect(database_path) > cursor = conn.cursor() > > # Query for temperature, dewpoint, and dateTime for all records > query = "SELECT outTemp, dewpoint, dateTime FROM archive" > cursor.execute(query) > > # Variables to track the maximum humidex and its date > maximum_humidex = None > maximum_humidex_date = None > > for row in cursor: > temperature, dewpoint, date_time = row > if temperature is not None and dewpoint is not None: > humidex = calculate_humidex(temperature, dewpoint) > if maximum_humidex is None or humidex > maximum_humidex: > maximum_humidex = humidex > maximum_humidex_date = date_time > > conn.close() > return maximum_humidex, maximum_humidex_date > > > def convert_utc_to_ast_adt(utc_datetime): > """ > Convert a UTC datetime to AST or ADT depending on the date. > > Parameters: > utc_datetime (datetime): UTC datetime object. > > Returns: > datetime: Datetime object in AST or ADT. > """ > # Define the time zone for AST/ADT > ast_tz = timezone('America/Halifax') > > # Localize the UTC datetime to the AST/ADT timezone > local_datetime = ast_tz.normalize(utc_datetime.astimezone(ast_tz)) > > return local_datetime > > > def format_date(unix_timestamp): > """ > Format a UNIX timestamp into a human-readable string in AST or ADT. > > Parameters: > unix_timestamp (int): UNIX timestamp. > > Returns: > str: Formatted date string. > """ > # Create a UTC datetime from the UNIX timestamp > utc_datetime = > datetime.utcfromtimestamp(unix_timestamp).replace(tzinfo=pytz.utc) > > # Convert UTC to AST or ADT > local_datetime = convert_utc_to_ast_adt(utc_datetime) > > # Format the local datetime > return local_datetime.strftime("%I:%M %p on %d %b %Y") > > > db_path = '/home/pdunphy/weewx-data/archive/weewx.sdb' > max_humidex, max_humidex_date = get_max_humidex(db_path) > > # Convert Humidex to Fahrenheit > max_humidex_f = max_humidex * 9 / 5 + 32 > > # Format and print the result > print(f"{max_humidex:.1f} C ({max_humidex_f:.1f} F) at > {format_date(max_humidex_date)}") > > # Format the result > output = f"{max_humidex:.1f} C ({max_humidex_f:.1f} F) at > {format_date(max_humidex_date)}" > > # Write the result to a file > output_file_path = > '/home/pdunphy/weewx-data/skins/Standard/Standard_all_time_humidex.txt' > with open(output_file_path, 'w') as file: > file.write(output) > > print(f"Output written to {output_file_path}") > > > > On Thursday, January 18, 2024 at 7:12:14 PM UTC-4 Tom Keffer wrote: > >> Using Blaine's database, I was able to isolate the performance problems. >> >> It's in the template records/index.html.tmpl >> >> Specifically, apparent temperature (appTemp). It does not appear in the >> database, so a simple tag such as $alltime.appTemp.max requires searching >> the engine database, calculating apparent temperature for each record, then >> finding the max value. >> >> In V4, this would not have even been attempted. >> >> The solution is to add appTemp to the database. >> >> On Thu, Jan 18, 2024 at 1:33 PM vince <vince...@gmail.com> wrote: >> >>> Tom - the NOAA stuff builds from this db ok for me v5 pip on pi3+. >>> The Seasons skin NOAA file for 2024-01 'is' being updated every archive >>> period. >>> The historical files dating back to 2014 generated fine. >>> >>> Unrelated but interesting..... >>> >>> - this db shows the Belchertown taking too long issue >>> - running htop I see it peg two cpus and StdReport aborts due to >>> time vs. the Simulator 300 sec on a pi3+ >>> - Belchertown 'always' takes longer than 300 secs and weewx always >>> aborts due to StdReport not completing in 300 secs >>> - yet the same installation with 'my' db works fine with no issues, >>> so it 'has' to be content of the db being used doesn't it ? >>> - I have been unable to get Belchertown to succeed even at 600 secs >>> archive period. >>> >>> Question - why would the db be 'locked' if a skin is reading it in order >>> to process its contents ?????? >>> >>> last restart/failure... >>> >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO __main__: Starting up weewx >>> version 5.0.0 >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO weewx.engine: Clock error is >>> -0.21 seconds (positive is fast) >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO weewx.engine: Using binding >>> 'wx_binding' to database 'weewx.sdb' >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO weewx.manager: Starting >>> backfill of daily summaries >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO weewx.manager: Daily >>> summaries up to date >>> Jan 18 13:15:10 pi3plus weewxd[1756]: INFO weewx.engine: Starting main >>> packet loop. >>> Jan 18 13:20:15 pi3plus weewxd[1756]: INFO weewx.manager: Added record >>> 2024-01-18 13:20:00 PST (1705612800) to database 'weewx.sdb' >>> Jan 18 13:20:15 pi3plus weewxd[1756]: INFO weewx.manager: Added record >>> 2024-01-18 13:20:00 PST (1705612800) to daily summary in 'weewx.sdb' >>> Jan 18 13:20:19 pi3plus weewxd[1756]: INFO weewx.cheetahgenerator: >>> Generated 8 files for report SeasonsReport in 3.96 seconds >>> Jan 18 13:20:24 pi3plus weewxd[1756]: INFO weewx.imagegenerator: >>> Generated 30 images for report SeasonsReport in 4.80 seconds >>> Jan 18 13:20:24 pi3plus weewxd[1756]: INFO weewx.reportengine: Copied 5 >>> files to /home/pi/weewx-data/public_html >>> Jan 18 13:20:24 pi3plus weewxd[1756]: INFO user.belchertown: version >>> 1.3.1 >>> Jan 18 13:30:15 pi3plus weewxd[1756]: INFO weewx.manager: Added record >>> 2024-01-18 13:30:00 PST (1705613400) to database 'weewx.sdb' >>> Jan 18 13:30:15 pi3plus weewxd[1756]: INFO weewx.manager: Added record >>> 2024-01-18 13:30:00 PST (1705613400) to daily summary in 'weewx.sdb' >>> Jan 18 13:30:20 pi3plus weewxd[1756]: INFO weewx.engine: Main loop >>> exiting. Shutting engine down. >>> Jan 18 13:30:20 pi3plus weewxd[1756]: INFO weewx.engine: Shutting down >>> StdReport thread >>> Jan 18 13:30:40 pi3plus weewxd[1756]: ERROR weewx.engine: Unable to shut >>> down StdReport thread >>> Jan 18 13:30:40 pi3plus weewxd[1756]: CRITICAL __main__: Database >>> OperationalError exception: database is locked >>> Jan 18 13:30:40 pi3plus weewxd[1756]: CRITICAL __main__: **** >>> Waiting 2 minutes then retrying... >>> Jan 18 13:30:42 pi3plus weewxd[1756]: INFO weewx.cheetahgenerator: >>> Generated 12 files for report Belchertown in 617.64 seconds >>> Jan 18 13:30:42 pi3plus weewxd[1756]: INFO weewx.reportengine: Copied 40 >>> files to /home/pi/weewx-data/public_html/belchertown >>> >>> >>> weewx related open files: >>> >>> pi@pi3plus:~/weewx-data $ lsof|grep weew >>> python3 1633 pi mem REG 179,2 >>> 217360 272588 >>> /home/pi/weewx-data/skins/Seasons/font/OpenSans-Regular.ttf >>> python3 1633 pi mem REG 179,2 >>> 224592 272587 /home/pi/weewx-data/skins/Seasons/font/OpenSans-Bold.ttf >>> python3 1633 pi mem REG 179,2 >>> 1630340 271670 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imaging.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 2528660 271317 /home/pi/weewx-venv/lib/python3.11/site-packages/ephem/_ >>> libastro.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 56296 271675 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingmath.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 93216 271673 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingft.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 45064 271812 /home/pi/weewx-venv/lib/python3.11/site-packages/Cheetah/_ >>> namemapper.cpython-311-arm-linux-gnueabihf.so >>> >>> When its cpus are pegged trying to process Belchertown: >>> >>> python3 1633 pi cwd DIR 179,2 >>> 4096 272808 /home/pi/weewx-data/skins/Belchertown >>> python3 1633 pi mem REG 179,2 >>> 217360 272588 >>> /home/pi/weewx-data/skins/Seasons/font/OpenSans-Regular.ttf >>> python3 1633 pi mem REG 179,2 >>> 224592 272587 /home/pi/weewx-data/skins/Seasons/font/OpenSans-Bold.ttf >>> python3 1633 pi mem REG 179,2 >>> 1630340 271670 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imaging.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 2528660 271317 /home/pi/weewx-venv/lib/python3.11/site-packages/ephem/_ >>> libastro.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 56296 271675 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingmath.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 93216 271673 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingft.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi mem REG 179,2 >>> 45064 271812 /home/pi/weewx-venv/lib/python3.11/site-packages/Cheetah/_ >>> namemapper.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 pi 4uw REG 179,2 >>> 163410944 41497 /home/pi/weewx-data/archive/weewx.sdb >>> python3 1633 pi 5uw REG 179,2 >>> 163410944 41497 /home/pi/weewx-data/archive/weewx.sdb >>> python3 1633 pi 6u REG 179,2 >>> 87200 275903 /home/pi/weewx-data/archive/weewx.sdb-journal >>> python3 1633 1853 python3 pi cwd DIR 179,2 >>> 4096 272808 /home/pi/weewx-data/skins/Belchertown >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 217360 272588 >>> /home/pi/weewx-data/skins/Seasons/font/OpenSans-Regular.ttf >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 224592 272587 /home/pi/weewx-data/skins/Seasons/font/OpenSans-Bold.ttf >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 1630340 271670 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imaging.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 2528660 271317 /home/pi/weewx-venv/lib/python3.11/site-packages/ephem/_ >>> libastro.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 56296 271675 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingmath.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 93216 271673 /home/pi/weewx-venv/lib/python3.11/site-packages/PIL/_ >>> imagingft.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 1853 python3 pi mem REG 179,2 >>> 45064 271812 /home/pi/weewx-venv/lib/python3.11/site-packages/Cheetah/_ >>> namemapper.cpython-311-arm-linux-gnueabihf.so >>> python3 1633 1853 python3 pi 4uw REG 179,2 >>> 163410944 41497 /home/pi/weewx-data/archive/weewx.sdb >>> python3 1633 1853 python3 pi 5uw REG 179,2 >>> 163410944 41497 /home/pi/weewx-data/archive/weewx.sdb >>> python3 1633 1853 python3 pi 6u REG 179,2 >>> 87200 275903 /home/pi/weewx-data/archive/weewx.sdb-journal >>> >>> >>> On Thursday, January 18, 2024 at 12:18:18 PM UTC-8 Blaine wrote: >>> >>>> Thank you for the reply! Yes, I have tried this many times. It >>>> continues to regenerate them with the missing data. >>>> >>>> On Wednesday, January 17, 2024 at 6:29:41 PM UTC-8 Tom Keffer wrote: >>>> >>>> Have you tried completely deleting all NOAA reports and letting weewx >>>> regenerate them? >>>> >>>> On Wed, Jan 17, 2024 at 9:32 AM Blaine <bgri...@gmail.com> wrote: >>>> >>>> Way back in 2020 my NOAA reports stopped populating their daily values. >>>> The average values for the month continue to be populated at the bottom of >>>> the table. Since 2020 every year or so I have spent hours banging my head >>>> against the wall following any and all instructions on the wiki, github, >>>> google and this user group to attempt to repair this issue. None of the >>>> published instructions seem to help. I have never been successful. >>>> >>>> If this is a problem that can be solved I would be more than happy to >>>> pay someone to help fix this issue knowing full well there are no >>>> guarantees recovery is possible. This data is important to me and having >>>> essentially lost years worth with no chance of recovery is a real bummer. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "weewx-user" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to weewx-user+...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/weewx-user/6be270a2-961f-4952-85b0-6074332671een%40googlegroups.com >>>> <https://groups.google.com/d/msgid/weewx-user/6be270a2-961f-4952-85b0-6074332671een%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "weewx-user" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to weewx-user+...@googlegroups.com. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/weewx-user/2bed5055-542d-4ef2-8e32-312e306af59cn%40googlegroups.com >>> <https://groups.google.com/d/msgid/weewx-user/2bed5055-542d-4ef2-8e32-312e306af59cn%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "weewx-user" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to weewx-user+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/weewx-user/44a584f4-b98d-4180-9aa8-4d0f5bdc67f0n%40googlegroups.com > <https://groups.google.com/d/msgid/weewx-user/44a584f4-b98d-4180-9aa8-4d0f5bdc67f0n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "weewx-user" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-user+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-user/CAPq0zECUbntXm5c%3D8NQWQvjGpS%2BUDq5Y_cKyDgxz8_z%2BbB9%2B7Q%40mail.gmail.com.