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 <javascript:>> 
> 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 
> <javascript:>> 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 <javascript:>.
>> 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 <javascript:>.
> 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+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.

Reply via email to