Jak sprawdzić rodzaj kanałów

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

klew pisze: śr sty 13, 2021 10:58 pm Dorzuciłem metodę "getSecondaryChannel()" - możesz nią pobrać kanał ciśnienia dla BME. Metoda zwraca wskaźnik na Channel (podobnie jak getChannel() ).
Dzięki działa :)
https://gui-generic-builder.supla.io/
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: śr sty 13, 2021 12:04 pm Dodałem metody do pobierania ostatnich odczytów/stanu.

Poniżej przykład jak się do tego dobrać:

Kod: Zaznacz cały

  for (auto element = Supla::Element::begin(); element != nullptr; element = element->next()) { // iterujemy po wszystkich elementach dodanych do programu
    if (element->getChannel()) { // sprawdzamy, czy do elementu jest przypisany kanał. Niektóre elementy (np. button) nie posiadają kanału.
      auto channel = element->getChannel();
      if (channel->getChannelType() == SUPLA_CHANNELTYPE_THERMOMETER) {
        double lastTemperature = channel->getValueDouble();
        // do something with lastTemperature
      }
    }
  }
"getChannelType" zwraca typ kanału używany w Supli. Pełna lista typów jest tutaj: https://github.com/SUPLA/arduino/blob/a ... oto.h#L280
Typ kanału używany przez elementy SuplaDevice są z reguły określone w konstruktorach danego elementu. Trzeba na to zwrócić uwagę, bo np Supla::Sensor::DS18B20 używa SUPLA_CHANNELTYPE_THERMOMETER a nie SUPLA_CHANNELTYPE_THERMOMETERDS18B20.
Można też szukać kanału po jego numerze - wtedy sprawdzamy po metodzie getChannelNumber()

Kolejna rzecz o której trzeba pamiętać, to sposób zapisu danego typu danych, który jest używany w protokole komunikacyjnym.
Innymi słowy, musimy wiedzieć co dany kanał przesyła i użyć odpowiedniej metody:
- jedną liczbę zmiennoprzecinkową (np. termoemtry, ciśnienie) - getValueDouble()
- dwie liczby zmiennoprzecinkowe (np. DHT22 przesyłające temperaturę oraz wilgotność w jednym kanale) - getValueDoubleFirst() (temperatura), getValueDoubleSecond() (wilgotność)
- typ logiczny (bool - np. sensor otwarcia) - getValueBool()
- liczbę całkowitą 32 bitową (np. rolety - poziom otwarcia) - getValueInt32()
- liczbę całkowitą 64 bitową (np. liczniki impulsów - UWAGA: nie robiłem pobierania danych z liczników prądu) - getValueInt64()
- zestaw liczb reprezentujących RGB z dwoma wartościami jasności (RGBW, dimmery) - getValueRed(), getValueBlue(), getValueGreen(), getValueColorBrightness(), getValueBrightness();
@klew Czy może dopisałeś już możliwość pobierania wartości dla licznika prądu? Chciał bym dorzucić wyświetlanie tych wartości na OLEDa :)
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: pt mar 04, 2022 10:17 am @klew Czy może dopisałeś już możliwość pobierania wartości dla licznika prądu? Chciał bym dorzucić wyświetlanie tych wartości na OLEDa :)
A miałem dopisać? ;)
Z tego co widzę w kodzie, to nie ma tego.

Liczniki EM mają inaczej zapisane dane. Metody opisane w tym wątku pobierają dane z wartości kanału. Natomiast EM przesyłają większość danych w kanałach extended.

Temat pilny?
Widzimy się na Supla Offline Party vol. 2 :!:
krycha88
Posty: 5187
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

klew pisze: pt mar 04, 2022 10:42 am A miałem dopisać? ;)
Z tego co widzę w kodzie, to nie ma tego.

Liczniki EM mają inaczej zapisane dane. Metody opisane w tym wątku pobierają dane z wartości kanału. Natomiast EM przesyłają większość danych w kanałach extended.

Temat pilny?
Do tej pory nie było takiej potrzeby. Temat raczej nie pilny, naliczyłem kilka osób które by chciały taką funkcjonalność :)
https://gui-generic-builder.supla.io/
ODPOWIEDZ

Wróć do „Arduino IDE”