Meteo stanica v1

Tvoříte zajímavý projekt? Pochlubte se s ním.
Pravidla fóra
Vkládejte prosím jen HOTOVÉ projekty, které chcete představit ostatním.
ArduXPP
Příspěvky: 361
Registrován: 14 pro 2017, 19:31
Reputation: 0
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od ArduXPP » 22 led 2020, 09:48

Já ale nepsal o html, jen sem myslel, ale nečetl podmínky ( službu nevyužívám). Tak jsem myslel, že každý záznam to bude jako 1 event. Teplota 1 event, vlhkost 1 event atd.

sam99
Příspěvky: 11
Registrován: 07 lis 2019, 16:04
Reputation: 0

Re: Meteo stanica v1

Příspěvek od sam99 » 23 led 2020, 19:44

NO zjevně čteš jen co se ti hodí . Takže pro ostatní :

V podmínkách WeatherCloud je , že když jsi zdarma, tak se ti zapíší data jen každých 10 minut. Není tam uvedeno, že nesmíš poslat data častěji. není tam žádný postih, pokud pošleš data častěji.
Není tam napsáno, že smíš poslat data jen 1 x za 10 minut. ( 6 x za hodinu , 144 x za den )

V podmínkách Wundergroundu je de faco to samé, jen interval je minuta.

Rozdíl je, že pokud u Weathercloudu pošleš data častěji server zkurví .htaccess a výsledkem je zablokování IP adresy.
u Wundergroundu si posílej datat třeba každých 10 mikrosec , zapíší se jen každou minutu, ale nic se nestane.

Takže žádné pravidla jsem neporušil a jak mi dnes z WeatherCloudu napsali - tak se omlouvají, ale chystají novou verzi serveru, kde tato chyba bude ošetřena.

tak a tím to považuji za ukončené.
Já když nevím, tak se ptám, nedělám machra

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od pavel1tu » 24 led 2020, 06:07

sam99 píše:
23 led 2020, 19:44
NO zjevně čteš jen co se ti hodí . Takže pro ostatní :

V podmínkách WeatherCloud je , že když jsi zdarma, tak se ti zapíší data jen každých 10 minut. Není tam uvedeno, že nesmíš poslat data častěji. není tam žádný postih, pokud pošleš data častěji.
Není tam napsáno, že smíš poslat data jen 1 x za 10 minut. ( 6 x za hodinu , 144 x za den )

V podmínkách Wundergroundu je de faco to samé, jen interval je minuta.

Rozdíl je, že pokud u Weathercloudu pošleš data častěji server zkurví .htaccess a výsledkem je zablokování IP adresy.
u Wundergroundu si posílej datat třeba každých 10 mikrosec , zapíší se jen každou minutu, ale nic se nestane.

Takže žádné pravidla jsem neporušil a jak mi dnes z WeatherCloudu napsali - tak se omlouvají, ale chystají novou verzi serveru, kde tato chyba bude ošetřena.

tak a tím to považuji za ukončené.
Já když nevím, tak se ptám, nedělám machra
Nesouhlasím,
musí tam mít ochranu, aby to lidi neposílali v nějakém cyklu vyčítání Arduina.
Lidem s meteostanicemi stavím WWW servery na Raspberry a to má slušný výkon,
při testování už při 250 přístupech najednou pro zápis do SQL se začala prodlužovat doba zápisu v rozmezí 500-1000ms

Než nějakou IP omezovat, tak ji bloknou.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od dzooky » 28 led 2020, 15:40

pavel1tu píše:
24 led 2020, 06:07
Nesouhlasím,
musí tam mít ochranu, aby to lidi neposílali v nějakém cyklu vyčítání Arduina.
Lidem s meteostanicemi stavím WWW servery na Raspberry a to má slušný výkon,
při testování už při 250 přístupech najednou pro zápis do SQL se začala prodlužovat doba zápisu v rozmezí 500-1000ms

Než nějakou IP omezovat, tak ji bloknou.
ja zase suhlasim s pavel1tu :D
A potom sa zase cudujeme ze v navode pre mikrvlnky je napisane, ze sa do nej nema davat macka.
A preco no lebo nekto ju tam dal a nebolo to v navode a potom z toho niekto v usa vysudi pekny balik.
A tu je to rovnako, uz netreba ani hladat ludi a par expertov zhodi stranku v domneni ze updatuju data urobia DDOS utok :)
Obrázek

sam99
Příspěvky: 11
Registrován: 07 lis 2019, 16:04
Reputation: 0

Re: Meteo stanica v1

Příspěvek od sam99 » 28 led 2020, 21:43

