Dodanie parametru konfiguracji do interfejsu web Supla

dominom
Posts: 11
Joined: Wed Jul 12, 2023 3:04 pm

Post

WItam,
Czy da się dodać do strony Custom Input w którym będę mógł wprowadzić parametr który użyje w kodzie?
Chciałbym w dziale Configuration, dodać pole "Maksymana Wartość" oraz "Minimalna Wartość"

Następnie w kodzie użyć tej wartości w czujniku.
You do not have the required permissions to view the files attached to this post.
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Wielu by tak chciało ;)
Aktualnie nie ma takiej opcji
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
veeroos
Posts: 1080
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Nie wiem czy dobrze zrozumiałem temat, ja stosuję coś takiego w swoich czujnikach zasilanych bateryjnie do kalibracji poziomu baterii, o coś takiego Ci chodzi? Chodzi Ci o minimalną i maksymalną wartość wilgotności wprowadzane wartości z poziomu webserwera?
Oczywiście można zrobić też coś na zasadzie tego co jest w GG, czyli przypisanie konkretnych wartości do poziomu minimalnego i maksymalnego.
You do not have the required permissions to view the files attached to this post.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
Maciek663
Posts: 217
Joined: Thu Jan 11, 2024 6:33 am
Has thanked: 1 time
Been thanked: 1 time

Post

dominom wrote: Sun Dec 15, 2024 6:41 pm WItam,
Czy da się dodać do strony Custom Input w którym będę mógł wprowadzić parametr który użyje w kodzie?
Chciałbym w dziale Configuration, dodać pole "Maksymana Wartość" oraz "Minimalna Wartość"

Następnie w kodzie użyć tej wartości w czujniku.
Nie wiem do czego konkretnie to potrzebujesz, ale jak piszesz swoje programy a nie z GG to użył bym do tego albo kanał dimmera i przepisywał wartość pwm do kodu, albo kanał termostatu i przepisywał temperaturę.
User avatar
veeroos
Posts: 1080
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

Ale że screenów które kolega wysłał wynika to ze ma czujnik wilgotności w doniczce i chce ustawić wartość minimalną i maksymalną dla wilgotności i te wartości używać w programie, najlepiej do tego użyć custom parameter. Wtedy wpisuje odczytaną wartość minimalną dla gleby suchej i maksymalną dla mokrej. Ja wykorzystuję jeszcze dodatkowo pole ReadOnly w którym wyswietlam aktualny odczyt pinu analogowego, gdzie kolega może te wartości sobie odczytać wyciągając z doniczki i wkładając na przykład do mokrej gleby lub wody. Nie wiem w jakim celu można użyć tu kanałów termostatu lub dimmera, troszkę przerost formy nad treścią, nie mówię, że nie można tak, bo wizualnie z poziomu aplikacji mógłby sobie te wartości ustawić. Ale takie rzeczy ustawia się praktycznie raz i zapomina o nich. Wiadomo w gorszej jakości czujnikach wilgotności gleby elektrody mogą ulegać utlenieniu (tak sprawdziłem to) i pokazywać później inne wartości, ale zakładamy, że kolega stosuje dobrej jakości czujniki. Ogólnie kiedyś przerabiałem temat monitoringu doniczek, ale jak sobie policzyłem doniczki w domu jakie mam, to fortunę musiałbym wydać na monitorowanie ich wszystkich, dodatkowo jakbym chciał być leniwy i dodatkowo podlewać te które mają sucho, to naprawdę do każdej doniczki osobna pompka lub elektrozawór to stwierdziłem, że można się parę razy w tygodniu przejść i podlać 😉. Tym bardziej że jakbym miał do każdej doniczki zrobić uczestnika sieci Wi-Fi, to moja sieć mogła by tego nie unieść 😉.
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005
dominom
Posts: 11
Joined: Wed Jul 12, 2023 3:04 pm

Post

veeroos wrote: Mon Dec 16, 2024 9:02 pm Ale że screenów które kolega wysłał wynika to ze ma czujnik wilgotności w doniczce i chce ustawić wartość minimalną i maksymalną dla wilgotności i te wartości używać w programie, najlepiej do tego użyć custom parameter. Wtedy wpisuje odczytaną wartość minimalną dla gleby suchej i maksymalną dla mokrej. Ja wykorzystuję jeszcze dodatkowo pole ReadOnly w którym wyswietlam aktualny odczyt pinu analogowego, gdzie kolega może te wartości sobie odczytać wyciągając z doniczki i wkładając na przykład do mokrej gleby lub wody. Nie wiem w jakim celu można użyć tu kanałów termostatu lub dimmera, troszkę przerost formy nad treścią, nie mówię, że nie można tak, bo wizualnie z poziomu aplikacji mógłby sobie te wartości ustawić. Ale takie rzeczy ustawia się praktycznie raz i zapomina o nich. Wiadomo w gorszej jakości czujnikach wilgotności gleby elektrody mogą ulegać utlenieniu (tak sprawdziłem to) i pokazywać później inne wartości, ale zakładamy, że kolega stosuje dobrej jakości czujniki. Ogólnie kiedyś przerabiałem temat monitoringu doniczek, ale jak sobie policzyłem doniczki w domu jakie mam, to fortunę musiałbym wydać na monitorowanie ich wszystkich, dodatkowo jakbym chciał być leniwy i dodatkowo podlewać te które mają sucho, to naprawdę do każdej doniczki osobna pompka lub elektrozawór to stwierdziłem, że można się parę razy w tygodniu przejść i podlać 😉. Tym bardziej że jakbym miał do każdej doniczki zrobić uczestnika sieci Wi-Fi, to moja sieć mogła by tego nie unieść 😉.

