No, i just adjustet the vaporpressure.py example.

But i see what you mean, i have to calculate it by my own, this means i 
have to load all data for a day and calculate it.
im not shure i can do this.
i quess its easyer and better to do this in the database. 

gjr80 schrieb am Donnerstag, 17. Dezember 2020 um 20:37:57 UTC+1:

> Hi,
>
> When you wrote your xtype extension what methods did you implement? Did 
> you implement get_aggregate()?
>
> Gary
>
> On Friday, 18 December 2020 at 02:41:34 UTC+10 bwal...@gmail.com wrote:
>
>> Hi
>> i made a xtype extension for a wetbulp temperaur. this worsks fine with 
>> the $current tag and the image generator.
>>
>> with tag $day.wetbulp_t.min the chetagenerator rise no error but whrites  
>> $day.wetbulp_t.min    in the file...
>>
>> do i have do add wetbulp_t in database for get this to work?
>>
>

-- 
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/c9c7b1eb-6979-4c74-b8d9-36522dc99a49n%40googlegroups.com.
#
#    Copyright (c) 2020 Tom Keffer <tkef...@gmail.com>
#
#    See the file LICENSE.txt for your full rights.
#
"""This example shows how to extend the XTypes system with a new type, wetbulp_t, the vapor
pressure of water.

REQUIRES WeeWX V4.2 OR LATER!

To use:
    1. Stop weewxd
    2. Put this file in your user subdirectory.
    3. In weewx.conf, subsection [Engine][[Services]], add WetbulptemperureService to the list
    "xtype_services". For example, this means changing this

        [Engine]
            [[Services]]
                xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater

    to this:

        [Engine]
            [[Services]]
                xtype_services = weewx.wxxtypes.StdWXXTypes, weewx.wxxtypes.StdPressureCooker, weewx.wxxtypes.StdRainRater, user.wetbulp.wetbulpService



    4. Restart weewxd

"""
import math

import weewx
import weewx.units
import weewx.xtypes
from weewx.engine import StdService
from weewx.units import ValueTuple


class WetBulp(weewx.xtypes.XType):

    def __init__(self, algorithm='simple'):
        # Save the algorithm to be used.
        self.algorithm = algorithm.lower()

    def get_scalar(self, obs_type, record, db_manager):
        # We only know how to calculate 'vapor_p'. For everything else, raise an exception UnknownType
        if obs_type != 'wetbulp_t':
            raise weewx.UnknownType(obs_type)

        # We need outTemp in order to do the calculation.
        if 'outTemp' not in record or record['outTemp'] is None:
            raise weewx.CannotCalculate(obs_type)

        # We have everything we need. Start by forming a ValueTuple for the outside temperature.
        # To do this, figure out what unit and group the record is in ...
        unit_and_group = weewx.units.getStandardUnitType(record['usUnits'], 'outTemp')
        # ... then form the ValueTuple.
        outTemp_vt = ValueTuple(record['outTemp'], *unit_and_group)

        # Both algorithms need temperature in Celsius, so let's make sure our incoming temperature
        # is in that unit. Use function convert(). The results will be in the form of a ValueTuple
        outTemp_C_vt = weewx.units.convert(outTemp_vt, 'degree_C')
        # Get the first element of the ValueTuple. This will be in Celsius:
        outTemp_C = outTemp_C_vt[0]



        # We need outHumidity in order to do the calculation.
        if 'outHumidity' not in record or record['outHumidity'] is None:
            raise weewx.CannotCalculate(obs_type)

        # We have everything we need. Start by forming a ValueTuple for the outside humidity.
        # To do this, figure out what unit and group the record is in ...
        unit_and_group = weewx.units.getStandardUnitType(record['usUnits'], 'outHumidity')
        # ... then form the ValueTuple.
        outHumidity_vt = ValueTuple(record['outHumidity'], *unit_and_group)

        # Algorithms need humidity in percent, so let's make sure our incoming humidity
        # is in that unit. Use function convert(). The results will be in the form of a ValueTuple
        
        #outHumidity_P_vt = weewx.units.convert(outTemp_vt, 'group_percent')
        # Get the first element of the ValueTuple. This will be in Percent:
        outHumidity_P = outHumidity_vt[0]
        
        

        # Now we can use the formula. Results will be in degree celcius. Create a ValueTuple out of it:
        w_b = ValueTuple(-5.809 + 0.058 * outHumidity_P + 0.697 * outTemp_C + 0.003 * outHumidity_P * outTemp_C, 'degree_C', 'group_temperature')


        # We have the wetbulp temeratur as a ValueTuple. Convert it back to the units used by
        # the incoming record and return it
        return weewx.units.convertStd(w_b, record['usUnits'])


class wetbulpService(StdService):
    """ WeeWX service whose job is to register the XTypes extension wetbulp with the
    XType system.
    """

    def __init__(self, engine, config_dict):
        super(wetbulpService, self).__init__(engine, config_dict)

        # Get the desired algorithm. Default to "simple".
        try:
            algorithm = config_dict['WetBulp']['algorithm']
        except KeyError:
            algorithm = 'simple'

        # Instantiate an instance of VaporPressure:
        self.vp = WetBulp(algorithm)
        # Register it:
        weewx.xtypes.xtypes.append(self.vp)

    def shutDown(self):
        # Remove the registered instance:
        weewx.xtypes.xtypes.remove(self.vp)


# Tell the unit system what group our new observation type, 'vapor_p', belongs to:
weewx.units.obs_group_dict['wetbulp_t'] = "group_temperature"

Reply via email to