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.