CHANNELSTATE w bibliotece Arduino

Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

pt lip 17, 2020 8:02 am

W bibliotece SuplaDevice na Arduino IDE pojawiła się pierwsza wersja wsparacia dla CHANNELSTATE (więcej info tutaj: viewtopic.php?f=18&t=6878 )

Na chwilę obecną jeśli ktoś chce potestować, to kod jest wrzucony do mojego githuba https://github.com/klew/arduino
Aktualna implementacja jest dla ESP8266. Dla pozostałych płytek (Arduino Mega, ESP32) będzie się pokazywał jedynie uptime. Pełne wsparcie pojawi się wkrótce.
EDIT: Arduino Mega z Ethernet Shiled już też jest zaimplementowane

Biblioteka włącza CHANNELSTATE na wszystkich kanałach na urządzeniu. Zastanawiam się czy nie warto tego jakoś ograniczyć, albo dać opcję wyboru, żeby to było tylko na niektórych. Dajcie znać, czy ikonka "i" przy każdym kanale Wam przeszkadza, czy nie ;)

Jeśli już używasz nowej wersji SuplaDevice, to wystarczy zaktualizować bibliotekę, wgrać nową binarkę na urządzenie, usunąć urządzenie z chmury i zarejestrować je na nowo (na chwilę obecną serwer czyta tą flagę tylko przy rejestracji urządzenia w chmurze, więc usuwanie jest konieczne). Jeśli nie chcesz usuwać urządzenia z chmury - daj znać @pzygmunt - on chętnie pomoże ;)

Wszelkie sugestie są mile widziane.
Screenshot_20200717-094921.jpg
Screenshot_20200717-094921.jpg (116.76 KiB) Przejrzano 775 razy
krycha88
Posty: 802
Rejestracja: pt lis 16, 2018 7:25 am

pt lip 17, 2020 8:14 am

Ekstra! kolejna dobra robota :)

Ja jestem za tym aby samemu zadecydować czy włączyć/wyłączyć ten kanał komunikacji.
Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

pt lip 17, 2020 9:07 am

krycha88 pisze:
pt lip 17, 2020 8:14 am
Ekstra! kolejna dobra robota :)

Ja jestem za tym aby samemu zadecydować czy włączyć/wyłączyć ten kanał komunikacji.
Masz na myśli wybór:
1. Wszystkie kanały albo żaden, czy
2. Domyślnie wszędzie włączone, z możliwością wyłączenia na poszczególnych kanałach, czy
3. Domyślnie wyłączone, z możliowścią włączenia na poszczególnych kanałach
?
krycha88
Posty: 802
Rejestracja: pt lis 16, 2018 7:25 am

pt lip 17, 2020 10:34 am

klew pisze:
pt lip 17, 2020 9:07 am
krycha88 pisze:
pt lip 17, 2020 8:14 am
Ekstra! kolejna dobra robota :)

Ja jestem za tym aby samemu zadecydować czy włączyć/wyłączyć ten kanał komunikacji.
Masz na myśli wybór:
1. Wszystkie kanały albo żaden, czy
2. Domyślnie wszędzie włączone, z możliwością wyłączenia na poszczególnych kanałach, czy
3. Domyślnie wyłączone, z możliowścią włączenia na poszczególnych kanałach
?
Nie wiem na ile to jest wykolanelne ale bym to podzielił na grupy:
[podstawowe]
Adres IP
MAC
Wifi RSSI
Siła sygnału WiFi
Uptime
Czas od nawiązania połączenia z serwerem
Ostatnia przyczyna zresetowania połączenia z serwerem

[zasilanie bateryjne]
Poziom baterii
Zasilanie bateryjne tak/nie
Żywotność baterii

[oświetlenie]
Żywotność źródła światła
Żywotność źródła światła - ile pozostało

[inne]
Węzeł mostu online/offline (póki co nieużywane z uwagi na to, że wprowadzono możliwość określania statusu online/offline dla poszczególnych kanałów, a nie koniecznie dla całego urządzenia)
Siła sygnału radia mostu

Jeżeli wybiorę grupe [podstawowe] to fajnie byłoby przypiąć ją do kanału 0 aby nie wyświetlać tej samej informacji dla pozostałych kanałów. Można to również rozwiązać po stronie samej aplikacji przypinając taką grupę w miejsce np. lokalizacji?

dla mnie minimum to:
1. Wszystkie kanały albo żaden
Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

pt lip 17, 2020 11:13 am

Ogólnie zrobiłem to tak, że po otrzymaniu zapytania o "channel state", aplikacja wypełnia dane o sieci, potem dane związane z uptime.
Następnie przekazuje taką wstępnie wypełnioną strukturę do "elementu" z SuplaDevice, odpowiedzialnego za kanał, którego dotyczy pytanie:

Kod: Zaznacz cały

  virtual void handleGetChannelState(TDSC_ChannelState &channelState);
