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.