Sceny inteligentnego domu mogą kończyć się w różnej kolejności, ponieważ MQTT zachowuje jedynie ograniczoną kolejność dostarczania, a ponowne dostarczanie, współbieżność i wykonywanie poleceń przez urządzenia wprowadzają osobne osie czasu.
Scena może opublikować polecenia dla lampy, rolety, głośnika i termostatu przed przerwą w połączeniu Wi-Fi. Po ponownym połączeniu niepotwierdzona wiadomość QoS może zostać dostarczona ponownie, podczas gdy późniejsze polecenia lub inne tematy będą przechodzić przez różne kolejki. Ostateczna kolejność obserwowana w domu zależy od kolejności u brokera, współbieżności subskrybentów, zachowanego stanu, obsługi duplikatów oraz czasu fizycznego wykonania poleceń przez każde urządzenie.
MQTT porządkuje pakiety w wąskim zakresie protokołu
TCP zachowuje kolejność bajtów w ramach jednego połączenia, a MQTT definiuje uporządkowaną obsługę przepływów przy określonych warunkach QoS i liczbie wiadomości będących w toku. Nie tworzy jednak jednej globalnej kolejności między publikującymi, tematami, trasami brokera, subskrybentami i kontrolerami urządzeń.
Maksymalna liczba odbieranych wiadomości MQTT wyjaśnia, jak parametr Receive Maximum w MQTT 5 ogranicza niepotwierdzone publikacje QoS 1 i QoS 2. Ustawienie wartości jeden wzmacnia uporządkowane przetwarzanie na połączeniu, podczas gdy większe wartości zapewniają wyższą przepustowość i umożliwiają równoległą obsługę większej liczby wiadomości będących w toku.
Scena rozłożona na kilka tematów nie ma zatem uniwersalnej sekwencji tylko dlatego, że wywołania publikacji zostały wykonane w określonej kolejności. Jeden subskrybent może przetwarzać wiadomości szeregowo, podczas gdy inny uruchamia wywołania zwrotne współbieżnie, a ich potwierdzenia opisują transfer wiadomości, a nie zakończenie fizycznej czynności.
Ponowne dostarczenie przywraca wcześniejsze polecenie w późniejszym stanie
QoS 1 zapewnia dostarczanie co najmniej raz, więc niepotwierdzona publikacja może pojawić się ponownie po ponownym połączeniu, z ustawioną flagą duplikatu. QoS 2 dodaje uzgadnianie, aby dostarczyć wiadomość aplikacji odbierającej dokładnie raz, ale utrata sesji lub ponowienia na poziomie aplikacji nadal mogą tworzyć nowe polecenia logiczne.
dostarczanie co najmniej raz porównuje QoS 0, 1 i 2 oraz pokazuje, jak wymiany potwierdzeń równoważą przepustowość z niezawodnością dostarczania. Najważniejsza konsekwencja dla scen jest taka, że poziom niezawodności reguluje transfer wiadomości, a nie to, czy operacja urządzenia jest aktualna lub bezpieczna do powtórzenia.
Jeśli polecenie A zostanie dostarczone ponownie po tym, jak polecenie B zmieniło już urządzenie, stan końcowy może się cofnąć. Polecenia powinny zawierać identyfikator sceny, identyfikator kroku, wersję stanu docelowego, czas wygaśnięcia oraz możliwość idempotentnego zastosowania, aby można było rozpoznać spóźniony duplikat zamiast wykonywać go jako nowe polecenie.
Kolejność zakończenia działań urządzeń różni się od kolejności nadejścia wiadomości
Żarówka może natychmiast potwierdzić polecenie, roleta może poruszać się przez dwadzieścia sekund, a most termostatu może wewnętrznie kolejkować zadania. Równoległe subskrypcje, mosty protokołów, uśpione urządzenia i limity szybkości mogą zmienić kolejność zakończenia działań, nawet gdy dostarczanie MQTT jest całkowicie uporządkowane.
kolejki trwałych sesji opisują trwałe sesje i kolejkowane wiadomości, które pozwalają brokerowi zachować stan subskrypcji i QoS, gdy klient jest offline. Odzyskiwanie ciągłości działania jest lepsze, ale zakolejkowane zadania mogą reprezentować stare stany docelowe, jeśli aplikacja nie dołączy do nich informacji o wygaśnięciu i wersji.
Trudność polega na wymaganiu od samego MQTT ścisłej globalnej kolejności. Szeregowanie każdej wiadomości może ograniczyć zmiany kolejności na poziomie protokołu, ale nie zsynchronizuje urządzeń fizycznych ani nie cofnie nieaktualnych poleceń. Silnik scen musi śledzić stan docelowy i warunki zakończenia ponad warstwą transportową.
Śledź jedną scenę podczas rozłączenia i ponownego dostarczania
Opublikuj scenę z ponumerowanymi poleceniami w jednym temacie, a następnie w kilku tematach. Rozłącz się przed potwierdzeniem, połącz ponownie z różnymi wartościami Receive Maximum i uruchom subskrybentów w trybie szeregowym oraz współbieżnym, rejestrując identyfikatory pakietów, flagi duplikatów, wersje scen, momenty nadejścia, potwierdzenia i zakończenie działań urządzeń.
Wykorzystaj rozróżnienie czasu zdarzenia opisane w czasie zdarzenia w inteligentnym domu, aby porównać kolejność u brokera, kolejność u subskrybenta i kolejność zakończenia działań fizycznych. Dodaj wygasanie i idempotencję, a następnie sprawdź, czy spóźniony duplikat nie może przywrócić starszego stanu docelowego. To rozróżnienie pozostaje widoczne podczas późniejszych testów w domu.
Wymagaj globalnego uporządkowania tylko w przypadku kroków, których zależność rzeczywiście tego wymaga. W przypadku niezależnych urządzeń zachowaj współbieżność i zdefiniuj barierę zakończenia sceny; w przypadku kroków zależnych użyj jednego nadrzędnego automatu stanów, zamiast zakładać, że QoS warstwy transportowej jest silnikiem obsługi procesów.
Centrum Technologii i Sztucznej Inteligencji
Więcej do przeczytania

Dlaczego pobór mocy GPU gwałtownie wzrasta na początku lokalnego żądania wnioskowania?
Zobacz, jak zwiększanie taktowania GPU, wstępne przetwarzanie modelu, inicjalizacja jądra, przydzielanie pamięci i odstępy między próbkowaniami powodują skoki poboru mocy na początku wnioskowania.

Dlaczego ranking wyszukiwania wektorowego zmienia się, gdy jednocześnie przeszukiwanych jest wiele segmentów indeksu?
Dowiedz się, jak limity kandydatów dla poszczególnych segmentów, przybliżone grafy, kalibracja wyników, aktualizacje i konsolidacja zmieniają ranking prywatnego wyszukiwania wektorowego.

Dlaczego grupy duplikatów zdjęć dzielą się po edycji metadanych?
Zobacz, jak dokładne skróty, skróty percepcyjne, orientacja EXIF, znaczniki czasu, wartości progowe i wersje potoku powodują podział prywatnych grup duplikatów zdjęć.

