Hello Gary,
Thanks again for this great, very detailed explanation !
So, following this, I assume I can skip step1 for my "milliamp" unit,
because of already existing group_amp in weewx.
so I could add to my extension.py the following:
weewx.units.conversionDict['amp'] = {'milliamp': lambda x : x * 1000}
weewx.units.conversionDict['milliamp'] = {'amp': lambda x : x * 0.001}
weewx.units.default_unit_format_dict['milliamp'] = '%.0f'
weewx.units.obs_group_dict['Isolar'] = 'group_amp'
Then, a question comme to my mind...
I guess weewx expect then "amp" values in database, while my existing
records (uptonow unitless) have records in mA.
For example, if my database contains 120 (that I expect to be 120mA),
weewx may display 120000mA
Can I redefine the default database unit ?
Maybe it's not recommended and I could create a full new group, for example
"group_current"
Le vendredi 26 avril 2019 01:52:22 UTC+2, gjr80 a écrit :
>
> Rather than simply give you the answer I will step through all of the
> considerations when adding a new unit to WeeWX, hopefully this will wrap it
> all up in one place rather than in several piecemeal posts. Almost all of
> the following is covered to some extent in the Customizing the database
> <http://weewx.com/docs/customizing.htm#archive_database> and Customizing
> units and unit groups
> <http://weewx.com/docs/customizing.htm#customizing_units> sections of the
> Customization Guide.
>
> There are a number of key points to consider when adding a new unit to
> WeeWX, depending on the unit some of these points may require extension of
> some aspect of WeeWX or no action may be required. The points to be
> considered are:
>
> 1. unit groups
> 2. unit conversion functions
> 3. default labels and formats
>
> Unit groups. Does your new unit fit into an existing WeeWX unit group
> (refer bin/weewx/units.py class USUnits, MetricUnits and MetricWXUnits).
> If your unit does fit into an existing unit group (eg Kelvin would fit in
> group_temperature) you can skip this step. If your unit does not fit
> within an existing unit group then you will need to define a new unit
> group. This can be easily done by adding new entries to each of class
> USUnits, MetricUnits and MetricWXUnits. For example, the new unit group,
> group_resistance, would be added as follows:
>
> import weewx.units
> weewx.units.MetricUnits['group_resistance'] = 'ohm'
> weewx.units.MetricWXUnits['group_resistance'] = 'ohm'
> weewx.units.USUnits['group_resistance'] = 'ohm'
>
> Conversion functions. Having defined the unit group group_resistance, we
> can now consider any unit conversion functions. We might want to handle
> resistance in ohms, kilohms and megohms. In effect we are treating ohms,
> kilohms and megohms as individual units even though they are all really
> just scaled version of the same unit ohms. Consider the differences to
> temperature where we have C, F and Kelvin, it's the same principle but in
> the case of ohms (and in your case the amps/milliamps) the conversion
> functions are simple scalings rather than something more complex. So we
> need to define conversion functions for converting between our three
> resistance units (if we were adding to an existing unit group we would need
> to define conversion functions between all units (new and existing) in the
> unit group). In this case we will use ohm, kohm and Mohm as the 'units',
> so we add to the weewx.units.conversionDict:
>
> weewx.units.conversionDict['ohm'] = {'kohm': lambda x : x / 1000.0,
> 'Mohm': lambda x : x / 1000000.0}
> weewx.units.conversionDict['kohm'] = {'ohm': lambda x : x * 1000.0,
> 'Mohm': lambda x : x / 1000.0}
> weewx.units.conversionDict['Mohm'] = {'ohm': lambda x : x * 1000000.0,
> 'kohm': lambda x : x * 1000.0}
>
>
> WeeWX now knows how to convert between the different members of
> group_resistance.
>
> Default labels and formats. WeeWX reports may use default labels and
> number formats for obs of particular units. So you need to define default
> number formats and unit labels for any new units, in this case we need unit
> labels and number formats for ohm, kohm and Mohm. To do this we augment
> weewx.units.default_unit_label_dict and
> weewx.units.default_unit_format_dict respectively. Something like:
>
> weewx.units.default_unit_format_dict['ohm'] = '%.1f'
> weewx.units.default_unit_label_dict['ohm'] = ' ohm'
> weewx.units.default_unit_format_dict['kohm'] = '%.1f'
> weewx.units.default_unit_label_dict['kohm'] = ' ohm'
> weewx.units.default_unit_format_dict['Mohm'] = '%.3f'
> weewx.units.default_unit_label_dict['Mohm'] = ' Mohm'
>
> That's it. WeeWX now knows about obs that measure resistance in ohms; it
> knows how to convert between the three 'units' as well as being able to
> properly format tags using resistance obs in a report.
>
> None of the above actually results in anything being stored in the
> database. Once you decide you want to add a field to your archive that
> records resistance you need to do two things; you need to modify your
> database schema by adding a new database field and you need to assign a
> suitable WeeWX unit group to the new database field. In the case of
> resistance if we want to add a new field isoResistance to the archive we
> would modify the schema to include the new field (refer to Adding a new
> type to the database
> <http://weewx.com/docs/customizing.htm#add_archive_type>), so something
> like:
>
> import schemas.wview
> schema_with_resistance = schemas.wview.schema + [('isoResistance', 'REAL'
> )]
>
> Of course there also needs to be a change to weewx.conf [DataBindings] to
> ensure the relevant binding uses the new schema and if modifying an
> existing database the database needs to be updated to include the new field.
>
> We now need to assign a WeeWX unit group to isoResistance. This is done
> my augmenting weewx.units.obs_group_dict, something like:
>
> weewx.units.obs_group_dict['isoResistance'] = 'group_resistance'
>
> Provided your archive records contain a field isoResistance WeeWX will
> now store isoResistance data in the database, you can use isoResistance
> in report tags just as you can any other database field and you can convert
> between/display resistance values in ohms, kohms or Mohms.
>
> All of the above code can be placed in bin/user/extensions.py, or if, as
> with the Electricity example in the Customization Guide, you have a
> separate file containing a custom WeeWX service you can place the code in
> that file (this may be useful for keeping all of the related code in the
> one place).
>
> Hopefully this helps.
>
> Gary
>
> On Friday, 26 April 2019 04:27:12 UTC+10, wysiwyg wrote:
>>
>> I assume I can define the label and ratio this way:
>>
>> weewx.units.default_unit_label_dict['millamp'] = ' mA'
>> weewx.units.conversionDict['amp'] = {'milliamp': lambda x : x * 1000}
>> weewx.units.conversionDict['milliamp'] = {'amp': lambda x : x * 0.001}
>>
>>
>>
>> But I dont figure out how to "declare" milliamp 1st ?
>>
>>
--
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.