Cieszymy się, że również zauwazyłeś emotkę na końcu zdania.
Cieszymy się, że również zauwazyłeś emotkę na końcu zdania.
W dniu 2022-08-10 o 19:25, Atlantis pisze:
Ktoś się pomylił.
A potem znalazł i poprawił błąd :) P.G.
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:
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.
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?
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.