Some answers/guidance below.

Gary

On Monday, 18 September 2023 at 00:55:03 UTC+10 remy.l...@gmail.com wrote:

However, I have a new question as I haven't been able to understand exactly 
the weewx documentation on this subject. I clearly saw that the case of 
adding electricity consumption to the database had been processed but I did 
not understand the entire explanation given.

To put it simply, I retrieve data in CSV format which I integrate at 
regular intervals into the weewx database using wee_import.py (my weather 
station does not have a USB output and the data is retrieved from AWEKAS).
To the weather data, I would have liked to add for the period considered:
- CPU load data (unitless)
- The total and used memory of the Raspberry (kB unit)
- The total and used capacity of the SSD (Gb unit)
- Power consumption (Watt unit)
- Water consumption (unit per liter)

I created the fields I needed in the existing WeeWX database without 
problem with wee_database

What I couldn't do:
- Create a new base group (for example group_memory with the new Kb and Gb 
units). What file exactly should be modified or created and where is it 
located?

Compared to the documentation, I would tend to make a file 
"/usr/share/weewx/user/memory.py" with in it:









*import weewx.unitsweewx.units.obs_group_dict['rocketForce'] = 
'group_memory'weewx.units.USUnits['group_memory'] = 
'byte'weewx.units.MetricUnits['group_memory'] = 
'byte'weewx.units.MetricWXUnits['group_memory'] = 
'byte'weewx.units.default_unit_format_dict['byte'] = 
'%.1f'weewx.units.default_unit_label_dict['byte'] = ' byte'*

Is my approach correct? How to create the units kB and gB?


Not quite. First up, no need for memory.py, just use 
/usr/share/weewx/user/extensions.py, that is what is is meant for. Next, 
WeeWX already has a unit named byte which is used with unit group group_data. 
You can certainly define your own unit group group_memory but why, it just 
adds the possibility for confusion. The one thing WeeWX does not have is 
unit names representing kilobyte and gigabyte (and megabyte), these you 
will need to define or otherwise handle yourself. To add units kilobyte, 
megabyte and gigabyte you need to define the unit conversion functions for 
each unit as well as specifying a number format and unit label for each 
unit. We generally specify unit conversion functions using lambda 
functions, in the case unit kilobyte we need to specify how to convert from 
kilobyte to each of the other units that may be used within unit group 
group_data; ie kilobyte to bit, kilobyte to byte, kilobyte to megabyte and 
kilobyte to gigabyte. We might do this as follows:

weewx.units.conversionDict['kilobyte'] = {'bit': lambda x: x * 8192.0,
                                          'byte': lambda x: x * 1024.0,
                                          'megabyte': lambda x: x / 1024.0,
                                          'gigabyte': lambda x: x / 
1048576.0}

Likewise for each of the other group_data units. To define a unit label and 
number format for the kilobyte unit you would use something like:

weewx.units.default_unit_label_dict['kilobyte'] = ' kB'
weewx.units.default_unit_format_dict['kilobyte'] = '%.1f'

Again, likewise for the other units.

Overall you would end up with something like:

weewx.units.conversionDict['bit'] = {'byte': lambda x: x / 8.0,
                                     'kilobyte': lambda x: x / 8192.0,
                                     'megabyte': lambda x: x / 8388608.0,
                                     'gigabyte': lambda x: x / 8589934592.0}
weewx.units.conversionDict['byte'] = {'bit': lambda x: x * 8.0,
                                      'kilobyte': lambda x: x / 1024.0,
                                      'megabyte': lambda x: x / 1048576.0,
                                      'gigabyte': lambda x: x / 1073741824.0
}
weewx.units.conversionDict['kilobyte'] = {'bit': lambda x: x * 8192.0,
                                          'byte': lambda x: x * 1024.0,
                                          'megabyte': lambda x: x / 1024.0,
                                          'gigabyte': lambda x: x / 
1048576.0}
weewx.units.conversionDict['megabyte'] = {'bit': lambda x: x * 8388608.0,
                                          'byte': lambda x: x * 1048576.0,
                                          'kilobyte': lambda x: x * 1024.0,
                                          'gigabyte': lambda x: x / 1024.0}
weewx.units.conversionDict['gigabyte'] = {'bit': lambda x: x * 8589934592.0,
                                          'byte': lambda x: x 
* 1073741824.0,
                                          'kilobyte': lambda x: x 
* 1048576.0,
                                          'megabyte': lambda x: x * 1024.0}
weewx.units.default_unit_label_dict['kilobyte'] = ' kB'
weewx.units.default_unit_format_dict['kilobyte'] = '%.1f'
weewx.units.default_unit_label_dict['megabyte'] = ' MB'
weewx.units.default_unit_format_dict['megabyte'] = '%.1f'
weewx.units.default_unit_label_dict['gigabyte'] = ' GB'
weewx.units.default_unit_format_dict['gigabyte'] = '%.1f'

Note the above uses the binary interpretation of a kilobyte; ie 1kB = 1024 
bytes, 1MB = 1024kB and 1GB = 1024MB. If you wish to use the Metric 
interpretation of a kilobyte; ie 1kB = 1000 bytes, 1MB = 1000kB and 1GB = 
1000MB some of the above conversion factors will need to be changed 
accordingly.

- For data that is unitless such as charge1, charge5 and charge15 (assuming 
that the field names of the weewx.sdb database are charge1,charge5,charge15 
and that the names of the header fields of the CSV file to import are 
charge1, charge5 and charge15), will the import be done by putting in the 
CSV import configuration file for wee_import.py:
source = CSV

[CSV]
....
    [[FieldMap]]
        dateTime    = dateTime, unix_epoch
....
        charge1    = charge1
        charge5    = charge5
        charge15   = charge15


WeeWX has unit group group_count and unit count to handle unitless fields. 
All you need to do is assign your fields to group_count in the same way you 
assigned your wet bulb field to group_temperature.
 

-- 
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/3ce9b584-abaf-4506-82a5-b00011ff3d92n%40googlegroups.com.

Reply via email to