Jak sprawdzić rodzaj kanałów

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

czw mar 12, 2020 10:16 am

Potrzebuję przy tworzeniu GUI sprawdzić czy dany kanał został dodany i na podstawie tego dodać odpowiedni fragment GUI.

Myślałem o wykorzystaniu:
https://github.com/klew/arduino/blob/ma ... /channel.h

Jakieś propozycje jak to zrobić ? :)
daniel
Posty: 32
Rejestracja: czw lut 15, 2018 7:29 am

czw mar 12, 2020 10:14 pm

Ja swoim szkicu definiuję kanały jeszcze przed kompilacją za pomocą makr. Np.:

Kod: Zaznacz cały

#define RF_BUTTON
i dalej:

Kod: Zaznacz cały

#ifdef RF_BUTTON
#include <RCSwitch.h> //https://github.com/sui77/rc-switch (GPL)
RCSwitch mySwitch = RCSwitch();
#include <supla/element.h>
#endif
i w html gui:

Kod: Zaznacz cały

...
#ifdef RF_BUTTON
    main_page += "<i>";
    main_page += "<input type=\"number\" name=\"rfb\" value=\"";
    if (configured) {
      main_page += String(rf_btn_value);
    }
    main_page += "\">";
    main_page += "<label>RF button value</label>";
    main_page += "</i>";
#endif
...
Wgrywam ten sam szkic do różnych płytek, jeśli nie potrzebuję danego kanału zakomentowuję:

Kod: Zaznacz cały

//#define RF_BUTTON
Dzięki temu można zaoszczędzić trochę pamięci na np. SSL ;)
krycha88
Posty: 1117
Rejestracja: pt lis 16, 2018 7:25 am

pt mar 13, 2020 7:42 am

Dzięki za podsunięcie pomysłu, tak właśnie zrobię. Ale nie będę definiować własnych wartości tylko wykorzystam te dodane w bibliotece np. #define _ds18b20_h #define _dht_h itd.
Awatar użytkownika
klew
Posty: 1786
Rejestracja: czw cze 27, 2019 12:16 pm

pt mar 13, 2020 9:06 am

Define'y z headerów będą dodane zależnie od tego, czy zrobisz include'a, czy nie. Na tej podstawie nie odkryjesz czy dany kanał jest dodany.

Najlepiej pobiegać po tej liście kanałów z channel.h.
Dorzucę jakieś metody get aby pobierać dane, które są potrzebne.
Napisz tylko co potrzebujesz odczytać?
- channel type
- ostatnio odcyztana wartość (o tym już kiedyś pisaliśmy)
- coś jeszcze?

Po kanałach można przejść przy pomocy: (UWAGA: KOD NIEAKTUALNY)

Kod: Zaznacz cały

for (auto channel = Supla::Channel::begin(); channel != nullptr; channel = channel->next()) {
   channel->doSomething();              
}


Na razie jedyny get, który jest to "getChannelNumber()".
krycha88
Posty: 1117
Rejestracja: pt lis 16, 2018 7:25 am

pt mar 13, 2020 9:57 am

klew pisze:
pt mar 13, 2020 9:06 am
Define'y z headerów będą dodane zależnie od tego, czy zrobisz include'a, czy nie. Na tej podstawie nie odkryjesz czy dany kanał jest dodany.

Najlepiej pobiegać po tej liście kanałów z channel.h.
Dorzucę jakieś metody get aby pobierać dane, które są potrzebne.
Napisz tylko co potrzebujesz odczytać?
- channel type
- ostatnio odcyztana wartość (o tym już kiedyś pisaliśmy)
- coś jeszcze?

Po kanałach można przejść przy pomocy:

Kod: Zaznacz cały

for (auto channel = Supla::Channel::begin(); channel != nullptr; channel = channel->next()) {
   channel->doSomething();              
}


Na razie jedyny get, który jest to "getChannelNumber()".
Na chwilę obecną nie potrzebuję innych potrzeb niż te które zaproponowałeś :)
Awatar użytkownika
klew
Posty: 1786
Rejestracja: czw cze 27, 2019 12:16 pm

pt mar 13, 2020 10:53 am

krycha88 pisze:
pt mar 13, 2020 9:57 am


Na chwilę obecną nie potrzebuję innych potrzeb niż te które zaproponowałeś :)
Ok, o ile nie zasnę wieczorem, to dziś to dorzucę ;)
Awatar użytkownika
klew
Posty: 1786
Rejestracja: czw cze 27, 2019 12:16 pm

pt mar 13, 2020 11:29 pm

klew pisze:
pt mar 13, 2020 10:53 am
krycha88 pisze:
pt mar 13, 2020 9:57 am


Na chwilę obecną nie potrzebuję innych potrzeb niż te które zaproponowałeś :)
Ok, o ile nie zasnę wieczorem, to dziś to dorzucę ;)
Dorzuciłem getChannelType()
Niestety "last read value" jeszcze nie dorzucam. To trzeba będzie zrobić na poziomie konkretnych sensorów ze względu na różne zwracane typy.
krycha88
Posty: 1117
Rejestracja: pt lis 16, 2018 7:25 am

sob mar 14, 2020 5:55 am

Dzięki, sprawdzę wieczorem ;) teraz leżę w łóżku bo mnie jakaś zaraza złapała...
Ostatnio zmieniony sob mar 14, 2020 4:04 pm przez krycha88, łącznie zmieniany 1 raz.
krycha88
Posty: 1117
Rejestracja: pt lis 16, 2018 7:25 am

sob mar 14, 2020 4:04 pm

klew pisze:
pt mar 13, 2020 11:29 pm
Dorzuciłem getChannelType()
działa jak należy, dzięki :)
klew pisze:
pt mar 13, 2020 11:29 pm
Niestety "last read value" jeszcze nie dorzucam. To trzeba będzie zrobić na poziomie konkretnych sensorów ze względu na różne zwracane typy.
wydaje się to już nie aktualne. Bo właśnie wykorzystuję metody dla konkretnych sensorów getValue() czy getTemp() i getHumi().
krycha88
Posty: 1117
Rejestracja: pt lis 16, 2018 7:25 am

wt sty 12, 2021 9:54 am

klew pisze:
pt mar 13, 2020 9:06 am
Define'y z headerów będą dodane zależnie od tego, czy zrobisz include'a, czy nie. Na tej podstawie nie odkryjesz czy dany kanał jest dodany.

Najlepiej pobiegać po tej liście kanałów z channel.h.
Dorzucę jakieś metody get aby pobierać dane, które są potrzebne.
Napisz tylko co potrzebujesz odczytać?
- channel type
- ostatnio odcyztana wartość (o tym już kiedyś pisaliśmy)
- coś jeszcze?

Po kanałach można przejść przy pomocy:

Kod: Zaznacz cały

for (auto channel = Supla::Channel::begin(); channel != nullptr; channel = channel->next()) {
   channel->doSomething();              
}


Na razie jedyny get, który jest to "getChannelNumber()".
Teraz aby odczytać wartość oraz rodzaj czujnika wykorzystuję globalnego vector, chcę się ich pozbyć bo niepotrzebnie zajmują pamięć. Chciałbym wykorzystać to rozwiązanie zaproponowane przez Ciebie ale brakuje możliwości odczytania ostatniej wartości kanału. Czy nie dało by się dorobić prostych metod odczytujących wartość z reg_dev.channels[channelNumber].value?
ODPOWIEDZ

Wróć do „Arduino IDE”