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 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.
> 
> -- 
> 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.

-- 
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/19B03C71-EB79-482D-A190-E31C996753F9%40johnkline.com.

Reply via email to