I think you would be happiest if you wrote a simple service to calculate
SVD and AVD, then add them to the archive records. If you include them in
your database schema, then they will also appear in the database, making
them easy to use in reports. A last step to making them first-class
citizens in WeeWX would be to have WeeWX recognize them as members of the
unit group, group_pressure.

The new service is very simple. Something like (NOT TESTED):

import weewx.engine
import weewx.units
import weewx.uwxutils

class VaporPressure(weewx.engine.StdService):
    """Service that calculates vapor pressure and adds it to an archive
record"""

    def __init__(self, engine, config_dict):
        # Pass the initialization information on to my superclass:
        super(VaporPressure, self).__init__(engine, config_dict)

        # When a new archive record appears, call the function addVP()
        self.bind(weewx.NEW_ARCHIVE_RECORD, self.addVP)

    def addVP(self, event):
        """Add vapor pressure to a record"""
        # Convert the record to Metric units:
        recordM = weewx.units.to_METRICWX(event.record)
        event.record['SVP'] =
weewx.uwxutils.TWxUtils.SaturationVaporPressure(recordM['outTemp'])
        event.record['AVP'] = record['outHumidity'] * event.record['SVP'] /
100.0


Here, I've used the SVP calculation algorithm already present in WeeWX, but
you can substitute your own.

For more information on writing a custom service, see the section *Adding a
service <http://weewx.com/docs/customizing.htm#Adding_a_service>* in the
Customizing Guide.

To add AVP and SVP to the database schema, see the section *Adding a new
type to the database
<http://weewx.com/docs/customizing.htm#add_archive_type>* in the
Customizing Guide.

To have AVP and SVP be recognized as members of group_pressure, see the
section *Assigning a unit group
<http://weewx.com/docs/customizing.htm#Assigning_a_unit_group>* in the
Customizing Guide.

This is not a hard project, but it will have its challenges if you are not
familiar with Python.

-tk


On Wed, Dec 27, 2017 at 3:03 PM, Eddy B <farn...@gmail.com> wrote:

> Hey all!
>
> For a christmas present I set up a weewx instance running on a rasberry pi
> for my father-in-law. He is using a KlimaLogg Pro station for a while with
> all 8 additional sensors in use.
> Up until now he used a self-created excel sheet, where he imported the
> data using the windows software of the KlimaLogg. In this excel sheet he
> implemented a formula to calculate the Saturation Vapor Density and the
> Actual Vapor Density (SVD & AVD) to get the actual amount of water in the
> air (in g/m^3). With this information he decides wether he has to air his
> rooms.
>
> Now he really would like to have this information available somehow at the
> HTML report page created by weewx. (I guess the dewpoint is probably
> providing more or less the same information, but he seems to be quite proud
> of his formula).
>
> So I started to look into possible ways of doing this and would be
> interested in more professional opinions.
>
> First idea: I considered to just replace the formula to calculate the
> heatindex in bin/weewx/wxformulas.py. This would probably be the easiest
> way for me since he is not interested in the actual heat index and I would
> only have to change 1-2 lines of python code (and some configs to re-label
> the heatindex). But of course this could get complicated to maintain with
> future upgrades of weewx itself.
>
> Second idea: Making use of the user/ folder to place the custom functions
> in there. But I am a bit of a loss here of how to actually hook it up
> properly. My original plan was to extend the database by additional columns
> similar to heatindex and dewpoint but it does not seem to be too trivial
> nor do I really fully grasped how weewx works on the internal level to feel
> confident about this change for now.
>
> Third idea: I also read the "Defining new tags" section on the
> customization guide which sounded promising by using the Cheetah template
> enginge. I wouldn't have the data in the database but I wouldn't mind that
> too much. The two examples listed in the guides were all about aggregating
> existing information in a different way, so I am not exactly sure if I
> could also use this approach to basically derive a new number for every
> datapoint read out of the database?
>
> Fourth idea: Instead of modifying the core files I considered extending
> the klimalogg python module by basically extending the section where the
> interaction for the dewpoint and heatindex calculations happen by a third
> calculation. But again this might get complicated with future updates of
> the klimalogg driver  and the klimalogg driver already seems to make heavy
> use of re-labeling existing observables to support all 9 sensors for each
> temperature and humidity and adding 9 more seems to be problematic at first
> glance.
>
> Fifth and final idea: It seems like I could also generate a PHP file
> instead of a HTML file, so I could just do all my db calls and calculations
> as some kind of post-processing happening after weewx and cheetah do their
> work.
>
> So what do the experts think?
>
> eddy
>

Reply via email to