Skocz do zawartości

Fotopułapka na złodziei


MasterYoda95

Pomocna odpowiedź

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

(edytowany)

Okazjonalnie występują problemy z zawieszaniem się aplikacji serwera. Nie umiem znaleźć przyczyny w logach, ale mam przypuszczenie, że jest to związane z nieoczekiwanym zerwaniem połączenia, przez co serwer czeka na dane w nieskończoność.

Ostatnio poczytałem trochę o MQTT i uznałem, że można spróbować przepisać części programów odpowiedzialne za komunikację tak, żeby zamiast socketów, łączyły się przez ten właśnie protokół. Mam już RPi, więc postawiłem Mosquitto. Robię obsługę poszczególnych funkcji (zdjęcia, autentykacja, napięcie baterii) w oddzielnych callbackach, więc program upraszcza się nieco, bo nie muszę "ifować" po treści wiadomości, żeby wywołać odpowiedni kod do jej przetworzenia. Jeśli coś pojawi się w temacie BasementAlarm/batteryVoltage, to wiadomo co to jest i od razu wywoływana jest odpowiednia metoda.

Druga sprawa, to pozwoli to na kolejkowanie, gdyby połączenie było niestabilne. Zamierzam używać Quality of Service = 2 przy subskrypcji i persistent session dla serwera, a wszelkimi ewentualnymi zaburzeniami połączenia i dbaniem o to, żeby wiadomości dotarły zajmie się broker.

Na razie mam roboczo przepisaną aplikację serwera, trochę więcej zabawy będzie z kodem na ESP32. Ale póki co zamierzam przetestować serwer skryptami z poziomu PC - szybciej się debuguje. Póki co, nauczyłem się przesyłać zdjęcia przy pomocy pary skryptów: publishera i subskrybenta.

Jeśli starczy mi wytrwałości, to zaletą tego, że zmienię protokół komunikacji będzie też to, że przy okazji zrobię refactoring kodu. Bez "większego" celu nie chciałoby mi się tego robić, a w micropythonowych obiektach panuje lekki bałagan 🙂 Nie wiem tylko czy istnieje siła, która zmusiłaby mnie do zrobienia dokumentacji 😛

EDIT: Aplikacja serwerowa już prawidłowo łączy się z Mosquitto i prawidłowo reaguje na nadsyłane komendy oraz zdjęcia. Działa to tak jak zakładałem - dzięki persistent session, nawet jeśli aplikacja na raspberry nie jest podłączona do brokera, a klient w tym czasie prześle do niego dane, to po uruchomieniu serwera dane są mu przekazywane, nie giną.

Pora przerobić oprogramowanie ESP32.

Edytowano przez MasterYoda95
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

No i dokonałem: komunikacja między alarmem i serwerem odbywa się już wyłącznie przez brokera MQTT. Ciekawe jest dla mnie to, że teraz ESP działa szybciej (operacja wykonania i przesłania zdjęcia zajmuje mniej czasu), a przecież MQTT jest zbudowane na TCP, więc używane wcześniej przeze mnie sockety są rozwiązaniem niższego poziomu (czy warstwy, nie znam się na sieciach) i sądziłem że powinny działać szybciej. Albo po prostu nieefektywnie je wykorzystywałem. Dodatkowo przesył przez MQTT oznacza konieczność przesłania wiadomości najpierw do brokera, a potem do aplikacji serwera, a jednak działa to szybciej 🙂

W każdym razie logika alarmu i serwera nie zmieniła się, ale szybkość i niezawodność po tej zmianie wzrosła.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.