ad. 1 . takže ještě jednou - Weathercloud stejně jak I_pocasi či Wunderground namjí v podmínkách žádný trest, za překročení cyklu pro zápis dat.
ad. 2. Pokud si někdo namlouvá, že tomu tak je, pak mu doporučuji víc komunikovat se suportem daného Webu.
ad. 3. samozřejmě, pokud chceš příjmat data z více stanic a častěji musíš mít výkonný server.
ad. 4. Weathercloud nemá zapnutou žádnou službu na blokování IP adresy z důvodu poslání více dat než 1 x za 10 minut.
ad. 5. IP adresa je programově zablokována - pokud se vaše zařízení po odeslání dat neodpojí a blokuje port servru.

To že někdo ? " Nesouhlasím,musí tam mít ochranu, aby to lidi neposílali v nějakém cyklu vyčítání Arduina." je naprosto irelevantní. Nesouhlasit můžeš, ale ............. to je asi tak vše.

a to že někdo čte bulvár a namlouvá si jak za kočku v mikrovlnce někdo dostal 15 milionů ? No to už patří do Pezinku do léčebne,

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od pavel1tu » 02 úno 2020, 17:01

Já to hodím sem, někdo kdo má snímače větru, směru větru, srážek, komplet koupený jako ND k meteo,
našel jsem tuto knihovnu, ale moje AN + programovací neschopnost brání pochopení jak to volat.
Má někdo čas se na to kouknout ?

Moooc děkuji

https://git.nroo.de/opensensemap/arduin ... ter/wind.h
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od dzooky » 02 úno 2020, 18:23

Podarilo sa ti to aspon skompilovat?

ja som len tak drbol mozno robim chybu

Kód: Vybrat vše

#include <wind.h>

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}
A output

Kód: Vybrat vše

In file included from /home/dzooky/Desktop/test/test.ino:1:0:
/home/dzooky/Arduino/libraries/arduino_wind_rain_sensor/wind.h:35:14: error: duplicate 'unsigned'
     unsigned unsigned long lastResetRain = 0, lastResetSpeed = 0;
              ^~~~~~~~
Multiple libraries were found for "wind.h"
 Used: /home/dzooky/Arduino/libraries/arduino_wind_rain_sensor
 Not used: /media/dzooky/data/apps/arduino/libraries/arduino_wind_rain_sensor
exit status 1
Error compiling for board Arduino Mega or Mega 2560.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od pavel1tu » 02 úno 2020, 19:01

Ano, je tam banální překlep

Kód: Vybrat vše

/**
 * provides functions to read out the sensors of a SEN 08942 "Wettermesseinheit":
 * - Wind Direction: analog sensor with 16 cardinal direction steps
 * - Wind Speed:     Interrupt counter
 * - Rain:           Interrupt counter
 *
 * Check your controller's spec which pins have ADC or interrupt capabilities!
 * On a senseBox MCU this should work well:
 *   WeatherUnit weather(4, 6, 5);
 */

#pragma once

#include <math.h>

class WeatherUnit {
   public:
    WeatherUnit (uint8_t pinDirection, uint8_t pinSpeed, uint8_t pinRain, uint16_t directionOffset);
    void begin ();

    float getWindDir (unsigned char numMeasures, unsigned int interval);
    float getWindDir ();
    float getWindSpeed ();
    float getRain ();

    // interrupt handlers
    void countRain ();
    void countSpeed ();

    private:
    const unsigned int pinDirection, pinSpeed, pinRain, directionOffset;
    const unsigned int directionVolt[16]   = {320, 410, 450, 620, 900, 1190, 1400, 1980, 2250, 2930, 3080, 3430, 3840, 4040, 4620, 4780};
    const unsigned int directionDegree[16] = {113, 68,  90,  158, 135, 203,  180,  23,   45,   248,  225,  338,  0,    292,  315,  270 };

    volatile unsigned long lastResetRain = 0, lastResetSpeed = 0;
    volatile unsigned long rainCounter = 0, speedCounter = 0;
    volatile bool lastRainReading = 0, currentRainReading = 0, lastSpeedReading = 0, currentSpeedReading = 0;

    bool debounceInput (unsigned int pin, bool last);
};







// keep a pointer to the last created instance, in order to attach global interrupt handlers
WeatherUnit* WEATHER_INSTANCE = NULL;

void WEATHER_speedInterruptHandler () {
    WEATHER_INSTANCE->countSpeed();
}

void WEATHER_rainInterruptHandler () {
    WEATHER_INSTANCE->countRain();
}








WeatherUnit::WeatherUnit (uint8_t pinDirection, uint8_t pinSpeed, uint8_t pinRain, uint16_t directionOffset = 0)
  : pinDirection(pinDirection), pinSpeed(pinSpeed), pinRain(pinRain), directionOffset(directionOffset) {
    WEATHER_INSTANCE = this;
}

