I utgangspunktet reduserer MQTT ventetid der det er relativt høy ventetid som Wi-Fi ved å holde TCP-tilkoblingen i live slik at data kan publiseres og mottas veldig raskt. Den bruker port 1883 og ikke 80. Slik jeg forstår det, kobler utgivere og abonnenter en gang til megleren og deretter pingler megleren regelmessig for å holde forbindelsen i live; hvor ofte megleren pinges, avhenger av den avtalt levetid. MQTT-pakker er også betydelig mindre enn HTTP-forespørsler. Hvis forbindelsen på en eller annen måte er brutt, prøver klienten gjentatte ganger å gjenopprette forbindelsen, og når den lykkes, abonnerer abonnentene på nytt.
Abonnenter definerer tilbakeringinger som blir ringt opp etter at et emne er oppdatert av noen utgivere. . MQTT er best for tidskritiske jobber der HTTP-forespørsler bare vil ta for lang tid, og hvor det er ønskelig å varsle raskt om endrede emner. Jeg er ikke sikker, men det vil sannsynligvis forbruke mer batteristrøm, siden det er saken om en konstant TCP-kobling til megleren.
Siden du bare forventer dataoppdateringer hvert minutt, tror jeg det er mer fornuftig å koble til og FÅ feeddataene fra serveren hvert 60. sekund. Du kan bruke feedets Sist oppdatert
tidsstempel (hvis det ikke finnes, opprett et) for å sjekke om feedet er oppdatert av Arduino ennå. En MQTT-teknikk vil tilbringe mesteparten av tiden koblet til en megler uten grunn, siden du allerede vet at oppdateringshendelsene skjer hvert minutt; det er betydelig tid og krefter brukt på å vente på forutsigbare data.
Du kan imidlertid vente i omtrent 55 sekunder, abonnere på emnet, og når du får de nye dataene, kobler du av og deretter venter i 55 sekunder igjen, selv om jeg ikke vet om dette vil være mye forbedring i forhold til REST. Hvis du bruker denne metoden, kan du også stille levetiden til omtrent ti sekunder, slik at Arduino har nok tid til å oppdatere strømmen før appen din blir varslet, og det er ikke behov for vanlige pinger.
Hvis du bestemmer deg for å gå med MQTT, kan du sjekke ut dette Arduino-biblioteket.