Obsługa dwóch kanałów w jednej klasie

krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Czy jest w ogóle taka możliwość? Chciałbym w jednej klasie obsłużyć dwa kanały:

Kod: Zaznacz cały

  channel.setType(SUPLA_CHANNELTYPE_DISTANCESENSOR);
  channel.setDefault(SUPLA_CHANNELFNC_DISTANCESENSOR);
  channel.setNewValue(DISTANCE_NOT_AVAILABLE);

  channel.setType(SUPLA_CHANNELTYPE_HUMIDITYSENSOR);
  channel.setDefault(SUPLA_CHANNELFNC_HUMIDITY);
  channel.setNewValue(HUMIDITY_NOT_AVAILABLE);
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Tak, jest to możliwe, ale trochę karkołomne.

Zobacz sobie implementację w BME280.h oraz w therm_hygro_press_meter.h/cpp
W zasadzie ta druga wprowadza obsługę drugiego osobnego kanału w ramach jednej klasy. Najważniejsza jest metoda "getSecondaryChannel". Reszta powinna w miarę działać.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

Przyzwyczaiłeś mnie do prostrzych rozwiązań ale damy radę ;)
https://gui-generic-builder.supla.io/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

i teraz pytanie czy da się ustawić warunkowanie dla takiego drugiego kanału? :)
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: śr cze 16, 2021 6:39 pm i teraz pytanie czy da się ustawić warunkowanie dla takiego drugiego kanału? :)
Niestety tego jeszcze nie ma.
Jak pisałem warunki, to jedyny tego typu przykład był dla BME, gdzie "seconday channel" to ciśnienie. Było raczej mało prawdopodobne, że komuś się to przyda ;).
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

jak byś się nudził to poproszę o taką funkcjonalność :) Ale trzeba przyznać, że potrzeba niszowa bo służy tylko do prezentowania wartości sensora w różnych jednostkach za pomocą dwóch różnych kanałów.
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: czw cze 17, 2021 6:47 am jak byś się nudził to poproszę o taką funkcjonalność :) Ale trzeba przyznać, że potrzeba niszowa bo służy tylko do prezentowania wartości sensora w różnych jednostkach za pomocą dwóch różnych kanałów.
Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: czw cze 17, 2021 6:50 am Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
to było by najlepsze rozwiązanie. Kanał wilgotności pasuje bardzo ładnie to wartości w procentach :) Nie wiadomo czy w tym roku pojawi się wersja 2.4, a przerobienie kanału wilgotności na kanał ogólnego przeznaczenia to pewnie chwila roboty.
https://gui-generic-builder.supla.io/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: czw cze 17, 2021 6:50 am Można by dodać osobny "element" z jednym kanałem, któremu podaje się zakres min i max, oraz kanał referencyjny i na jego podstawie tworzy kanał 0-100%. To powinno być dość proste, uniwersalne (będzie działać na dowolnym innym kanale) i będzie działać warunkowanie.Tylko może warto też poczekać na Supla 2.4 i kanał ogólny.
Spróbowałem dodać taką obsługę jak zaproponowałeś, aby to zrobić wystarczy zrobić to tak:

Kod: Zaznacz cały

    auto hc_sr04 = new Supla::Sensor::HC_SR04(4, 5);
    new Supla::Sensor::Percentage(hc_sr04, 20, 120);
    
i teraz doda się automatycznie drugi kanał który będzie wyświetlać wartości z HC_SR04 przeliczając je na procenty. Jedynie co trzeba określić to min oraz max.

https://github.com/krycha88/GUI-Generic ... entage.cpp

@klew spojrzysz na to? :)
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

krycha88 pisze: czw cze 17, 2021 1:05 pm @klew spojrzysz na to? :)
Na koniec switch case jest coś nie tak. Po

Kod: Zaznacz cały

 default:
      return HUMIDITY_NOT_AVAILABLE;
 
powinieneś zamknąć switch case'a (klamra } ).
Do tego "double value" definiujesz dwa razy. Przy zwracaniu double, nie musisz też robić static_cast na double.

Parametry min i max robiłbym też na innych zmiennych niż int16_t. Mogą trafić się sytuacje, gdzie to będzie zbyt duże ograniczenie.
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „Arduino IDE”