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.schneid...@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 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.
>>> 
>>> -- 
>>> 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.
> 
> -- 
> 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/7cf18d09-e9e0-460f-b2a5-40a45f86c923%40googlegroups.com.

-- 
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/02067D37-DC6F-4748-85F6-394EDE6E1ACB%40johnkline.com.

Reply via email to