I am running version 5.1.0. I have edited the weewx.conf file and waiting 
for some rain events now.
Many thanks for your reply.

nedelja, 6. april 2025 ob 13:53:47 UTC+2 je oseba gjr80 napisala:

> Provided you are running WeeWX v4.2.0 or later you need to make the 
> following changes to the [StdWXCalculate] stanza in weewx.conf:
>
> 1. under [[Calculations]] add an entry as follows:
>         rain = prefer_hardware
> 2. add a new stanza [[Delta]] after the [StdWXCalculate] [[Calculations]] 
> stanza:
>     [[Delta]]
>         [[[rain]]]
>             input = dailyRain
>
> where dailyRain is the name of your cumulative rain field to be used to 
> calculate WeeWX field rain. If you have more than one cumulative rain 
> field use the one that resets least frequently, eg use day rain in 
> preference to hour rain, year rain in preference to month rain etc.
>
>  your [StdWXCalculate] stanza should look something like:
>
> [StdWXCalculate]
>     [[Calculations]]
>         ....
>         rain = prefer_hardware
>     [[Delta]]
>         [[[rain]]]
>             input = dailyRain
>
> After making the changes save weewx.conf and restart WeeWX. WeeWX should 
> now correctly populate the WeeWX field rain.
>
> Gary
> On Sunday, 6 April 2025 at 00:07:45 UTC+10 mihec wrote:
>
>> While looking for solution to my issue, I came around this post.
>> I am using fileparser to log data from my remote weather station 
>> (Ecowitt) and everything works fine except the rain. I have implemented my 
>> own pre-processing where I log the delta-rain but that doesn't work for 
>> some reason (might my timing issue in the scripts). I am logging the 
>> dailyRain and other values, too. Just in case. I don't know how to e.g. use 
>> the dailyRain in the NOAA report.
>>
>> As I read this: https://github.com/weewx/weewx/issues/491
>> I assume this could resolve it. Are there any more details on the use? 
>>
>> sreda, 6. maj 2020 ob 00:00:03 UTC+2 je oseba John Kline napisala:
>>
>>> If you have some experience programming, you might consider writing a 
>>> driver for your weather station (as opposed to hacking something just for 
>>> rain).
>>>
>>> See:
>>> http://www.weewx.com/docs/customizing.htm#porting
>>>
>>> On May 5, 2020, at 1:56 PM, Johann Schneider <[email protected]> 
>>> wrote:
>>>
>>> 
>>> Hello everybody!
>>> Thank you for your answers.
>>> Sorry for my difficult to understand question.
>>> So my weather station sends the measured values every 15 seconds.
>>> If it sends rain, I get the hourly rain value and the rain value for the 
>>> whole day. The rain value for the whole day is cumulative and is set to 0 
>>> at 00:00. The hourly rain value at the beginning of the rain is always 
>>> calculated for one hour.
>>> I thought I could simply import the data into weewx with "fileparser". 
>>> This also works with the other data. Just not with the rain values.
>>> John Kline's suggestion sounds great. That's how I would have imagined 
>>> it.
>>> How can I implement something for the rain value?
>>>
>>> kind regards
>>>
>>> Johnny
>>>
>>> Am Dienstag, 5. Mai 2020 03:19:43 UTC+2 schrieb John Kline:
>>>>
>>>> Hi Tom,
>>>>
>>>> Apologies in advance if I have misunderstood the question and have made 
>>>> you read what I believe you already know.
>>>>
>>>> If the question is can a driver be written to make use of rain emitted 
>>>> every 15 seconds and resetting every hour, I believe such a driver can 
>>>> easily be written.
>>>>
>>>> The RainWise CC3000 reports total rain and resets once a day.
>>>>
>>>> The delta is calculated with the following call in the cc3000 driver:
>>>> return weewx.wxformulas.calculate_rain(rain_total, last_rain)
>>>>
>>>> If the the rain total is less than the last rain total recorded, it is 
>>>> assumed that the counter reset.  On the CC3000, the reset is at midnight; 
>>>> but this would work just fine if the reset occurs every hour.
>>>>
>>>> I suspect other drivers do the same in this regard (convert total rain 
>>>> to incremental).
>>>>
>>>> On May 4, 2020, at 3:58 PM, Tom Keffer <[email protected]> wrote:
>>>>
>>>> 
>>>> Hello Johnny,
>>>>
>>>> Unfortunately, the data is summed up every few minutes and the values 
>>>>> no longer fit.
>>>>> For example, I have 0.15mm of rain in the last hour, then the value 
>>>>> after each loop adds up until the hour is over.
>>>>
>>>>
>>>> If I understand you correctly, your software emits the total rain 
>>>> measured so far in an hour, which then gets reset at the end of the hour.
>>>>
>>>> If that that is the case, then, no, that would not work well with 
>>>> weewx. In weewx, observation type 'rain' is the total amount of rain 
>>>> measured *for that packet*, and only for that packet. Typically, it is 
>>>> a very small number. This is explained in a little more detail in the 
>>>> section genLoopPackets 
>>>> <http://www.weewx.com/docs/customizing.htm#genLoopPackets> in the 
>>>> Customizing Guide.
>>>>
>>>> Or, maybe I am misunderstanding your problem.
>>>>
>>>> -tk
>>>>
>>>> On Mon, May 4, 2020 at 2:02 PM Johann Schneider <[email protected]> 
>>>> wrote:
>>>>
>>>>> Hello everybody!
>>>>> I have a little problem. Sorry for my very bad english. I come from 
>>>>> Germany and my English is not the best. My experience with weewx is also 
>>>>> very limited. I built a weather station 3 years ago. It consists of an 
>>>>> Arduino Mega and several sensors.
>>>>> Among other things, a rain sensor that reports 0.16mm of rain per 
>>>>> seesaw
>>>>> The values ​​are pushed to iobroker (similar to openhab) every 15 
>>>>> seconds. Here is an excerpt from my Arduino codes:
>>>>> /*
>>>>> Auswertung Regenmengensensor mit Regenwippe
>>>>> - Counter kann durch reed-Kontakt oder Hallsensor erfolgen
>>>>> - i2c eeprom AT24C256
>>>>> - i2c Adresse EEPROM (default: 0x50)
>>>>> */
>>>>> #include <Wire.h>
>>>>> //#include <I2C_EEPROM.h>
>>>>> #//include <avr/eeprom.h>
>>>>> /********************************************/
>>>>> /*                PIN-Section               */
>>>>> /*      Hier Sensor-Pins definieren         */
>>>>> /********************************************/
>>>>> //#define RAIN_COUNT_PIN 7
>>>>> #define RAIN_COUNT_PIN 30
>>>>> /********************************************/
>>>>> /*           Variablen-Section              */
>>>>> /********************************************/
>>>>> long lastSecond; // Original - The millis counter to see when a second 
>>>>> rolls by
>>>>> unsigned int minutesSinceLastReset; //Used to reset variables after 24 
>>>>> hours. Imp should tell us when it's midnight, this is backup.
>>>>> byte secondsRain; //When it hits 60, increase the current minute
>>>>> byte minutesRain; //Keeps track of where we are in various arrays of 
>>>>> data
>>>>>
>>>>> volatile float rainHour[60]; //60 floating numbers to keep track of 60 
>>>>> minutes of rain
>>>>> volatile unsigned long raintime, rainlast, raininterval, rain;
>>>>> volatile unsigned long last_micros1;
>>>>> long debouncing_time1 = 3; // in millis -> eleminiert evtl 
>>>>> REED-Kontakt-Prellen
>>>>> boolean RainTimeReset = false;
>>>>>
>>>>> //struct Configuration
>>>>> //{
>>>>> //  float regenTag;
>>>>> //  float regenStunde;
>>>>> //}eepconfig EEMEM;
>>>>>
>>>>> //AT24C256<0x50> eep; // Das EEProm auf der china üblichen RTC3231 
>>>>>
>>>>> /********************************************/
>>>>> /*             Interrupt-Section            */
>>>>> /********************************************/
>>>>> void rainIRQ(unsigned long now){
>>>>>   if((long)(micros() - last_micros1) >= debouncing_time1 * 1000) {
>>>>>     rainToday += 0.1618; // Each dump is 0.1618mm of water
>>>>>     rainHour[minutesRain] += 0.1618; // Increase this minute's amount 
>>>>> of rain
>>>>>   last_micros1 = micros();
>>>>>   }
>>>>> }
>>>>>
>>>>> /********************************************/
>>>>> /*              Setup-Section               */
>>>>> /********************************************/
>>>>> void setupRain(unsigned long now){
>>>>>   Serial.begin(115200);
>>>>>   Wire.begin();
>>>>> #ifdef DEBUG_WS
>>>>>   Serial.println("rain gauge online!");
>>>>> #endif
>>>>> // if(eep.ready()){
>>>>> //  eep.get(eepconfig.regenTag,rainToday);
>>>>> //#ifdef DEBUG_WS
>>>>> //  Serial.print("EEPROM rainToday : ");
>>>>> //  Serial.println(rainToday);
>>>>> //#endif
>>>>> //  }
>>>>> //  else
>>>>> //  {
>>>>>   midnightReset(now); //Reset rain totals
>>>>>   secondsRain = 0;
>>>>>   lastSecond = now;
>>>>> //  }
>>>>>   rainLastHour = 0;
>>>>>   pinMode(RAIN_COUNT_PIN, INPUT_PULLUP);
>>>>>   attachInterrupt(RAIN_COUNT_PIN, rainIRQ, RISING);
>>>>>
>>>>>   reportWeather();
>>>>> }
>>>>>
>>>>> /********************************************/
>>>>> /*               Loop-Section               */
>>>>> /********************************************/
>>>>> void loopRain(unsigned long now){
>>>>>   //Keep track of which minute it is
>>>>>   if(now - lastSecond >= 1000)
>>>>>   {
>>>>>     lastSecond += 1000;
>>>>>
>>>>>     reportWeather(); //Print the current readings. Takes 172ms.
>>>>>
>>>>>     //If we roll over 60 seconds then update the arrays for rain
>>>>>     if(++secondsRain > 59)
>>>>>     {
>>>>>       secondsRain = 0;
>>>>>
>>>>>       if(++minutesRain > 59) minutesRain = 0;
>>>>>       
>>>>>       rainHour[minutesRain] = 0; //Zero out this minute's rainfall 
>>>>> amount
>>>>>
>>>>>       minutesSinceLastReset++; //It's been another minute since last 
>>>>> night's midnight reset
>>>>>     }
>>>>>   }
>>>>>
>>>>>     if((TimeStunde == 0) && (! RainTimeReset))
>>>>>     {
>>>>>       midnightReset(now); //Reset a bunch of variables like rain and 
>>>>> daily total rain
>>>>>       RainTimeReset = true;
>>>>>     }
>>>>>     else if((TimeStunde != 0) && (RainTimeReset))
>>>>>     {
>>>>>       RainTimeReset = false;
>>>>>     }
>>>>>
>>>>>   //If we go for more than 24 hours without a midnight reset then 
>>>>> force a reset
>>>>>   //24 hours * 60 mins/hr = 1,440 minutes + 10 extra minutes. We hope 
>>>>> that Imp is doing it.
>>>>>   if(minutesSinceLastReset > (1440 + 10))
>>>>>   {
>>>>>     midnightReset(now); //Reset a bunch of variables like rain and 
>>>>> daily total rain
>>>>>   }
>>>>> }
>>>>>
>>>>> //When the imp tells us it's midnight, reset the total amount of rain 
>>>>> and gusts
>>>>> void midnightReset(unsigned long now)
>>>>> {
>>>>>   rainToday = 0; //Reset daily amount of rain
>>>>> //  if(eep.ready()){
>>>>> //      eep.put(eepconfig.regenTag,rainToday);
>>>>> //  }
>>>>>   minutesRain = 0; //Reset minute tracker
>>>>>   secondsRain = 0;
>>>>>   lastSecond = now; //Reset variable used to track minutes
>>>>>
>>>>>   minutesSinceLastReset = 0; //Zero out the backup midnight reset 
>>>>> variable
>>>>> }
>>>>>
>>>>> void calcWeather()
>>>>> {
>>>>>   rainLastHour = 0;
>>>>>   for(int i = 0 ; i < 60 ; i++)
>>>>>     rainLastHour += rainHour[i];
>>>>> }
>>>>>
>>>>>
>>>>> void reportWeather()
>>>>> {
>>>>>   calcWeather(); //Go calc all the various sensors
>>>>> #ifdef INFO_WS
>>>>>   Serial.print("rainLastHour : ");
>>>>>   Serial.print(rainLastHour, 2);
>>>>>   Serial.print(" , rainToday : ");
>>>>>   Serial.println(rainToday, 2);
>>>>> #endif
>>>>> //  if(eep.ready()){
>>>>> //  eep.put(eepconfig.regenStunde,rainLastHour); //Nicht nutzen
>>>>> //  eep.put(eepconfig.regenTag,rainToday);
>>>>> //  }
>>>>> }
>>>>>
>>>>>
>>>>> The rain data are given every 15 seconds.
>>>>> I get the values ​​for rain of the last hour and the total amount 
>>>>> since midnight.
>>>>> Now I have tried to collect the data using fileparse.
>>>>> Iobroker writes the data to a file every minute.
>>>>> See example:
>>>>> outTemp=43.8
>>>>> outHumidity=74.7
>>>>> pressure=29.896
>>>>> rain=0.00
>>>>> windSpeed=0.8
>>>>>
>>>>> Fileparse evaluates the data and pushes it onto weewx.
>>>>> Unfortunately, the data is summed up every few minutes and the values 
>>>>> ​​no longer fit.
>>>>> For example, I have 0.15mm of rain in the last hour, then the value 
>>>>> after each loop adds up until the hour is over.
>>>>> /*
>>>>> Auswertung Regenmengensensor mit Regenwippe
>>>>> - Counter kann durch reed-Kontakt oder Hallsensor erfolgen
>>>>> - i2c eeprom AT24C256
>>>>> - i2c Adresse EEPROM (default: 0x50)
>>>>> */
>>>>> #include <Wire.h>
>>>>> //#include <I2C_EEPROM.h>
>>>>> #//include <avr/eeprom.h>
>>>>> /********************************************/
>>>>> /*                PIN-Section               */
>>>>> /*      Hier Sensor-Pins definieren         */
>>>>> /********************************************/
>>>>> //#define RAIN_COUNT_PIN 7
>>>>> #define RAIN_COUNT_PIN 30
>>>>> /********************************************/
>>>>> /*           Variablen-Section              */
>>>>> /********************************************/
>>>>> long lastSecond; // Original - The millis counter to see when a second 
>>>>> rolls by
>>>>> unsigned int minutesSinceLastReset; //Used to reset variables after 24 
>>>>> hours. Imp should tell us when it's midnight, this is backup.
>>>>> byte secondsRain; //When it hits 60, increase the current minute
>>>>> byte minutesRain; //Keeps track of where we are in various arrays of 
>>>>> data
>>>>>
>>>>> volatile float rainHour[60]; //60 floating numbers to keep track of 60 
>>>>> minutes of rain
>>>>> volatile unsigned long raintime, rainlast, raininterval, rain;
>>>>> volatile unsigned long last_micros1;
>>>>> long debouncing_time1 = 3; // in millis -> eleminiert evtl 
>>>>> REED-Kontakt-Prellen
>>>>> boolean RainTimeReset = false;
>>>>>
>>>>> //struct Configuration
>>>>> //{
>>>>> //  float regenTag;
>>>>> //  float regenStunde;
>>>>> //}eepconfig EEMEM;
>>>>>
>>>>> //AT24C256<0x50> eep; // Das EEProm auf der china üblichen RTC3231 
>>>>>
>>>>> /********************************************/
>>>>> /*             Interrupt-Section            */
>>>>> /********************************************/
>>>>> void rainIRQ(unsigned long now){
>>>>>   if((long)(micros() - last_micros1) >= debouncing_time1 * 1000) {
>>>>>     rainToday += 0.1618; // Each dump is 0.1618mm of water
>>>>>     rainHour[minutesRain] += 0.1618; // Increase this minute's amount 
>>>>> of rain
>>>>>   last_micros1 = micros();
>>>>>   }
>>>>> }
>>>>>
>>>>> /********************************************/
>>>>> /*              Setup-Section               */
>>>>> /********************************************/
>>>>> void setupRain(unsigned long now){
>>>>>   Serial.begin(115200);
>>>>>   Wire.begin();
>>>>> #ifdef DEBUG_WS
>>>>>   Serial.println("rain gauge online!");
>>>>> #endif
>>>>> // if(eep.ready()){
>>>>> //  eep.get(eepconfig.regenTag,rainToday);
>>>>> //#ifdef DEBUG_WS
>>>>> //  Serial.print("EEPROM rainToday : ");
>>>>> //  Serial.println(rainToday);
>>>>> //#endif
>>>>> //  }
>>>>> //  else
>>>>> //  {
>>>>>   midnightReset(now); //Reset rain totals
>>>>>   secondsRain = 0;
>>>>>   lastSecond = now;
>>>>> //  }
>>>>>   rainLastHour = 0;
>>>>>   pinMode(RAIN_COUNT_PIN, INPUT_PULLUP);
>>>>>   attachInterrupt(RAIN_COUNT_PIN, rainIRQ, RISING);
>>>>>
>>>>>   reportWeather();
>>>>> }
>>>>>
>>>>> /********************************************/
>>>>> /*               Loop-Section               */
>>>>> /********************************************/
>>>>> void loopRain(unsigned long now){
>>>>>   //Keep track of which minute it is
>>>>>   if(now - lastSecond >= 1000)
>>>>>   {
>>>>>     lastSecond += 1000;
>>>>>
>>>>>     reportWeather(); //Print the current readings. Takes 172ms.
>>>>>
>>>>>     //If we roll over 60 seconds then update the arrays for rain
>>>>>     if(++secondsRain > 59)
>>>>>     {
>>>>>       secondsRain = 0;
>>>>>
>>>>>       if(++minutesRain > 59) minutesRain = 0;
>>>>>       
>>>>>       rainHour[minutesRain] = 0; //Zero out this minute's rainfall 
>>>>> amount
>>>>>
>>>>>       minutesSinceLastReset++; //It's been another minute since last 
>>>>> night's midnight reset
>>>>>     }
>>>>>   }
>>>>>
>>>>>     if((TimeStunde == 0) && (! RainTimeReset))
>>>>>     {
>>>>>       midnightReset(now); //Reset a bunch of variables like rain and 
>>>>> daily total rain
>>>>>       RainTimeReset = true;
>>>>>     }
>>>>>     else if((TimeStunde != 0) && (RainTimeReset))
>>>>>     {
>>>>>       RainTimeReset = false;
>>>>>     }
>>>>>
>>>>>   //If we go for more than 24 hours without a midnight reset then 
>>>>> force a reset
>>>>>   //24 hours * 60 mins/hr = 1,440 minutes + 10 extra minutes. We hope 
>>>>> that Imp is doing it.
>>>>>   if(minutesSinceLastReset > (1440 + 10))
>>>>>   {
>>>>>     midnightReset(now); //Reset a bunch of variables like rain and 
>>>>> daily total rain
>>>>>   }
>>>>> }
>>>>>
>>>>> //When the imp tells us it's midnight, reset the total amount of rain 
>>>>> and gusts
>>>>> void midnightReset(unsigned long now)
>>>>> {
>>>>>   rainToday = 0; //Reset daily amount of rain
>>>>> //  if(eep.ready()){
>>>>> //      eep.put(eepconfig.regenTag,rainToday);
>>>>> //  }
>>>>>   minutesRain = 0; //Reset minute tracker
>>>>>   secondsRain = 0;
>>>>>   lastSecond = now; //Reset variable used to track minutes
>>>>>
>>>>>   minutesSinceLastReset = 0; //Zero out the backup midnight reset 
>>>>> variable
>>>>> }
>>>>>
>>>>> void calcWeather()
>>>>> {
>>>>>   rainLastHour = 0;
>>>>>   for(int i = 0 ; i < 60 ; i++)
>>>>>     rainLastHour += rainHour[i];
>>>>> }
>>>>>
>>>>>
>>>>> void reportWeather()
>>>>> {
>>>>>   calcWeather(); //Go calc all the various sensors
>>>>> #ifdef INFO_WS
>>>>>   Serial.print("rainLastHour : ");
>>>>>   Serial.print(rainLastHour, 2);
>>>>>   Serial.print(" , rainToday : ");
>>>>>   Serial.println(rainToday, 2);
>>>>> #endif
>>>>> //  if(eep.ready()){
>>>>> //  eep.put(eepconfig.regenStunde,rainLastHour); //Nicht nutzen
>>>>> //  eep.put(eepconfig.regenTag,rainToday);
>>>>> //  }
>>>>> }
>>>>>
>>>>>
>>>>> Is there a solution?
>>>>>
>>>>> greeting
>>>>> Johnnny
>>>>>
>>>>> -- 
>>>>> 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].
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/weewx-user/a9156731-4c86-4498-9546-0481365ff600%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/weewx-user/a9156731-4c86-4498-9546-0481365ff600%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>>>> 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].
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/weewx-user/CAPq0zEASnBsOhS3pMcsP-h0u1G-T8eo9cTrOrvvE%2BU1Ngq5WCA%40mail.gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/weewx-user/CAPq0zEASnBsOhS3pMcsP-h0u1G-T8eo9cTrOrvvE%2BU1Ngq5WCA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> -- 
>>> 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].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/weewx-user/7cf18d09-e9e0-460f-b2a5-40a45f86c923%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/weewx-user/7cf18d09-e9e0-460f-b2a5-40a45f86c923%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>>

-- 
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].
To view this discussion visit 
https://groups.google.com/d/msgid/weewx-user/8fe34100-4313-420c-9626-b00db577a511n%40googlegroups.com.

Reply via email to