-
21. Data: 2022-08-10 23:26:26
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: heby <h...@p...onet.pl>
On 10/08/2022 22:06, Marek wrote:
> On Wed, 10 Aug 2022 20:41:36 +0200, heby <h...@p...onet.pl> wrote:
>> Teraz, to się używa ESP8266/ESP32 do tego a nie jakieś PICe od migania
>> ledami ;)
> Uu pic32 od migania ledami, mocne.
Cieszymy się, że również zauwazyłeś emotkę na końcu zdania.
-
22. Data: 2022-08-12 11:25:32
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Piotr Gałka <p...@c...pl>
W dniu 2022-08-10 o 19:25, Atlantis pisze:
> Jeden if nie wykonywał się wcale, a
> część kodu w dalszej części była pomijana zupełnie z uwagi "break"
> umieszczony w złym miejscu. Efekt był taki, że kod przechodził dalej już
> po odebraniu nagłówka pakietu i nie pobierał pozostałych dwóch bajtów.
Ktoś się pomylił.
> Biblioteka w takiej formie działała tylko dlatego, że w wyniku innego
> błędu kod zawsze zakładał, że autoryzacja przeszła poprawnie. ;)
A potem znalazł i poprawił błąd :)
P.G.
-
23. Data: 2022-08-16 13:20:50
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Atlantis <m...@w...pl>
Ok, udało mi się trochę pchnąć do przodu prace nad biblioteką.
Na chwilę obecną działa już nie tylko wysyłanie wiadomości, ale także
jestem w stanie subskrybować temat i odbierać wiadomości od brokera.
Usunąłem większość najbardziej rzucających się w oczy błędów oraz
konstrukcji, które w pewnych sytuacjach powodowały zawieszanie się kodu.
Pozostało jeszcze kilka rzeczy do posprzatania i poprawienia, a na
chwilę obecną mierzę się z dziwnym błędem, którego nie potrafię
zdiagnozować.
Sytuacja wygląda następująco:
1. Broker (mosquitto) jest odpalony na Raspberry Pi.
2. Do brokera podłączone jest jedno z moich urządzeń na ESP8266, które
cyklicznie wrzuca dane na jeden temat.
3. Temat na brokerze podglądam za pomocą mosquitto_sub - faktycznie się
tam pojawiają.
3. Jednocześnie jestem w stanie wrzucać swoje własne dane zapomocą
mosquitto_pub - tetrafiają tam, gdzie powinny.
Dziwne zachowanie pojawia się w momencie, gdy do tego samego
brokera/tematu podpinam PIC32 z testowaną biblioteką. Normalnie loguje
się na brokerze i subskrybuje do tego tematu. Przez jakiś czas odbiera
rozsyłane dane pochodzące z ESP8266, ale potem przestaje (na brokerze
pojawiają się nadal). Dane, które wrzucam ręcznie (mosquitto_pub) nadal
docierają na PIC32.
Co może być przyczyną? Zakładam, że może za to odpowiadać jakaś
specyfika protokołu MQTT, której nie jestem świadom.
-
24. Data: 2022-08-17 18:58:36
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Mirek <m...@n...dev>
On 16.08.2022 13:20, Atlantis wrote:
> Dziwne zachowanie pojawia się w momencie, gdy do tego samego
> brokera/tematu podpinam PIC32 z testowaną biblioteką. Normalnie loguje
> się na brokerze i subskrybuje do tego tematu. Przez jakiś czas odbiera
> rozsyłane dane pochodzące z ESP8266, ale potem przestaje (na brokerze
> pojawiają się nadal). Dane, które wrzucam ręcznie (mosquitto_pub) nadal
> docierają na PIC32.
>
Czyli ręcznie wrzucasz pod ten sam temat i dochodzą, a od ESP nie dochodzą?
Zakładam, że qos i retained masz w obydwu przypadkach takie same?
Client-id unikalne? (!)
No to już czary musiały by być żeby jedno dochodziło drugie nie.
--
Mirek.
-
25. Data: 2022-08-18 11:03:02
Temat: Re: Biblioteka MQTT i dziwny kod w C
Od: Atlantis <m...@w...pl>
On 17.08.2022 18:58, Mirek wrote:
> Czyli ręcznie wrzucasz pod ten sam temat i dochodzą, a od ESP nie dochodzą?
> Zakładam, że qos i retained masz w obydwu przypadkach takie same?
> Client-id unikalne? (!)
> No to już czary musiały by być żeby jedno dochodziło drugie nie.
Ok, już znalazłem przyczynę. Tak jak piszesz - przepisując kod
zapomniałem o wywołaniu funkcji, która w przypadku wykrycia ustawionej
flagi QoS inicjowała odsyłanie potwierdzenia odebrania wiadomości
PUBLISH. Broker nie otrzymując potwierdzeń po jakimś czasie zaprzestawał
rozsyłania wiadomości do tego konkretnego subskrybenta. Natomiast
wiadomości wysyłane ręcznie nie miały ustawionej flagi, więc dochodziły
nadal.
Po uzupełnieniu kodu wszystko działa prawidłowo. Urządzenie pracuje już
prawie dobę i cały czas odbiera wiadomości z brokera. W oczy rzuciła mi
się natomiast inna kwestia - gdy sprawdzałem za pierwszym razem za
pomocą tcpdumpa (odpalonego na Raspberry Pi, gdzie pracuje broker) i
wiresharka, widziałem wszystkie pakiety.
Teraz natomiast wygląda to tak, jakby tcpdump nie rejestrował wiadomości
wychodzących od klienta (PUBACK, PINGREQ), chociaż wiadomości są
wysyłane i najwyraźniej docierają, bo powodują reakcję (np. w postaci
odesłania PINGRESP). Jakiś pomysł co może być przyczyną takiego stanu
rzeczy?