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.
Dodanie parametru konfiguracji do interfejsu web Supla
-
dominom
- Posts: 11
- Joined: Wed Jul 12, 2023 3:04 pm
You do not have the required permissions to view the files attached to this post.
-
veeroos
- Posts: 1080
- Joined: Sun Mar 20, 2022 9:30 am
- Location: Głogów
- Has thanked: 1 time
- Been thanked: 9 times
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.
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
https://github.com/v33r005
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ę.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.
-
veeroos
- Posts: 1080
- Joined: Sun Mar 20, 2022 9:30 am
- Location: Głogów
- Has thanked: 1 time
- Been thanked: 9 times
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
https://github.com/v33r005
-
dominom
- Posts: 11
- Joined: Wed Jul 12, 2023 3:04 pm
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?
-
veeroos
- Posts: 1080
- Joined: Sun Mar 20, 2022 9:30 am
- Location: Głogów
- Has thanked: 1 time
- Been thanked: 9 times
deklarujesz bibliotekę:
deklarujesz parametry potrzebne do obsługi danych:
stwórz sobię klasę na przykład taką:
w setupie:
a następnie:
no i najważniejsze okna w które będziesz wpisywał wartości one też w setupie:
jak chcesz w programie odczytać wartość obliczoną to w loopie robisz coś takiego:
jak chcesz na przykład odczytać wartość surową do późniejszego wprowadzenia danych w okna to na przykład możesz zrobić coś takiego:
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ć
Code: Select all
#include <supla/network/html/custom_parameter.h>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;
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;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 {
}
Code: Select all
c_analog = new myElement(pin_analogowy, Gorna_Wartosc, Dolna_Wartosc, minimalna_wartosc, maksymalna_wartosc);
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);
Code: Select all
twoja_zmienna = c_analog->getValue();
Code: Select all
Serial.print(c_analog->getRawValue());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
https://github.com/v33r005
