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 <johann.s...@gmail.com> 
> 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 <tke...@gmail.com> 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 <johann.s...@gmail.com> 
>> 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 weewx...@googlegroups.com.
>>> 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 weewx...@googlegroups.com.
>> 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 weewx-user+...@googlegroups.com.
> 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 weewx-user+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/weewx-user/f70d8dc8-6cc7-49ef-af9a-5e0240401aaen%40googlegroups.com.

Reply via email to