almanac related units, almanac locale

This commit is contained in:
roe-dl
2025-03-04 15:29:02 +01:00
parent 2d025b4251
commit 718876add0
4 changed files with 29 additions and 9 deletions

View File

@@ -79,7 +79,7 @@ class Almanac:
>>> almanac = Almanac(t, 46.0, -122.0, formatter=weewx.units.get_default_formatter())
Test backwards compatibility with attribute 'moon_fullness':
>>> print("Fullness of the moon (rounded) is %.2f%% [%s]" % (almanac._moon_fullness, almanac.moon_phase))
>>> print("Fullness of the moon (rounded) is %.2f%% [%s]" % (almanac.moon_fullness,almanac.moon_phase))
Fullness of the moon (rounded) is 3.00% [new (totally dark)]
Now get a more precise result for fullness of the moon:
@@ -207,7 +207,7 @@ class Almanac:
temperature=None,
pressure=None,
horizon=None,
moon_phases=weeutil.Moon.moon_phases,
texts=dict(),
formatter=None,
converter=None):
"""Initialize an instance of Almanac
@@ -225,7 +225,8 @@ class Almanac:
pressure (float|None): Observer's atmospheric pressure in **mBars**.
[Optional. Default is 1010]
horizon (float|None): Angle of the horizon in degrees [Optional. Default is zero]
moon_phases (list): An array of 8 strings with descriptions of the moon
texts (dict): a dictionary of language dependent texts, basicly an entry
'moon_phases' which holds an array of 8 strings with descriptions of the moon
phase. [optional. If not given, then weeutil.Moon.moon_phases will be used]
formatter (weewx.units.Formatter|None): An instance of weewx.units.Formatter
with the formatting information to be used.
@@ -239,7 +240,8 @@ class Almanac:
self.temperature = temperature if temperature is not None else 15.0
self.pressure = pressure if pressure is not None else 1010.0
self.horizon = horizon if horizon is not None else 0.0
self.moon_phases = moon_phases
self.texts = texts
self.moon_phases = texts.get('moon_phases',weeutil.Moon.moon_phases)
self.formatter = formatter or weewx.units.Formatter()
self.converter = converter or weewx.units.Converter()
# Check to see whether there is a module that provides more than

View File

@@ -542,7 +542,7 @@ class Almanac(SearchList):
if 'barometer' in rec:
pressure_mbar = weewx.units.convert(weewx.units.as_value_tuple(rec, 'barometer'), "mbar")[0]
self.moonphases = generator.skin_dict.get('Almanac', {}).get('moon_phases', weeutil.Moon.moon_phases)
self.texts = generator.skin_dict.get('Almanac', {})
altitude_vt = weewx.units.convert(generator.stn_info.altitude_vt, "meter")
@@ -552,7 +552,7 @@ class Almanac(SearchList):
altitude=altitude_vt[0],
temperature=temperature_C,
pressure=pressure_mbar,
moon_phases=self.moonphases,
texts=self.texts,
formatter=generator.formatter,
converter=generator.converter)

View File

@@ -76,6 +76,7 @@ log_failure = False
[[StringFormats]]
amp = %.1f
astronomical_unit = %.2f
bit = %.0f
boolean = %d
byte = %.0f
@@ -147,6 +148,7 @@ log_failure = False
[[Labels]]
amp = " A"
astronomical_unit = " AU"
bit = " b"
boolean = ""
byte = " B"

View File

@@ -268,6 +268,7 @@ USUnits = ListOfDicts({
"group_illuminance" : "lux",
"group_interval" : "minute",
"group_length" : "inch",
"group_localtime" : "local_djd",
"group_moisture" : "centibar",
"group_percent" : "percent",
"group_power" : "watt",
@@ -308,6 +309,7 @@ MetricUnits = ListOfDicts({
"group_illuminance" : "lux",
"group_interval" : "minute",
"group_length" : "cm",
"group_localtime" : "local_djd",
"group_moisture" : "centibar",
"group_percent" : "percent",
"group_power" : "watt",
@@ -344,6 +346,9 @@ std_groups = {
# Conversion functions to go from one unit type to another.
conversionDict = {
'astronomical_unit': {'meter' : lambda x : x * 149597870700,
'km' : lambda x : x * 149597870.7,
'mile' : lambda x : x * 92955807.23752087},
'bit' : {'byte' : lambda x : x / 8},
'byte' : {'bit' : lambda x : x * 8},
'cm' : {'inch' : lambda x : x / CM_PER_INCH,
@@ -404,7 +409,8 @@ conversionDict = {
'watt_second' : lambda x : x * 3.6e6,
'watt_hour' : lambda x : x * 1000.0},
'km' : {'meter' : lambda x : x * 1000.0,
'mile' : lambda x : x * 0.621371192},
'mile' : lambda x : x * 0.621371192,
'astronomical_unit': lambda x : x / 149597870.7 },
'km_per_hour' : {'mile_per_hour' : kph_to_mph,
'knot' : kph_to_knot,
'meter_per_second' : lambda x : x * 0.277777778},
@@ -436,14 +442,16 @@ conversionDict = {
'watt_hour' : lambda x : x * 1000000 / 3600,
'watt_second' : lambda x : x * 1000000},
'meter' : {'foot' : lambda x : x / METER_PER_FOOT,
'km' : lambda x : x / 1000.0},
'km' : lambda x : x / 1000.0,
'astronomical_unit': lambda x : x / 149597870700},
'meter_per_second' : {'mile_per_hour' : mps_to_mph,
'knot' : mps_to_knot,
'km_per_hour' : lambda x : x * 3.6},
'meter_per_second2': {'mile_per_hour2' : lambda x : x * 2.23693629,
'knot2' : lambda x : x * 1.94384449,
'km_per_hour2' : lambda x : x * 3.6},
'mile' : {'km' : lambda x : x * 1.609344},
'mile' : {'km' : lambda x : x * 1.609344,
'astronomical_unit': lambda x : x / 92955807.23752087},
'mile_per_hour' : {'km_per_hour' : lambda x : x * 1.609344,
'knot' : mph_to_knot,
'meter_per_second' : lambda x : x * 0.44704},
@@ -771,6 +779,14 @@ class Formatter:
else:
val_str = time.strftime(useThisFormat, time.localtime(t))
addLabel = False
elif val_t[1]=='local_djd':
ti = time.gmtime((val_t[0]-25567.5)*SECS_PER_DAY)
if useThisFormat is None:
val_str = time.strftime(self.time_format_dict.get(context, "%d-%b-%Y %H:%M"),
ti)
else:
val_str = time.strftime(useThisFormat, ti)
addLabel = False
else:
# It's not a time. It's a regular value. Get a suitable format string:
if useThisFormat is None: