We have set up a new weather station with two redundant rainfall measurements which are both reading unusually high values (in the range of hundreds to thousands of mm per day) and we can't seem to figure out how if this is a software or hardware issue. Any pointers on how to find out where the error lies would be highly appreciated.
The measurement setup is as follows:
- We log data on a CR1000X (logger programme is provided below) where we connected a ClimaVue50 (on C5) weather station and an additional heated 52202-L rain gauge (on C7). Both are scanned every minute and data is saved in 1-minute intervals. Both the weather station and rain gauge are mounted on poles that do allow for some vibration (as we see from the tilt sensor output) but not so much as that the tipping bucket would tip by itself.
- Additionally, there are four more tipping buckets (C1 to C4) and pressure sensors (1H to 4H) connected. These are scanned every second and data is saved in 10-second intervals.
- Data is transmitted via FTP in a SlowSequence call every hour.
What we observe:
- Both the ClimaVue and the rain gauge measurements are considerably higher than realistic rainfall data would suggest. E.g. for the entire month of February 2022, public weather service data recorded a total of 31.1 mm of rain at a station about 8 km from our site. Our measurements totalled 5622 mm and 6984 mm for the ClimaVue and the rain gauge, respectively.
- Our measurements are not noisy, i.e. we only record rain during rainfall events (and not during windy conditions without actual rainfall). The general pattern of the rainfall data is also in good agreement with the official weather service data; just scaled up by approx. two orders of magnitude without showing a clear constant scaling factor.
- It appears strange that both rain measurements show the same erroneous behaviour. They do use different measurement principles and the data from the ClimaVue comes out as an SDI-12 string that gets parsed by the logger and we are not applying any corrections to the SDI-12 string.
What we tried:
- We tried to tighten the pole to reduce potential vibrations but that didn't seem to have any effect. Also, the ClimaVue and the rain gauge use two different measurement principles. While I would expect that the tipping bucket rain gauge could be affected by strong vibrations, I would expect the ClimaVue not to be affected by vibrations.
- We initially scanned the weather data also at 1-second intervals by mistake and then changed it to 1-minute intervals after we noticed. The ClimaVue should, to our understanding, be ok with scan intervals >10 seconds.
What we wonder:
- It looks like a software or wiring issue that affects both rainfall measurements. But since the ClimaVue is interfaced by SDI-12 and the rain gauge via a pulse counter C-port, it seems odd that they show similar errors.
- Are we mixing up something between our two different scan and data table saving intervals? Are we scanning data at too high frequencies (1 second and 10 seconds)?
- Did we wrongly configure our C-ports? (The other 4 tipping bucket measurements on C1 to C4 are working fine, however).
As mentioned above, here I copy the current logger program that is running on the CR1000X (with some sensitive FTP config data removed).
' This program was written to collect data on a CR1000X data logger with the ' following sensors attached: ' - 1x Campbell ClimaVue50 weather station (measuring air temperature, ' barometric pressure, lightning average distance, lightning strike count, ' precipitation, relative humidity, solar radiation, tilt, wind direction, ' and wind speed) ' -> SDI-12 address: 9 ' C5 SDI-12 ' GND Shield/Signal ground ' 12V Power ' G Power ground ' - 4x tipping bucket counter as part of the combined outflow measurement ' system (consisting of tipping bucket + Thomson weir) ' C1, C2, C3, C4 ' GND Shield/Signal ground ' - 4x Keller relative pressure sensor as part of the combined outflow ' measurement system (consisting of tipping bucket + Thomson weir) ' 1H, 2H, 3H, 4H ' -> L channels are pulled to G ' 12V Power ' - 1x R.M. Young 52202 heated rain gauge ' C7 Pulse input ' 5V Signal power ' GND Shield/Signal ground ' - additional measurements of logger battery voltage and panel temperature ' Data is written into the following data files: ' - outflow: contains data from the outflow measurements only ' on the determined logging interval ' - weather: contains selected data from the weather station only ' on the determined logging interval ' ==================================================== ' Definitions ' ==================================================== ' Constants ' ---------------------------------------------------- ' Scan intervals (How often should a measurements be taken?) Const SCAN_INTERVAL_OUTFLOW_SEC = 1 'data logging interval for outflow data (in seconds) Const SCAN_INTERVAL_WEATHER_MIN = 1 'data logging interval for weather data (in minutes) ' Log intervals (How often should a measurements be recorded in a datafile?) Const LOG_INTERVAL_OUTFLOW_SEC = 10 'data logging interval for outflow data (in seconds) Const LOG_INTERVAL_WEATHER_MIN = 1 'data logging interval for weather data (in minutes) ' Upload interval (How often should data be uploaded to the FTP server?) Const FTP_INTERVAL_UPLOAD_MIN = 60 'FTP data sending interval (in minutes) ' FTP server authentification parameters Const FTP_SERVER = "..." Const FTP_USER = "..." Const FTP_PW = "..." ' Variables ' ---------------------------------------------------- Public volt_batt 'Battery voltage Public temp_panel 'Internal panel temperature Public rain_rg 'Heated rain gauge precipitation Public grv_tip 'Tipping bucket discharge gravel roof Public ext_tip 'Tipping bucket discharge extensive roof Public wet_tip 'Tipping bucket discharge wetland roof Public int_tip 'Tipping bucket discharge intensive roof Public grv_pres 'Thomson weir discharge gravel roof Public ext_pres 'Thomson weir discharge extensive roof Public wet_pres 'Thomson weir discharge wetland roof Public int_pres 'Thomson weir discharge intensive roof Public climavue_data(14) 'ClimaVue SDI-12 output Dim count_outflow 'counter for number of measurements per outflow log interval Public n_outflow 'total number of measurements per outflow log interval Dim count_weather 'counter for number of measurements per outflow log interval Public n_weather 'total number of measurements per outflow log interval Public FTP_outflow_status 'Status of FTP connetion Public FTP_weather_status 'Status of FTP connetion ' Aliases for ClimaVue output ' ---------------------------------------------------- Alias climavue_data(1) = flux_density Alias climavue_data(2) = rain_cv Alias climavue_data(3) = strikes_n Alias climavue_data(4) = strikes_dist Alias climavue_data(5) = wind_speed Alias climavue_data(6) = wind_dir Alias climavue_data(7) = gust_speed Alias climavue_data(8) = temp_air Alias climavue_data(9) = press_vapor Alias climavue_data(10) = press_atm Alias climavue_data(11) = rh Alias climavue_data(12) = temp_rh Alias climavue_data(13) = tilt_x Alias climavue_data(14) = tilt_y ' Units ' ---------------------------------------------------- Units volt_batt = V Units temp_panel = °C Units rain_rg = n Units grv_tip = n Units ext_tip = n Units wet_tip = n Units int_tip = n Units grv_pres = mV Units ext_pres = mV Units wet_pres = mV Units int_pres = mV Units flux_density = W_m2 Units rain_cv = mm Units strikes_n = n Units strikes_dist = km Units wind_speed = m_s Units wind_dir = ° Units gust_speed = m_s Units temp_air = °C Units press_vapor = kPa Units press_atm = kPa Units rh = % Units temp_rh = °C Units tilt_x = ° Units tilt_y = ° Units n_outflow = n Units n_weather = n ' ==================================================== ' Data tables ' ==================================================== ' Data Table (outflow) ' ---------------------------------------------------- DataTable(outflow,True,-1) DataInterval(0,LOG_INTERVAL_OUTFLOW_SEC,Sec,0) Sample(1,n_outflow,UINT4) Totalize(1,grv_tip,FP2,False) Totalize(1,ext_tip,FP2,False) Totalize(1,wet_tip,FP2,False) Totalize(1,int_tip,FP2,False) Average(1,grv_pres,FP2,False) Average(1,ext_pres,FP2,False) Average(1,wet_pres,FP2,False) Average(1,int_pres,FP2,False) Average(1,wet_level,FP2,False) EndTable ' Data Table (weather) ' ---------------------------------------------------- DataTable(weather,True,-1) DataInterval(0,LOG_INTERVAL_WEATHER_MIN,Min,0) Sample(1,n_weather,UINT4) Sample(1,volt_batt,FP2) Sample(1,temp_panel,FP2) Totalize(1,rain_rg,FP2,False) Totalize(1,rain_cv,FP2,FALSE) Average(1,temp_air,FP2,False) Average(1,rh,FP2,False) Average(1,temp_rh,FP2,False) Average(1,press_atm,FP2,False) Average(1,press_vapor,FP2,False) Average(1,flux_density,FP2,False) Average(1,wind_speed,FP2,False) Average(1,wind_dir,FP2,False) Maximum(1,gust_speed,FP2,False,True) Totalize(1,strikes_n,FP2,False) Minimum(1,strikes_dist,FP2,False,True) Sample(1,tilt_x,FP2) Sample(1,tilt_y,FP2) EndTable ' ==================================================== ' Logger program ' ==================================================== ' Main Program ' ---------------------------------------------------- BeginProg Scan(SCAN_INTERVAL_OUTFLOW_SEC,Sec,1,0) ' Outflow measurements '----------------------------------- 'Count number of measurements per log interval count_outflow = count_outflow + 1 n_outflow = count_outflow 'Read tipping bucket outflow counters PulseCount(grv_tip,1,C1,2,0,1,0) PulseCount(ext_tip,1,C2,2,0,1,0) PulseCount(wet_tip,1,C3,2,0,1,0) PulseCount(int_tip,1,C4,2,0,1,0) 'Read pressure sensor voltage VoltDiff(grv_pres,1,mV1000,1,False,0,50,1.0,0) VoltDiff(ext_pres,1,mV1000,2,False,0,50,1.0,0) VoltDiff(wet_pres,1,mV1000,3,False,0,50,1.0,0) VoltDiff(int_pres,1,mV1000,4,False,0,50,1.0,0) If TimeIntoInterval(0,LOG_INTERVAL_OUTFLOW_SEC,Sec) Then 'reset counters count_outflow = 0 EndIf ' Weather measurements '----------------------------------- If TimeIntoInterval(0,SCAN_INTERVAL_WEATHER_MIN,Min) Then 'Count number of measurements per log interval count_weather = count_weather + 1 n_weather = count_weather 'Default datalogger measurements Battery(volt_batt) PanelTemp(temp_panel,50) 'Heated raingauge PulseCount(rain_rg,1,C7,2,0,1,0) 'Get data from ClimaVUE 50 Compact Digital Weather Sensor '-> The R7! command needs to be sent with >10s scan interval. SDI12Recorder(climavue_data(),C5,9,"R7!",1,0) 'Convert fractional relative humidity into percent relative humidity rh = rh*100 If TimeIntoInterval(0,LOG_INTERVAL_WEATHER_MIN,Min) Then 'reset counters count_weather = 0 EndIf EndIf 'Call data tables CallTable outflow CallTable weather NextScan SlowSequence Do Delay(1,10,Sec) FTP_outflow_status = FTPClient(FTP_SERVER,FTP_USER,FTP_PW,"outflow","...",9,0,FTP_INTERVAL_UPLOAD_MIN,Min,13) FTP_weather_status = FTPClient(FTP_SERVER,FTP_USER,FTP_PW,"weather","...",9,0,FTP_INTERVAL_UPLOAD_MIN,Min,13) Loop EndSequence EndProg
there is a compilation error, the declaration of the variable wet_level is missing, but for the problem encountered it is not important.
a particular note is in the fact that the reading of the rain gauge has the multiplier of 1 therefore it records pulses and not rain level (in mm or inches).
Another note is the different scan between the readings, under an "if iftime", and the "calltables", which are always performed instead. For example, if the reading is performed every minute and the call for the historical table every 5 seconds, the total will be 12 times greater, while the averages will not have this problem.
Have you tried with a known amount of water?
Smile
This post is under review.