Hej, dokładnie taki miałem zamysł, zazwyczaj ustawiam martość minimalną/maksymalną w kodzie. Pomyślałem że lepsza opcją będzie wprowadzenie takiego pola w Web interface. Przy kalibracji nie będe musiał na nowo podłączać mikokontrolera i programować.

Jak rozumiem twój webinterface jest hostowany przez urządzenie i w nim konfigurujesz te parametry.

Jest opcja gdybyś przesłał mi przykładowy kod?
User avatar
veeroos
Posts: 1080
Joined: Sun Mar 20, 2022 9:30 am
Location: Głogów
Has thanked: 1 time
Been thanked: 9 times

Post

deklarujesz bibliotekę:

Code: Select all

#include <supla/network/html/custom_parameter.h>
deklarujesz parametry potrzebne do obsługi danych:

Code: Select all

#define pin_analogowy = 22;
const char PARAM1[] = "param1";
const char PARAM2[] = "param2";
const char PARAM3[] = "param3";
const char PARAM4[] = "param4";
int Gorna_Wartosc = 0;
int Dolna_Wartosc = 100;
int maksymalna_wartosc = 100;
int minimalna_wartosc = 0;
stwórz sobię klasę na przykład taką:

Code: Select all

class myElement : public Supla::Element {
 public: explicit myElement(int pin, int gorna, int dolna, int minimalna, int maksymalna) : pin(pin), gorna(gorna), dolna(dolna), minimalna(minimalna), maksymalna(maksymalna) 
{  }
   void onInit() override {
  }
  
  double getValue() {
    value = (map(analogRead(pin), dolna, gorna, minimalna, maksymalna));
    return value;
  }

  double getRawValue() {
    value = analogRead(pin);
    return value;
  }

  void iterateAlways() override {
    if (millis() - lastReadTime > 2000) {
      lastReadTime = millis();
    //tutaj możesz jakiś sobie kod wstawić
    }
  }
 protected:
  int pin;
  int dolna;
  int gorna;
  int minimalna;
  int maksymalna;
  double value;
  uint64_t lastReadTime = 0;
};
myElement *c_analog = nullptr;
w setupie:

Code: Select all

Supla::Storage::Init();
  if (Supla::Storage::ConfigInstance()->getInt32(PARAM1, &Gorna_Wartosc)) {
  } else {
  }
  if (Supla::Storage::ConfigInstance()->getInt32(PARAM2, &Dolna_Wartosc)) {
  } else {
  }
    if (Supla::Storage::ConfigInstance()->getInt32(PARAM3, &maksymalna_wartosc)) {
  } else {
  }
  if (Supla::Storage::ConfigInstance()->getInt32(PARAM4, &minimalna_wartosc)) {
  } else {
  }
a następnie:

Code: Select all

c_analog = new myElement(pin_analogowy, Gorna_Wartosc, Dolna_Wartosc, minimalna_wartosc, maksymalna_wartosc);
no i najważniejsze okna w które będziesz wpisywał wartości one też w setupie:

Code: Select all

  new Supla::Html::CustomParameter(PARAM1, "Górna wartość odczytana", 100);
  new Supla::Html::CustomParameter(PARAM2, "Dolna wartość odczytana", 0);
  new Supla::Html::CustomParameter(PARAM3, "Górna wartość zakładana", 100);
  new Supla::Html::CustomParameter(PARAM4, "Dolna wartość zakładana", 0);
jak chcesz w programie odczytać wartość obliczoną to w loopie robisz coś takiego:

Code: Select all

twoja_zmienna = c_analog->getValue();
jak chcesz na przykład odczytać wartość surową do późniejszego wprowadzenia danych w okna to na przykład możesz zrobić coś takiego:

Code: Select all

Serial.print(c_analog->getRawValue());
wtedy po monitorze portu szeregowego widzisz wartość surową. oczywiście na razie nie masz żadnego kanału, musisz sobie jakiś dodać, możesz sobie zrobić na GPM albo odczyt surowej wartości, albo obliczonej w taki sposób jak podałem
P.S.
Oczywiście ta metoda zwraca wartości całkowite bez ułamków z zakresu jaki podasz jako dolna i górna wartość zakładana. jak chcesz żeby zwracało liczby zmiennoprzecinkowe zmodyfikuj sobie klasę.

drugi P.S.
kod pisany "na kolanie" więc może zawierać błędy, ale wydaje mi się, że powinien działać ;)
Zamel Mew-01, Zamel PEW-01, Zamel SBW-01, Zamel THW-01, Zamel SRW-01, Zamel mSLW-02, Auraton BOX + Indor Sensor, Airly Gate By Veeroos, Zigbee to Supla Gateway + sensors, Zamel SGW-01 and more

https://github.com/v33r005

Return to “supla-dev”