CHANNELSTATE w bibliotece Arduino

Juszczaczek1
Posts: 389
Joined: Sun Nov 08, 2020 3:41 pm
Been thanked: 2 times

Post

klew wrote: Fri Jul 24, 2020 1:38 pm Nadal używam tej samej listy.

Aktualne znaczenie jest takie:
0 - stan nieznany - tego nigdy na oczy nie zobaczysz
1 - activity timeout - występuje, gdy urządzenie jest poprawnie zarejestrowane, ale przestaje dostawać odpowiedzi od serwera Supli (brak opdowiedzi na Suplowy ping)
2 - WiFi connection lost - jak nazwa wskazuje ;). Poza tym chciałem tego użyć w przypadku odłączenia kabla dla Arduino Mega na Ethernecie. Niestety Ethernet Shield z W5100 nie raportuje odłączenia kabla, więc może się pojawić tylko na nowszych Ethernet Shieldach (5200 i 5500 - o ile dobrze pamiętam)
3 - Server connection lost - pojawia się gdy zostanie zerwane połączenie na warstwie TCP/IP. Czyli serwer żyje, jest dostępny, ale socket został zamknięty. W praktyce pojawia się przy każdej zmianie konfiguracji na serwerze - wtedy resetowane są wszystkie połączenia przez serwer

Lista ta będzie trochę zmieniona i docelowo aplikacja ma pokazywać jakieś krótkie nazwy zamiast cyferek.
Często wyskakuje mi cyferka 3 co to może oznaczać tak po chłopsku?
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Juszczaczek1 wrote: Sun Feb 14, 2021 6:28 pm
3 - Server connection lost - pojawia się gdy zostanie zerwane połączenie na warstwie TCP/IP. Czyli serwer żyje, jest dostępny, ale socket został zamknięty. W praktyce pojawia się przy każdej zmianie konfiguracji na serwerze - wtedy resetowane są wszystkie połączenia przez serwer
Często wyskakuje mi cyferka 3 co to może oznaczać tak po chłopsku?
[/quote]

Dokładnie to co w opisie powyżej. 3 oznacza zamknięcie połączenia. Serwer zamyka wszystkie połączenia, gdy zrobisz jakąkolwiek zmianę ustawień w cloud
Najlepsze suple dla Twojego domu :mrgreen:
Juszczaczek1
Posts: 389
Joined: Sun Nov 08, 2020 3:41 pm
Been thanked: 2 times

Post

Ale ja nic nie robiłem w cloud
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

To może coś związanego z Twoją siecią?
Najlepsze suple dla Twojego domu :mrgreen:
fly.high
Posts: 44
Joined: Wed Nov 25, 2020 8:35 pm

Post

@klew, mam dokładnie tak samo jak przedmówca.
Na sofcie Multisonoff od @lukfud zarówno na sonoff mini jak i na loratap dokładnie co 60 sekund następuje zerwanie połączenia w aplikacji, kod 3 w ikonce (i). Na 1 sekundę kanał zmienia się na czerwono, zaraz znów zielony i tak przez 59 sekund.
Na fabrycznym sofcie srw-01 tego nie ma, na sonoff Basic z softem 2.7.2 nie modyfikowanym też nic takiego się nie dzieje.
Utworzyłem hotspot z telefonu, nie zrywa.
Adres serwera Supli - wpisalem z palca IP w konfigu - też nie pomogło.
Routery - 2x TP-Link Deco M4. Specjalnie dla tych urządzeń z softem Multisonoff wyłączyłem mesh.
Co może być powodem?

Edit:
Wyłączyłem opcje SIP ALG (to coś od rozmów VoIP) wyłączyłem Beamforming (kierowanie wiązki wifi do urządzenia celem poprawienia stabilności połączenia - mhm, już to widzę :lol: ) na routerze. Nie wiem które pomogło :D
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

klew wrote: Fri Jul 24, 2020 1:38 pm Nadal używam tej samej listy.

