Jak sprawdzić rodzaj kanałów

krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

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ć ? :)
https://gui-generic-builder.supla.io/
daniel
Posts: 34
Joined: Thu Feb 15, 2018 7:29 am

Post

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

Code: Select all

#define RF_BUTTON
i dalej:

Code: Select all

#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:

Code: Select all

...
#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ę:

Code: Select all

//#define RF_BUTTON
Dzięki temu można zaoszczędzić trochę pamięci na np. SSL ;)
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

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.
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

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)

Code: Select all

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


Na razie jedyny get, który jest to "getChannelNumber()".
Najlepsze suple dla Twojego domu :mrgreen:
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

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

Code: Select all

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ś :)
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

krycha88 wrote: Fri 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ę ;)
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
klew
Posts: 13907
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

klew wrote: Fri Mar 13, 2020 10:53 am
krycha88 wrote: Fri 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.
Najlepsze suple dla Twojego domu :mrgreen:
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

Dzięki, sprawdzę wieczorem ;) teraz leżę w łóżku bo mnie jakaś zaraza złapała...
Last edited by krycha88 on Sat Mar 14, 2020 4:04 pm, edited 1 time in total.
https://gui-generic-builder.supla.io/
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

klew wrote: Fri Mar 13, 2020 11:29 pm Dorzuciłem getChannelType()
działa jak należy, dzięki :)
klew wrote: Fri 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().
https://gui-generic-builder.supla.io/
krycha88
Posts: 5575
Joined: Fri Nov 16, 2018 7:25 am
Been thanked: 5 times

Post

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

Code: Select all

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?
https://gui-generic-builder.supla.io/

Return to “Arduino IDE”