Konkretny "element" może z otrzymanym channelState zrobić co mu się podoba. Może skasować uzupełnione informacje, może je nadpisać, może dodać swoje. Obuduję jeszcze tą strukturę TDSC_ChannelState w jakąś klasę, aby nie trzeba było się bawić operacjami OR na bitach. Aktualnie metoda handleGetChannelState nie robi nic z tymi danymi. Planuję dodać tam obsługę żywotności światła dla przekaźników (bo w ogólności funkcja "światło" jest konfigurowana w cloud i urządzenie może nie wiedzieć do czego służy przekaźnik).
Można by też to pole użyć do liczenia jak długo urządzenie było włączone.

Co do wyboru kanału "0", to ja osobiście mam wątpliwości. Wszystko jest fajnie, jeśli Twoje urządzenie obsługuje jedną funkcję (albo kilka mocno powiązanych ze sobą kanałów - np. stacja pogodowa). Ale jeśli stacja pogodowa jest postawiona przy bramie przesuwnej i przy okazji ten sam układ obsługuje przekaźnik od bramy, to chyba chciałbym mieć przynajmniej dwa przyciski "i" - jeden w lokalizacji stacji pogodowej, a drugi w lokalizacji bramy - tak abym nie musiał pamiętać, że przekaźnik od bramy jest na tym samym urządzeniu, co stacja pogodowa i tam gdzieś szukać "i".

Myślę, że prawdopodobnie zrobię to domyślnie włączone, z opcją wyłączenia per kanał. Czyli coś w stylu:

Kod: Zaznacz cały

auto relay = new Supla::Control::Relay(14, true, true);
relay->disableChannelState();  // to tylko przykład. Takiej metody jeszcze nie ma w biblitece


Zasilanie bateryjne - chętnie to dopiszę dla urządzenia wykonawczego - tylko potrzebowałbym kogoś, kto z tego korzysta. Trzeba by ustalić skąd brać informację o stanie naładowania i o żywotności baterii.

Zasilanie bateryjne może też dotyczyć samego kanału (np. termometr na oddalonym urządzeniu z RF) - wtedy taką implementację trzeba zrobić dla tego konkretnego kanału. Tylko to już bardziej dotyczy urządzeń typu "bramka" - w tym przypadku np. bramka RF.

Także wydaje mi się, że sytuacji jest sporo. Kokretne rozwiązania będzie łatwiej opracować na konkretnych przykładach.
krycha88
Posty: 802
Rejestracja: pt lis 16, 2018 7:25 am

pt lip 17, 2020 11:24 am

klew pisze:
pt lip 17, 2020 11:13 am
Co do wyboru kanału "0", to ja osobiście mam wątpliwości. Wszystko jest fajnie, jeśli Twoje urządzenie obsługuje jedną funkcję (albo kilka mocno powiązanych ze sobą kanałów - np. stacja pogodowa). Ale jeśli stacja pogodowa jest postawiona przy bramie przesuwnej i przy okazji ten sam układ obsługuje przekaźnik od bramy, to chyba chciałbym mieć przynajmniej dwa przyciski "i" - jeden w lokalizacji stacji pogodowej, a drugi w lokalizacji bramy - tak abym nie musiał pamiętać, że przekaźnik od bramy jest na tym samym urządzeniu, co stacja pogodowa i tam gdzieś szukać "i".
O tym przypadku nie pomyślałem, który to zburzył moją koncepcję :)
Awatar użytkownika
klew
Posty: 1293
Rejestracja: czw cze 27, 2019 12:16 pm

pt lip 17, 2020 10:32 pm

Wspracie dla Arduino Mega z Ethernet Shield już też jest w biblitece.
lukfud
Posty: 552
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pt lip 24, 2020 9:40 am

Zaktualizowałem bibliotekę, wrzuciłem kompilację na wemosa, widzę dodatkową ikonę "i" ale przy tapnięciu w nią nic się nie dzieje. Nie pokazuje się dodatkowe okno.
Wersja app 2.3.44 (mate 20 lite) na svr30.
Patryk
Posty: 888
Rejestracja: pn sty 07, 2019 7:51 pm

pt lip 24, 2020 9:43 am

lukfud pisze:
pt lip 24, 2020 9:40 am
Zaktualizowałem bibliotekę, wrzuciłem kompilację na wemosa, widzę dodatkową ikonę "i" ale przy tapnięciu w nią nic się nie dzieje. Nie pokazuje się dodatkowe okno.
Wersja app 2.3.44 (mate 20 lite) na svr30.
viewtopic.php?p=73217#p73217
Awatar użytkownika
pzygmunt
Posty: 9386
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontaktowanie:

pt lip 24, 2020 10:02 am

lukfud pisze:
pt lip 24, 2020 9:40 am
Zaktualizowałem bibliotekę, wrzuciłem kompilację na wemosa, widzę dodatkową ikonę "i" ale przy tapnięciu w nią nic się nie dzieje. Nie pokazuje się dodatkowe okno.
Wersja app 2.3.44 (mate 20 lite) na svr30.
To oznacza, że Twoje urządzenie nie odpowiada poprawnie na żądanie aplikacji klienckiej.
ODPOWIEDZ

Wróć do „Arduino IDE”