KPOP w supla-device

[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

vajera wrote: Mon Jun 17, 2024 5:28 pm
[email protected] wrote: Mon Jun 17, 2024 5:16 pm Zrobiłem tak wcześniej, zakomentowałem wszystko prócz KPOP
OK, czyli to jednak nie przerwania - miałem przez nie podobne opóźnienia.
To były przerwania :D A dokładnie użycie w jednym miejscu funkcji delay(). Nie wiedziałem, że wgranie nowego programu nie wpłynie na zawartość configa i to wyglądało jak problem z KPOP, ale jak się wyczyści do zera flasha i wgra od nowa program to wtedy wszystko działa do momentu użycia Anemomentru ...

Także dzięki za podpowiedź, a jak byś obszedł ten problem? bo nie jestem
pewien czy tu liczyć osobno czas w pętli i to sprawdzać? https://github.com/rkalwak/WeatherStati ... tr.cpp#L73
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

@Rafał:
Ja mam w swojej stacji pogodowej:
2xKLOP,
8xKPOP,
w tym anemometr,
liczy się średnia 5-cio sekundowa, średnia krocząca 10-cio minutowa (@Klew: dzięki za pomysł), która trafia do wykresów,
prędkość wiatru pokazuje się w m/s i km/h.
Dodatkowo temp, ciśnienie, wilgotność i kierunek wiatru na AS5600 -> to chyba od Ciebie pomysł tego czujnika
Wszystko się liczy i aktualizuje w głównej pętli loop() i działa bez problemów.

Podobnie będzie działać licznik deszczu i podlewania ogrodu - też przepływy sumaryczne i 5-cio sekundowe i 10-cio minutowe.

Wszystko na bieżąco w głównej pętli.
[email protected]
Posts: 1585
Joined: Mon Feb 06, 2023 8:56 am
Has thanked: 18 times
Been thanked: 26 times

Post

iM@rek wrote: Mon Jun 24, 2024 7:05 pm @Rafał:
Ja mam w swojej stacji pogodowej:
2xKLOP,
8xKPOP,
w tym anemometr,
liczy się średnia 5-cio sekundowa, średnia krocząca 10-cio minutowa (@Klew: dzięki za pomysł), która trafia do wykresów,
prędkość wiatru pokazuje się w m/s i km/h.
Dodatkowo temp, ciśnienie, wilgotność i kierunek wiatru na AS5600 -> to chyba od Ciebie pomysł tego czujnika
Wszystko się liczy i aktualizuje w głównej pętli loop() i działa bez problemów.

Podobnie będzie działać licznik deszczu i podlewania ogrodu - też przepływy sumaryczne i 5-cio sekundowe i 10-cio minutowe.

Wszystko na bieżąco w głównej pętli.
pokażesz jak masz zrobiona ta prędkość wiatru ? bo ja wiem gdzie jest problem ale nie jestem pewien jak to zrobić inaczej
iM@rek
Posts: 376
Joined: Thu Feb 09, 2023 1:25 pm

Post

Oczywiście, nie ma sprawy.
Odczytuję impulsy za pomocą KLOPa (klop0 - tylko liczy impulsy, potem obliczenia robią KPOPy).

Jeśli coś nie jasne - proszę pytaj.
Sorry za kilkujęzyczne komentarze.

Code: Select all

nIC0_State = digitalRead(IC0_Pin);  // odczyt stanu, wspólne GPIO

  // Zmiana stanu Klop0 - tekuce brojaci, no history, no FRAM

    if (millis() - ResetTime > LoopTime) {  // co LoopTime
      ResetTime = millis();                 //	reset timestamp
      IC0_Tmp = nIC0_Val - oIC0_Val;        // razlika impulsa
      tIC0_Val[nCounter] = IC0_Tmp;
      
  //  10min Average

      IC0_10mVal = 0;
      for (int i = 0; i < MeasCount; i++){
        IC0_10mVal = IC0_10mVal + tIC0_Val[i];
//          printf("\n\t index: %d \t tIC0_Val[i]: %d", i, tIC0_Val[i]);
      }

      IC0_10mAvg = IC0_10mVal * (float)1000 / MeasCount / LoopTime;           // średnia krocząca in [LoopTime]
 
      // Zmiana stanu Klop0 - imp. counter
      if (nIC0_Val != oIC0_Val) {               // flows
        IC0_Tmp = nIC0_Val - oIC0_Val;          // imp. difference
        IC0_Avg = IC0_Tmp * (float)1000 / LoopTime;  // imp. average in [LoopTime]
        oIC0_Val = nIC0_Val;                 // oIC0_Val update
      }
      else {                 // nema vjetra/kise
        IC0_Tmp = IC0_Avg = 0;
      }
      gpm4->setValue(IC0_Avg);             // set new tmp Avg m/s value
      gpm5->setValue(IC0_Avg);             // set new tmp Avg km/h value
//      printf("\n\nA:\t nCounter: %d \t IC0_Tmp: %f \t tIC0_Val[nCounter]: %d \n", nCounter, IC0_Tmp, tIC0_Val[nCounter]);
//      printf("B:\t IC0_Tmp: \t\t%f \t IC0_Avg: \t%f \n", IC0_Tmp, IC0_Avg);
//      printf("C:\t IC0_10mVal: \t%f \t IC0_10mAvg: \t%f \n", IC0_10mVal, IC0_10mAvg);
      gpm6->setValue(IC0_10mAvg);     // aktualizacja wartości 10m m/s
      gpm7->setValue(IC0_10mAvg);     // aktualizacja wartości 10m km/h
      nCounter = nCounter + 1;        // zwiększenie indeksu tablicy
      if(nCounter == MeasCount){
        nCounter = 0;                 // reset indeksu
      }
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

Jeśli w cloud na kanale KPOP dopisuję jednostkę po wartości a następnie ustawię mnożnik dzielnik itp. to nie wpływają te ustawienia na wartość wyświetlaną. Tak samo jest jak bezpośrednio z kodu przypiszę jednostkę... Wtedy nawet jak wyczyszczę pole jednostki i prefiksu w cloud to ustawienia mnożnika dzielnika itp. nie wpływają na wynik. To tak ma być?

Poprawka... w ogóle nie działają mi ustawienia konfiguracji pomiaru. Co może być przyczyną?
Last edited by zzrr on Wed Aug 07, 2024 12:31 pm, edited 1 time in total.
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

zzrr wrote: Wed Aug 07, 2024 12:09 pm Jeśli w cloud na kanale KPOP dopisuję jednostkę po wartości a następnie ustawię mnożnik dzielnik itp. to nie wpływają te ustawienia na wartość wyświetlaną. Tak samo jest jak bezpośrednio z kodu przypiszę jednostkę... Wtedy nawet jak wyczyszczę pole jednostki i prefiksu w cloud to ustawienia mnożnika dzielnika itp. nie wpływają na wynik. To tak ma być?
https://github.com/SUPLA/supla-device/b ... base.h#L52
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
klew
Posts: 13909
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

zzrr wrote: Wed Aug 07, 2024 12:09 pm Jeśli w cloud na kanale KPOP dopisuję jednostkę po wartości a następnie ustawię mnożnik dzielnik itp. to nie wpływają te ustawienia na wartość wyświetlaną. Tak samo jest jak bezpośrednio z kodu przypiszę jednostkę... Wtedy nawet jak wyczyszczę pole jednostki i prefiksu w cloud to ustawienia mnożnika dzielnika itp. nie wpływają na wynik. To tak ma być?

Poprawka... w ogóle nie działają mi ustawienia konfiguracji pomiaru. Co może być przyczyną?
Masz instancję klasy Config? Może nadpisujesz gdzieś w kodzie ustaiwenia kanału?

Ciężko zgadywać. Pokaż kod i logi, to będzie łatwiej.
Najlepsze suple dla Twojego domu :mrgreen:
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

klew wrote: Wed Aug 07, 2024 12:37 pm Masz instancję klasy Config? Może nadpisujesz gdzieś w kodzie ustaiwenia kanału?

No raczej nie nadpisuję. Mam dwa kanały obok siebie i jeden działał a w drugim nie. Nie wiem o co "biega" ale zaczęło działać przed chwilą.
Czy poniższe info dla cloud wpływa na czas po jakim pokazują się zmiany w ustawieniach pomiaru?

SuplaDevice.addFlags(SUPLA_DEVICE_FLAG_SLEEP_MODE_ENABLED);
SuplaDevice.setActivityTimeout(3 * czas_Sleep);
User avatar
klew
Posts: 13909
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

zzrr wrote: Wed Aug 07, 2024 1:32 pm Czy poniższe info dla cloud wpływa na czas po jakim pokazują się zmiany w ustawieniach pomiaru?

SuplaDevice.addFlags(SUPLA_DEVICE_FLAG_SLEEP_MODE_ENABLED);
SuplaDevice.setActivityTimeout(3 * czas_Sleep);
Same te ustawienia nie wpływają.
Natomiast czy to jest śpiące urządzenie? Jeśli tak, to kiedy je usypiasz? Możliwe, że robisz to za szybko i urządzenie nie zdąrzy wymienić się configiem z serwerem.
Najlepsze suple dla Twojego domu :mrgreen:
zzrr
Posts: 1864
Joined: Wed Oct 26, 2022 7:35 pm
Has thanked: 76 times
Been thanked: 119 times

Post

klew wrote: Wed Aug 07, 2024 8:13 pm Same te ustawienia nie wpływają.
Natomiast czy to jest śpiące urządzenie? Jeśli tak, to kiedy je usypiasz? Możliwe, że robisz to za szybko ...
@klew tak. To co napisałeś faktycznie ma wpływ. Bo faktycznie już mi się zdarzyło te ustawienia przerabiać.
Generalnie to po setValue daję 200mS opóźnienia. W setup po SuplaDevice.begin(); też daję opóźnienie i to nawet 2s muszę żeby mi się dane później uaktualniały.
A usypiam w lop z użyciem tego Supla::Protocol::ProtocolLayer::IsAnyUpdatePending().
Masz jakieś wskazówki?

Return to “supla-dev”