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.
