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.

Reply via email to