Thomas, many thanks, appreciate your support. I am running latest weewx 3.9.1 with latest niculskin.
Indeed, formatting is set to 'utf8', which I changed to 'strict_ascii' for testing. However, now - temperature does not show 'degree character' any more ('C' only) and - month 'Mar' appears as 'Mr' only. Please find enclosed my skin.conf for your reference. Copain Am Montag, 11. März 2019 17:15:21 UTC+1 schrieb Copain: > I am running weewx on RPi 3B with dietpi and German locale. > > In NOAA reports I noticed some strange formats for > - temperature (°C) and > - months ('Mär' for 'Mar') > > Some variables affected are '$unit.label.outTemp.strip()', > '$year.outTemp.maxtime.format($M,$NODAY)', > '$year.outTemp.mintime.format($M,$NODAY)', > '$year.rain.maxsumtime.format($M,$NODAY)' and > '$year.wind.maxtime.format($M,$NODAY)'. > > Where / how could those be changed in oder to show propper formatting? > > Thanks. > > -- 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. For more options, visit https://groups.google.com/d/optout.
############################################################################### # $Id: skin.conf 2749 2014-11-29 18:15:24Z tkeffer $ # # Copyright (c) 2010 Tom Keffer <tkef...@gmail.com> # # SOFA SKIN (c) 2015 Sven Reifschneider <he...@blauesledersofa.de> # # SOFA SKIN CONFIGURATION FILE # ############################################################################### [Extras] # Template Extras # Current radar animation 3 hour loop radar_img = http://niederschlagsradar.de/image.ashx?type=loop3stunde&jaar=-2®io=homepage&tijdid=201511212239&time=&bliksem=0 # Current radar animation 24 hour loop radar_gif = http://niederschlagsradar.de/image.ashx?type=loop24stunde&jaar=-2®io=homepage&tijdid=201511212242&time=&bliksem=0 # Hyperlink for radar radar_url = http://niederschlagsradar.de # Lightning map and hyperlink lightning_map = http://images.blitzortung.org/Images/image_b_de.png lightning_url = http://www.lightningmaps.org/realtime?lang=de # URL for another radar (for example full Europe, Frankfurt center) radar_url_alt = http://meteox.com/meteox-maps.aspx?a=1&z=7&lat=50.1109221&lon=8.682126700000026 radar_url_alt_text = "Meteox Europe Radar" ############################################################################### [Units] # This section is for managing the selection and formatting of units. [[Groups]] # For each group of measurements, this section sets what units to # use for it. # NB: The unit is always in the singular. I.e., 'mile_per_hour', # NOT 'miles_per_hour' group_altitude = meter # Options are 'foot' or 'meter' group_degree_day = degree_C_day # Options are 'degree_F_day' or 'degree_C_day' group_direction = degree_compass group_moisture = centibar group_percent = percent group_pressure = hPa # Options are 'inHg', 'mmHg', 'mbar', or 'hPa' group_radiation = watt_per_meter_squared 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_speed = km_per_hour # Options are 'mile_per_hour', 'km_per_hour', 'knot', or 'meter_per_second' group_speed2 = km_per_hour2 # Options are 'mile_per_hour2', 'km_per_hour2', 'knot2', or 'meter_per_second2' group_temperature = degree_C # Options are 'degree_F' or 'degree_C' group_uv = uv_index group_volt = volt # The following are used internally and should not be changed: group_count = count group_interval = minute group_time = unix_epoch group_elapsed = second [[StringFormats]] # This section sets the string formatting for each type of unit. centibar = %.0f cm = %.2f cm_per_hour = %.2f degree_C = %.1f degree_F = %.1f degree_compass = %.0f foot = %.0f hPa = %.0f hour = %.1f inHg = %.3f inch = %.2f inch_per_hour = %.2f km_per_hour = %.0f km_per_hour2 = %.1f knot = %.0f knot2 = %.1f mbar = %.0f meter = %.0f meter_per_second = %.1f meter_per_second2 = %.1f mile_per_hour = %.0f mile_per_hour2 = %.1f mm = %.1f mmHg = %.1f mm_per_hour = %.1f percent = %.0f second = %.0f uv_index = %.0f volt = %.1f watt_per_meter_squared = %.0f NONE = " N/A" [[Labels]] # This section sets a label to be used for each type of unit. centibar = " cb" cm = " cm" cm_per_hour = " cm/h" degree_C = °C degree_F = °F degree_compass = ° foot = " feet" hPa = " hPa" inHg = " inHg" inch = " in" inch_per_hour = " in/h" km_per_hour = " km/h" km_per_hour2 = " km/h" knot = " knoten" knot2 = " knoten" mbar = " mbar" meter = " Meter" meter_per_second = " m/s" meter_per_second2 = " m/s" mile_per_hour = " mph" mile_per_hour2 = " mph" mm = " mm" mmHg = " mmHg" mm_per_hour = " mm/h" percent = % volt = " V" watt_per_meter_squared = " W/m²" day = " Tag", " Tage" hour = " Stunde", " Stunden" minute = " Minute", " Minuten" second = " Sekunde", " Sekunden" NONE = "" [[TimeFormats]] # This section sets the string format to be used for each time scale. # The values below will work in every locale, but may not look # particularly attractive. See the Customizing Guide for alternatives. day = %X week = %X (%A) month = %x %X year = %x %X rainyear = %x %X current = %x %X ephem_day = %X ephem_year = %x %X [[Ordinates]] # The ordinal directions. The last one should be for no wind direction directions = N, NNO, NO, ONO, O, OSO, SO, SSO, S, SSW, SW, WSW, W, WNW, NW, NNW, N/A [[DegreeDays]] # This section sets the base temperatures used for the calculation # of heating and cooling degree-days. # Base temperature for heating days, with unit: heating_base = 18, degree_C # Base temperature for cooling days, with unit: cooling_base = 18, degree_C [[Trend]] time_delta = 10800 # 3 hours time_grace = 300 # 5 minutes ############################################################################### [Labels] # Labels used in this skin # Set to hemisphere abbreviations suitable for your location: hemispheres = N, S, O, W # Formats to be used for latitude whole degrees, longitude whole degrees, # and minutes: latlon_formats = "%02d", "%03d", "%05.2f" [[Generic]] # Generic labels, keyed by an observation type. barometer = Barometer dewpoint = Dew Point heatindex = Heat Index inHumidity = Inside Humidity inTemp = Inside Temperature outHumidity = Outside Humidity outTemp = Outside Temperature radiation = Radiation rain = Rain rainRate = Rain Rate rxCheckPercent = ISS Signal Quality UV = UV Index windDir = Wind Direction windGust = Gust Speed windGustDir = Gust Direction windSpeed = Wind Speed windchill = Wind Chill windgustvec = Gust Vector windvec = Wind Vector # This one is probably specific to my station! extraTemp1 = Extra Temperatur 1 extraHumid1 = Extra Luftfeuchtigkeit 1 extraTemp2 = Extra Temperatur 2 extraHumid2 = Extra Luftfeuchtigkeit 2 ############################################################################################ [Language] # # Set a language below and labels will be overridden with any that are specified in # skins/languages/[language].conf # # Choices are: dutch, espanol, finnish, francais, italian, german language = german ############################################################################### [Almanac] # The labels to be used for the phases of the moon: moon_phases = New, Waxing crescent, First quarter, Waxing gibbous, Full, Waning gibbous, Last quarter, Waning crescent ############################################################################### [CheetahGenerator] # This section is used by the generator CheetahGenerator, and specifies # which files are to be generated from which template. # Possible encodings are 'html_entities', 'utf8', or 'strict_ascii' encoding = html_entities search_list_extensions = user.historygenerator.MyXSearch [[SummaryByMonth]] # Reports that summarize "by month" [[[NOAA_month]]] encoding = utf8 template = NOAA/NOAA-YYYY-MM.txt.tmpl [[SummaryByYear]] # Reports that summarize "by year" [[[NOAA_year]]] encoding = utf8 template = NOAA/NOAA-YYYY.txt.tmpl [[ToDate]] # Reports that show statistics "to date", such as day-to-date, # week-to-date, month-to-date, etc. [[[day]]] template = index.html.tmpl [[[week]]] template = week.html.tmpl [[[month]]] template = month.html.tmpl [[[year]]] template = year.html.tmpl [[[RSS]]] template = RSS/weewx_rss.xml.tmpl [[[history]]] template = history.html.tmpl ############################################################################### [CopyGenerator] # This section is used by the generator CopyGenerator # List of files to be copied only the first time the generator runs copy_once = css/main.css, css/scss/*, js/*, .htaccess, 404.html, robots.txt, touch-icon.png ############################################################################### [niculskinLabels] title = "Current Weather Conditions" location_ref_label = "Show on map" footer = "© 2016 by Nico Gulden" [[headings]] front_page = The Weather stats = Stats history = History news = News about = About last_update = Last updated current_conditions = Current Conditions since_midnight = Since Midnight outside_conditions = Outside Conditions wind = Wind inside = Inside Temperature extra1 = Extra Temperature 1 extra2 = Extra Temperature 2 this_week = This Week this_month = This Month calendar_year = Calendar Year year = 12 Months civil_twilight_start = Start civil twilight sunrise = Sunrise transit = Transit sunset = Sunset civil_twilight_end = End civil twilight azimuth = Azimuth altitude = Altitude right_ascension = Right ascension declination = Declination equinox = Equinox solstice = Solstice rise = Rise set = Set full_moon = Full moon new_moon = New moon moon_phase = Phase [[status]] latitude = Latitude: longitude = Longitude: altitude = Altitude: station_uptime = Station uptime: server_uptime = Server uptime: [[timespans]] day = Last 24 hours today = Today # today = any time since midnight week = This week month = This Month year = This Year ever = Since ever [[history_tables]] min_temp = Minimum Temperature max_temp = Maximum Temperature avg_temp = Average Temperature rain = Rainfall rain_days = Days of rain NOAA = NOAA Data [[conditions]] out_temp = Outside Temperature out_humidity = Outside Humidity windchill = Windchill heatindex = Heat Index dewpoint = Dewpoint barometer = Barometer barometer_trend = Barometer Trend wind = Wind rain_rate = Rain Rate in_temp_humidity = Inside Temperature & Humidity extra_1_temp_humidity = Extra 1 Temperature & Humidity extra_2_temp_humidity = Extra 2 Temperature & Humidity out_temp_max = Maximum Outside Temperature out_temp_min = Minimum Outside Temperature heatindex_max = Maximum Heat Index windchill_min = Minimum Windchill dewpoint_max = Maximum Dewpoint dewpoint_min = Minimum Dewpoint out_humidity_max = Maximum Outside Humidity out_humidity_min = Minimum Outside Humidity barometer_max = Maximum Barometer barometer_min = Minimum Barometer rain_sum = Sum Rain rain_rate_max = Maximum Rain Rate wind_max = Maximum Wind wind_avg = Average Wind wind_rms = RMS Wind wind_vec = Wind Vector Average & Direction temp_max = Maximum Temperature temp_min = Minimum Temperature humidity_max = Maximum Humidity humidity_min = Minimum Humidity ############################################################################### [HistoryReport] # # Settings for the HTML month/year colour coded summary table generator # # minvalues, maxvalues and colours should contain the same number of elements. # # For example, the [min_temp] example below, if the minimum temperature measured in # a month is between -50 and -10 (degC) then the cell will be shaded in html colour code #0029E5. # # Default is temperature scale minvalues = -50, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35 maxvalues = -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 60 colours = "#0029E5", "#0186E7", "#02E3EA", "#04EC97", "#05EF3D2", "#2BF207", "#8AF408", "#E9F70A", "#F9A90B", "#FC4D0D", "#FF0F2D" monthnames = Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec # The Raspberry Pi typically takes 15+ seconds to calculate all the summaries with a few years of weather date. # refresh_interval is how often in minutes the tables are calculated. refresh_interval = 60 [[min_temp]] obs_type = outTemp # obs_type can be any weewx reading aggregate_type = min # Any of these: 'sum', 'count', 'avg', 'max', 'min' # # Can also use these aggregate_types: 'max_ge', 'max_le', 'min_le', 'sum_ge' to count days # where an observation is ge: greater of equalto, or le: lessthan or equal to a threshold value # To specify this threshold, use: aggregate_threshold = [value], [units] # # e.g Specify temperature threshold of 20C: aggregate_threshold = 20, degree_C # [[max_temp]] obs_type = outTemp aggregate_type = max [[avg_temp]] obs_type = outTemp aggregate_type = avg [[rain]] obs_type = rain aggregate_type = sum minvalues = 0, 25, 50, 75, 100, 150 # Override default temperature colour scheme with rain specific scale maxvalues = 25, 50, 75, 100, 150, 1000 colours = "#E0F8E0", "#A9F5A9", "#58FA58", "#2EFE2E", "#01DF01", "#01DF01" [[rain_days]] obs_type = rain units = Days # Override default table units label aggregate_type = sum_ge aggregate_threshold = 0.1, mm # https://de.wikipedia.org/wiki/Regentag minvalues = 0, 6, 12, 18, 24, 30 # Override default temperature colour scheme with rain specific scale maxvalues = 6, 12, 18, 24, 30, 50 colours = "#E0F8E0", "#A9F5A9", "#58FA58", "#2EFE2E", "#01DF01", "#01DF01" [[NOAA]] # # Creates a table of links to NOAA reports with the tag $NOAA_table # Comment out [[NOAATable]] if you do not need this. # # Where to find the NOAA files and how they are named # Uses Python datetime convention (docs.python.org/2/library/datetime.html): # %Y = YYYY, %y = YY, %m = MM, etc. # year_filename = NOAA/NOAA-%Y.txt month_filename = NOAA/NOAA-%Y-%m.txt ############################################################################### [ImageGenerator] # This section lists all the images to be generated, what SQL types are to # be included in them, along with many plotting options, such as color or # font. There's a default for almost everything, if not specified below. # Nevertheless, I have explicitly put in values, to make it easy to see # and understand the options. # # Fonts can be anything accepted by the Python Imaging Library (PIL), which # is currently truetype (.ttf), or PIL's own font format (.pil). See # http://www.pythonware.com/library/pil/handbook/imagefont.htm for more # details. Note that "font size" is only used with truetype (.ttf) # fonts. For others, font size is determined by the bit-mapped size, # usually encoded in the file name (e.g., courB010.pil). If a font cannot # be found, then a default font will be used. # # Colors can be specified any of three ways: # 1. Notation 0xBBGGRR; # 2. Notation #RRGGBB; or # 3. Using an English name, such as 'yellow', or 'blue'. # So, 0xff0000, #0000ff, or 'blue' would all specify a pure blue color. image_width = 800 image_height = 300 image_background_color = 0xffffff chart_background_color = 0xffffff chart_gridline_color = 0xdbdbdb top_label_font_path = /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf top_label_font_size = 12 unit_label_font_path = /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf unit_label_font_size = 12 unit_label_font_color = 0x000000 bottom_label_font_path = /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf bottom_label_font_size = 12 bottom_label_font_color = 0x000000 axis_label_font_path = /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf axis_label_font_size = 12 axis_label_font_color = 0x000000 # Options for the compass rose, used for progressive vector plots rose_label = N rose_label_font_path = /usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf rose_label_font_size = 12 rose_label_font_color = 0x000000 # Default colors for the plot lines. These can be overridden for # individual lines using option 'color' chart_line_colors = 0xb48242, 0x4242b4, 0x42b442 # Type of line. Only 'solid' or 'none' is offered now line_type = 'solid' # Size of marker in pixels marker_size = 8 # Type of marker. Pick one of 'cross', 'x', 'circle', 'box', or 'none' marker_type = 'none' # Default fill colors for bar charts. These can be overridden for # individual bar plots using option 'fill_color' chart_fill_colors = 0xc4b272, 0x7272c4, 0x72c472 # The following option merits an explanation. The y-axis scale used for # plotting can be controlled using option 'yscale'. It is a 3-way tuple, # with values (ylow, yhigh, min_interval). If set to "None", a parameter is # set automatically, otherwise the value is used. However, in the case of # min_interval, what is set is the *minimum* y-axis tick interval. yscale = None, None, None # For progressive vector plots, you can choose to rotate the vectors. # Positive is clockwise. # For my area, westerlies overwhelmingly predominate, so by rotating # positive 90 degrees, the average vector will point straight up. vector_rotate = 0 # This defines what fraction of the difference between maximum and minimum # horizontal chart bounds is considered a gap in the samples and should not # be plotted. line_gap_fraction = 0.01 bar_gap_fraction = 0.20 # This controls whether day/night bands will be shown. They only look good # on the day and week plots. show_daynight = true # These control the appearance of the bands if they are shown. 0xBBGGRR # Sofa Skin blue orange: # Night: #f0fdff Day: #fefff0 Edge: #f0fffb daynight_day_color = 0xf0fffe daynight_night_color = 0xfffdf0 daynight_edge_color = 0xfbfff0 # Here's a monochrome scheme: #daynight_day_color = 0xfffafd #daynight_night_color = 0xe2dfdf #daynight_edge_color = 0xd8d8e0 ## What follows is a list of subsections, each specifying a time span, such ## as a day, week, month, or year. There's nothing special about them or ## their names: it's just a convenient way to group plots with a time span ## in common. You could add a time span [[biweek_images]] and add the ## appropriate time length, aggregation strategy, etc., without changing ## any code. ## ## Within each time span, each sub-subsection is the name of a plot to be ## generated for that time span. The generated plot will be stored using ## that name, in whatever directory was specified by option 'HTML_ROOT' ## in weewx.conf. ## ## With one final nesting (four brackets!) is the sql type of each line to ## be included within that plot. ## ## Unless overridden, leaf nodes inherit options from their parent # Default plot and aggregation. Can get overridden at any level. plot_type = line aggregate_type = none width = 1 time_length = 86400 # == 24 hours [[day_images]] x_label_format = %H:%M bottom_label_format = %x %X time_length = 97200 # == 27 hours [[[daybarometer]]] [[[[barometer]]]] [[[dayhumidity]]] [[[[outHumidity]]]] [[[[extraHumid2]]]] [[[daytempdew]]] [[[[outTemp]]]] [[[[dewpoint]]]] [[[[extraTemp2]]]] [[[daytempchill]]] [[[[windchill]]]] [[[[heatindex]]]] [[[dayrain]]] # Make sure the y-axis increment is at least 0.02 for the rain plot yscale = None, None, 0.02 plot_type = bar [[[[rain]]]] aggregate_type = sum aggregate_interval = 3600 label = Regen (stündliche Menge) [[[dayrx]]] [[[[rxCheckPercent]]]] [[[daywind]]] [[[[windSpeed]]]] [[[[windGust]]]] [[[dayinside]]] [[[[inTemp]]]] [[[[extraTemp1]]]] [[[dayinsidehumid]]] [[[[inHumidity]]]] [[[[extraHumid1]]]] [[[daywinddir]]] # Hardwire in the y-axis scale for wind direction yscale = 0.0, 360.0, 45.0 [[[[windDir]]]] [[[daywindvec]]] [[[[windvec]]]] plot_type = vector [[[dayradiation]]] [[[[radiation]]]] [[[dayuv]]] yscale = 0, 16, 1 [[[[UV]]]] [[week_images]] x_label_format = %d bottom_label_format = %x %X time_length = 604800 # == 7 days aggregate_type = avg aggregate_interval = 3600 [[[weekbarometer]]] [[[[barometer]]]] [[[weekhumidity]]] [[[[outHumidity]]]] [[[[extraHumid2]]]] [[[weektempdew]]] [[[[outTemp]]]] [[[[dewpoint]]]] [[[[extraTemp2]]]] [[[weektempchill]]] [[[[windchill]]]] [[[[heatindex]]]] [[[weekrain]]] yscale = None, None, 0.02 plot_type = bar [[[[rain]]]] aggregate_type = sum aggregate_interval = 86400 label = Regen (tägliche Menge) [[[weekinside]]] [[[[inTemp]]]] [[[[extraTemp1]]]] [[[weekinsidehumid]]] [[[[inHumidity]]]] [[[[extraHumid1]]]] [[[weekrx]]] [[[[rxCheckPercent]]]] [[[weekwind]]] [[[[windSpeed]]]] [[[[windGust]]]] aggregate_type = max [[[weekwinddir]]] yscale = 0.0, 360.0, 45.0 [[[[windDir]]]] [[[weekwindvec]]] [[[[windvec]]]] plot_type = vector [[[weekradiation]]] [[[[radiation]]]] [[[weekuv]]] yscale = 0, 16, 1 [[[[UV]]]] [[month_images]] x_label_format = %d bottom_label_format = %x %X time_length = 2592000 # == 30 days aggregate_type = avg aggregate_interval = 10800 # == 3 hours show_daynight = false [[[monthbarometer]]] [[[[barometer]]]] [[[monthhumidity]]] [[[[outHumidity]]]] [[[[extraHumid2]]]] [[[monthtempdew]]] [[[[outTemp]]]] [[[[dewpoint]]]] [[[[extraTemp2]]]] # Daily high/lows: [[[monthhilow]]] [[[[hi]]]] data_type = outTemp aggregate_type = max label = Höchsttemperatur [[[[low]]]] data_type = outTemp aggregate_type = min label = Tiefsttemperatur [[[monthtempchill]]] [[[[windchill]]]] [[[[heatindex]]]] [[[monthrain]]] yscale = None, None, 0.02 plot_type = bar [[[[rain]]]] aggregate_type = sum aggregate_interval = 86400 label = Regen (tägliche Menge) [[[monthinside]]] [[[[inTemp]]]] [[[[extraTemp1]]]] [[[monthinsidehumid]]] [[[[inHumidity]]]] [[[[extraHumid1]]]] [[[monthrx]]] [[[[rxCheckPercent]]]] [[[monthwind]]] [[[[windSpeed]]]] [[[[windGust]]]] aggregate_type = max [[[monthwinddir]]] yscale = 0.0, 360.0, 45.0 [[[[windDir]]]] [[[monthwindvec]]] [[[[windvec]]]] plot_type = vector [[[monthradiation]]] [[[[radiation]]]] [[[monthuv]]] yscale = 0, 16, 1 [[[[UV]]]] [[year_images]] x_label_format = %m/%d bottom_label_format = %x %X time_length = 31536000 # == 365 days aggregate_type = avg aggregate_interval = 86400 show_daynight = false [[[yearbarometer]]] [[[[barometer]]]] [[[yearhumidity]]] [[[[outHumidity]]]] [[[[extraHumid2]]]] [[[yeartempdew]]] [[[[outTemp]]]] [[[[dewpoint]]]] [[[[extraTemp2]]]] # Daily high/lows: [[[yearhilow]]] [[[[hi]]]] data_type = outTemp aggregate_type = max label = Höchsttemperatur [[[[low]]]] data_type = outTemp aggregate_type = min label = Tiefsttemperatur [[[yearwind]]] [[[[windSpeed]]]] [[[[windGust]]]] aggregate_type = max [[[yeartempchill]]] [[[[windchill]]]] [[[[heatindex]]]] [[[yearrain]]] yscale = None, None, 0.02 plot_type = bar [[[[rain]]]] aggregate_type = sum # aggregate_interval = 2629800 # Magic number: the length of a nominal month aggregate_interval = 604800 # == 1 week label = Regen (wöchentliche Menge) [[[yearinside]]] [[[[inTemp]]]] [[[[extraTemp1]]]] [[[yearinsidehumid]]] [[[[inHumidity]]]] [[[[extraHumid1]]]] [[[yearrx]]] [[[[rxCheckPercent]]]] [[[yearwinddir]]] yscale = 0.0, 360.0, 45.0 [[[[windDir]]]] [[[yearwindvec]]] [[[[windvec]]]] plot_type = vector [[[yearradiation]]] [[[[radiation]]]] [[[yearuv]]] yscale = 0, 16, 1 [[[[UV]]]] ############################################################################### # # The list of generators that are to be run: # [Generators] generator_list = user.translategenerator.CheetahGeneratorTranslated, weewx.imagegenerator.ImageGenerator, weewx.reportengine.CopyGenerator