Hallo
"# Convert our value to a type ValueTuple. We know it is in cm
and
# let's use group_rain (could use group_length too)
value_vt = ValueTuple(float(value), 'cm', 'group_rain')
# Now convert the cm value to the same units as used in our
record
# The unit system of the record is in the records 'usUnits'
field
value_conv = convert(value_vt, event.record['usUnits'])"
These lines are what I was looking for.
It is easier for me to enter 1.0 as 1.0 cm in the file ponnt.txt, than to
convert this 1.0 cm before in inches to enter it into pont.txt.
Thank you for your detailed explanation.
I will continue to report .
thank you
Hartmut
Am Samstag, 14. Januar 2017 07:52:02 UTC+1 schrieb gjr80:
>
> Hi,
>
> I presume you are talking about the add sensor
> <https://github.com/weewx/weewx/wiki/add-sensor> entry in the wiki?
>
> Assuming this is the case. There are 3 places in weewx where units are
> critical. The data coming from the station, the data being stored in the
> database and the data displayed on reports. weewx uses 3 unit systems; US,
> METRIC or METRICWX. These 3 unit systems define the units used by the
> different observation groups, for example, under the US unit system all
> temperatures are in degrees F, but under METRIC and METRICWX all
> temperatures are in degrees C. Records coming from the station will be in
> one of these 3 unit systems, what system it is largely depends on the
> driver, the driver author or what side of the bed the author got out of the
> day he wrote the driver. Once weewx has the record from the driver and is
> ready to save it to the database, the unit system of the record is checked
> against the unit system in the database and if necessary the record is
> converted to the unit system used by the database. So if the station
> emitted a record using the METRIC unit system, and the database uses the US
> unit system (the default), the record would be converted to the US unit
> system (so all temperatures are converted from C to F, speeds from km/h to
> mph etc) and the record is then saved to the database. When it comes to
> reporting the report generation system has its own system of formatting and
> converting to display the underlying data (which may in US units, or METRIC
> or METRICWX) in whatever units you wish. If you understand this basic
> concept you will better understand what is happening to your data in
> pond.txt and more importantly why.
>
> In your case, it sounds like you have decided to use a METRIC database,
> that is fine there is no particular advantage to this (in fact it can be a
> hindrance in some situations). It depends on what driver/station you have,
> but I suspect that the records coming from your station us the US unit
> system. So the 'add sensor' code simply reads a number from the file, in
> this case 1.0, and then places that number in a field in the record. That
> field, by the sounds of it, will be a group_rain or group_length field that
> when used under the US unit system is in inches. So weewx believes you have
> added a value of 1.0 inches (remember your record uses the US unit system).
> When the time comes to store that data in your database, weewx checks the
> unit system of the record, sees it is US which is different to the METRIC
> unit system used by the database and weewx converts the values. weewx
> believes it is converting your 1.0 value from inches to cm and hence it
> becomes 2.54cm (1.0 inch = 2.54cm).
>
> So how to you fix your problem. There are a few options that vary in
> complexity and simplicity. These are:
> 1. Make sure the value you put in /var/tmp/pond.txt is in inches. This is
> the simplest but perhaps not acceptable to you - you would have to convert
> the 34cm of snow to inches!
> 2. Continue to put cm values in var/tmp/pond.txt but put some code in your
> read_file() method to do the conversion. Something like this (untested):
>
> import syslog
> import weewx
> from weewx.wxengine import StdService
> from weewx.units import ValueTuple, convert
>
> class PondService(StdService):
> def __init__(self, engine, config_dict):
> super(PondService, self).__init__(engine, config_dict)
> d = config_dict.get('PondService', {})
> self.filename = d.get('filename', '/var/tmp/pond.txt')
> syslog.syslog(syslog.LOG_INFO, "pond: using %s" % self.filename)
> self.bind(weewx.NEW_ARCHIVE_RECORD, self.read_file)
>
> def read_file(self, event):
> try:
> with open(self.filename) as f:
> value = f.read()
> syslog.syslog(syslog.LOG_DEBUG, "pond: found value of %s" %
> value)
> # Convert our value to a type ValueTuple. We know it is in cm
> and
> # let's use group_rain (could use group_length too)
> value_vt = ValueTuple(float(value), 'cm', 'group_rain')
> # Now convert the cm value to the same units as used in our
> record
> # The unit system of the record is in the records 'usUnits'
> field
> value_conv = convert(value_vt, event.record['usUnits'])
> event.record['some_field_name'] = value_conv
> except Exception, e:
> syslog.syslog(syslog.LOG_ERR, "pond: cannot read value: %s" %
> e)
>
> Hopefully that gets the point across. You could further refine this in a
> number of ways. You could have it read the units from pond.txt, so when
> your US friends read your snow and use inches it still works (rather than
> doing a double conversion). You could add some conditional checks or
> try..except statements to handle invalid data or None coming in from your
> file (ie what to do if you get a non-numeric answer).
>
> If it was me I would be going down the path of option 2. It is far more
> elegant and capable.
>
> Gary
>
>
> On Saturday, 14 January 2017 01:36:17 UTC+10, Hartmut Schweidler wrote:
>>
>> I use "add sensor" from weewx/wiki
>>
>> when I enter a value of 1.0 cm in "/var/tmp/pond.txt" appears in the
>> database 2.54.
>>
>> This is the value in inches. But I have a system in METRIC.
>>
>> Where is my fault?
>>
>> What I've overlooked. My idea is an entry for snow in my database.
>>
>> Please A Note
>> Hartmut
>>
>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.