Retrieving Level 0 transmission data (L0 TX) from a weather station
Fetching L0 TX messages
Level 0 transmission messages, L0 TX
, are collected and transmitted in near-real-time every hour to a designated account space. We can read and process these messages with pypromice
.
Generally, we read L0 TX
messages on an operational basis so only performing this on the most recent messages. However, there may be instances where we need to read older messages and/or reconstruct L0 TX
datasets.
We can do this with the tx
module in pypromice
.
Configuring pypromice
The pypromice
package should be used to fetch transmission messages, specifically the tx
module. Make a Python environment with the pypromice
package dependencies and clone the pypromice
repo from GitHub.
# Create environment with conda
conda create --name pypromice python=3.8
conda activate pypromice
conda install xarray pandas pathlib
pip install netCDF4
# Clone repository
git clone https://github.com/GEUS-Glaciology-and-Climate/pypromice.git
# Navigate to tx module
cd pypromice
# Local install the package
pip install .
Using pypromice to fetch L0 TX messages
You will need certain files with pieces of account information to fetch L0 TX
messages:
- The IMAP address and account name for where transmission messages are collected, stored in an
.ini
file (e.g.accounts.ini
) - The account password, also stored in an
.ini
file (e.g.credentials.ini
) - The directory of config
.toml
files for all the AWS’ that you wish to grabL0 TX
messages from payload_formats.csv
andpayload_types.csv
files for decoding messages, which are provided in thepypromice
repo- The message number you want to start grabbing messages from, in a file called something like
last_aws_uid.ini
. Message1 000 000
is around Spring 2021, for reference - The output directory (e.g.
out_dir
) for fetchedL0 TX
files
Run the script from the command line as follows, exchanging each variable input for your chosen file names and directories, and the transmission messages should begin to appear in the output directory:
get_l0tx -a accounts.ini -p credentials.ini -c config/ -f payload_formats.csv -t payload_types.csv -u last_aws_uid.ini -o out_dir/
The output files will be .txt
formatting, comma delimited, with one message per line.
Config .toml file formatting
A config .toml
file is needed to fetch messages from a station. Most of its contents concerns the L0
to L3
processing parameters. However, the modem
variable is needed for the L0 TX
retrieval because
- It defines the
imei
modem number, which is used to identifyL0 TX
messages from the specified station - It defines the active period that the modem was at the specified station (this is in cases where modems are swapped between stations, or stations are reconfigured)
The modem
variable is set as follows:
modem = [[imei,start,end], [imei,start,end], [imei,start,end]...]
Where each [imei,start,end]
entry designates the active period of a specific modem. In cases where the modem is active up until present, the end
variable can be disregarded. So a standard modem that has been active for the entire period of a station’s occupancy would look like this:
# Modem at active station example
modem = [['123456789', '2021-04-01 00:00:00']]
So modem 123456789
has been active from 2021-04-01 00:00:00
and remains active now, in this example. In cases where a modem has been switched out, we can add an entry into the modem
variable:
# Modem switch example
modem = [['1234567890', '2021-04-01 00:00:00', '2021-06-01 00:00:00'],
['2345678901', '2021-06-02 00:00:00']]
# Modem multiple switches example
modem = [['1234567890', '2021-04-01 00:00:00', '2021-06-01 00:00:00'],
['2345678901', '2021-06-02 00:00:00', '2022-03-15 00:00:00'],
['3456789012', '2022-03-16 00:00:00']
We can also use this variable to schedule breaks in the L0 TX
message transmissions, for instance, when we have a station visit and know that maintenance will produce invalid measurements:
# Station visit example
modem = [['1234567890', '2021-04-01 00:00:00', '2021-06-01 00:00:00'],
['1234567890', '2021-06-03 00:00:00']]
Config .toml file example
Here is an example config .toml
file from SDM
station, where modem 500534060529221
has been active since 2021-04-01 00:00:00
.
station_id = 'SDM'
logger_type = 'CR1000X'
number_of_booms = 2
nodata = ['-999', 'NAN'] # if one is a string, all must be strings
modem = [['500534060529221', '2021-04-01 00:00:00']]
['SDM_500534060529221_1.txt']
format = 'TX'
skiprows = 0
latitude = 63.15
longitude = 44.82
hygroclip_t_offset = 0
dsr_eng_coef = 14.75
usr_eng_coef = 14.44
dlr_eng_coef = 9.71
ulr_eng_coef = 8.76
tilt_y_factor = -1
columns = ['time','rec','p_l','p_u','t_l','t_u','rh_l','rh_u',
'wspd_l','wdir_l','wspd_u','wdir_u','dsr',
'usr','dlr','ulr','t_rad','z_boom_l','z_boom_u',
't_i_1','t_i_2','t_i_3','t_i_4','t_i_5','t_i_6','t_i_7',
't_i_8','t_i_9','t_i_10','t_i_11','tilt_x','tilt_y','rot',
'precip_l','precip_u','gps_time','gps_lat','gps_lon',
'gps_alt','gps_hdop','fan_dc_l','fan_dc_u','batt_v', 'p_i',
't_i','rh_i','wspd_i','wdir_i','msg_i']