Jak sprawdzić rodzaj kanałów

krycha88
Posts: 5206
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Wed Jan 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
Posts: 5206
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Wed Jan 13, 2021 12:04 pm Dodałem metody do pobierania ostatnich odczytów/stanu.

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

Code: Select all

  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/
User avatar
klew
Posts: 8355
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Fri 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
Posts: 5206
Joined: Fri Nov 16, 2018 7:25 am

Post

klew wrote: Fri 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/

Return to “Arduino IDE”