Aktualne znaczenie jest takie:
0 - stan nieznany - tego nigdy na oczy nie zobaczysz
1 - activity timeout - występuje, gdy urządzenie jest poprawnie zarejestrowane, ale przestaje dostawać odpowiedzi od serwera Supli (brak opdowiedzi na Suplowy ping)
2 - WiFi connection lost - jak nazwa wskazuje ;). Poza tym chciałem tego użyć w przypadku odłączenia kabla dla Arduino Mega na Ethernecie. Niestety Ethernet Shield z W5100 nie raportuje odłączenia kabla, więc może się pojawić tylko na nowszych Ethernet Shieldach (5200 i 5500 - o ile dobrze pamiętam)
3 - Server connection lost - pojawia się gdy zostanie zerwane połączenie na warstwie TCP/IP. Czyli serwer żyje, jest dostępny, ale socket został zamknięty. W praktyce pojawia się przy każdej zmianie konfiguracji na serwerze - wtedy resetowane są wszystkie połączenia przez serwer

Lista ta będzie trochę zmieniona i docelowo aplikacja ma pokazywać jakieś krótkie nazwy zamiast cyferek.
Nie wiem jak tam u Ciebie z czasem, ale może kiedyś w wolnym czasie:
" ... i docelowo aplikacja ma pokazywać jakieś krótkie nazwy zamiast cyferek. "
Ps.
Dziś miałem powód restartu: 1, i co ja się naszukałem tego posta.
User avatar
klew
Posts: 13905
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 134 times
Been thanked: 137 times

Post

Patryk wrote: Tue Sep 07, 2021 4:15 pm Nie wiem jak tam u Ciebie z czasem, ale może kiedyś w wolnym czasie:
" ... i docelowo aplikacja ma pokazywać jakieś krótkie nazwy zamiast cyferek. "
Ps.
Dziś miałem powód restartu: 1, i co ja się naszukałem tego posta.
Osobiście apek na telefony nie dotykam :) ale przekazałem temat dalej.
Najlepsze suple dla Twojego domu :mrgreen:
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

User avatar
vajera
Posts: 7287
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

klew wrote: Fri Oct 30, 2020 7:22 am
andrew01 wrote: Thu Oct 29, 2020 7:02 pm @klew - czy mógłbyś podpowiedzieć w jaki sposób do channel_state dodać własne informacje? Chciałbym dodać informacje o poziomie baterii, napięciu i rssi z czujników temperatury Xiaomi. Mam te dane wyciągnięte, w sensie przechowuję je w zmiennych, tylko nie wiem jak je wrzucić do channel_state.

Pozdrawiam
Andrzej
Musisz w obiekcie czujnika zaimplementować metodę:

Code: Select all

 virtual void handleGetChannelState(TDSC_ChannelState &channelState);
Przykład jest np w LightRelay: https://github.com/klew/arduino/blob/1d ... ay.cpp#L38

Tutaj jest definicja struktury, którą możesz wypełnić danymi:
https://github.com/klew/arduino/blob/1d ... to.h#L1486
Dodając jakiś parametr (np. battery level) musisz też dodać flagę dotyczącą baterii (flagi są zdefiniowane nad definicją struktury w proto.h).

W metodzie handleGetChannelState otrzymasz referencje na parametr channelState. On będzie wstępnie wypełniony danymi (uptime z SuplaDevice, dane o sieci z interfejsu sieciowego). Oczywiście RSSI i inne możesz sobie nadpisać.
Tutaj możesz zobaczyć, jak przeliczamy RSSI do % zasięgu: https://github.com/klew/arduino/blob/1d ... ifi.h#L194
Straciłem cały wieczór próbując rozkminić dlaczego powyższe rozwiązanie nie działa i w końcu znalazłem odpowiedź, jak zawsze w takich przypadkach niezwykle banalną. Wrzucam ją tutaj bo może pomoże komuś w przyszłości a nie znalazłem tej informacji nigdzie na forum.

Gdzieś na przestrzeni lat @klew zmienił definicję metody handleGetChannelState z:

Code: Select all

 virtual void handleGetChannelState(TDSC_ChannelState &channelState);
na:

Code: Select all

 virtual void handleGetChannelState(TDSC_ChannelState *channelState);
Niestety link do przykładu w tym poście wskazuje na nieuaktualniony kod, więc kod formalnie poprawny nie miał szansy zadziałać.
Oczywiście kod w głównym repozytorium Supla Device jak najbardziej działa.

https://github.com/SUPLA/supla-device/b ... _relay.cpp
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277

Return to “Arduino IDE”