void WeatherUnit::begin () {
    lastResetRain  = millis();
    lastResetSpeed = millis();

    pinMode(pinDirection, INPUT);
    pinMode(pinSpeed, INPUT_PULLUP);
    pinMode(pinRain, INPUT_PULLUP);
    
    attachInterrupt(digitalPinToInterrupt(pinSpeed), WEATHER_speedInterruptHandler, RISING);
    attachInterrupt(digitalPinToInterrupt(pinRain), WEATHER_rainInterruptHandler, LOW);
}

float WeatherUnit::getWindDir (unsigned char numMeasures, unsigned int interval) {
    // angular average
    float sumX = 0, sumY = 0, val;
    for (unsigned char i = 0; i < numMeasures; i++) {
        val = radians(getWindDir());
        sumX += sin(val);
        sumY += cos(val);
        if (i != numMeasures - 1) delay(interval);
    }
    return 180 + atan(sumX / sumY) * 180 / 3.1415;
}

float WeatherUnit::getWindDir () {
    unsigned int mvolt = analogRead(pinDirection);
    mvolt = map(mvolt, 0, 1023, 0, 5000); // map to range 0-5000 to make use of voltage values as defined in data sheet

    // search for correct index
    unsigned char i;
    for (i = 0; i < 16; i++) {
        if (mvolt <= directionVolt[i]) break;
    }
    i--; // the correct reference is actually lower than the reference value found.

    return (float) ((directionDegree[i] + directionOffset) % 360);
}

float WeatherUnit::getWindSpeed () {
    unsigned long now = millis();
    double secondsPassed = (now - lastResetSpeed) / 1000; // @FIXME: might yield bullshit when millis() overflows!
    // one impulse per second equals 2.4 km/h -> 0.6666 m/s
    float metersPerSec = (2 * speedCounter) / (3 * max(secondsPassed, 1.0));
    speedCounter = 0;
    lastResetSpeed = now;
    return metersPerSec;
}

float WeatherUnit::getRain () {
    float val = rainCounter * 0.2794; // mm aka L/m²
    rainCounter = 0;
    return val;
}

bool WeatherUnit::debounceInput (unsigned int pin, bool last) {
  bool current = digitalRead(pin);
  if (last != current) {
    // adjust this value.
    //  shorter -> risk of detecting single switch multiple times, 
    //  longer  -> risk of missing switches. 
    delayMicroseconds(1e3);
    current = digitalRead(pin);
  }
  return current;
}

void WeatherUnit::countRain () {
    currentRainReading = debounceInput(pinRain, lastRainReading);
    if (lastRainReading == LOW && currentRainReading == HIGH)
        rainCounter++;
    lastRainReading = currentRainReading;
}

void WeatherUnit::countSpeed () {
    currentSpeedReading = debounceInput(pinSpeed, lastSpeedReading);
    if (lastSpeedReading == LOW && currentSpeedReading == HIGH)
        speedCounter++;
    lastSpeedReading = currentSpeedReading;
}




float mpsToKmph  (float val) { return val * 3.6; }
float mpsToKnots (float val) { return val * 1.943843307; }
float mpsToBeaufort (float val) {
  if (val < 0.5)       return 0;
  else if (val < 1.5)  return 1;
  else if (val < 3.3)  return 2;
  else if (val < 5.5)  return 3;
  else if (val < 7.9)  return 4;
  else if (val < 10.7) return 5;
  else if (val < 13.8) return 6;
  else if (val < 17.1) return 7;
  else if (val < 20.7) return 8;
  else if (val < 24.4) return 9;
  else if (val < 28.4) return 10;
  else if (val < 32.6) return 11;
  else return 12;
}

const String CARDINAL_DIRS_EN[16] = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"};
const String CARDINAL_DIRS_DE[16] = {"N", "N-NO", "N-O", "O-NO", "O", "O-SO", "S-O", "S-SO", "S", "S-SW", "S-W", "W-SW", "W", "W-NW", "N-W", "N-NW"};
String degreeToCardinal (float val, const String cardinalNames[] = CARDINAL_DIRS_EN) {
    int i = (int)((val + 11.25) / 22.5);
    return cardinalNames[i % 16];
}

UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od dzooky » 02 úno 2020, 20:11

Asi som slepi ale na riadku 35 mam

Kód: Vybrat vše

volatile unsigned long lastResetRain = 0, lastResetSpeed = 0;
Nemam tam 2x unsigned

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Meteo stanica v1

Příspěvek od pavel1tu » 02 úno 2020, 22:43

Nevím,
na internetu tam chyba je.

Musíš to opravit ale v té knihovně kam si šahá Arduino IDE.
Mne to zkompilovat jde, už mám i nějaké výsledky, ale ještě to chci přímo vyzkoušek na snímači větru atd.

Mne šlo spíše o to - porozumět funkci co tam co dělá, chápu tak 10%
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů