Go Down

Topic: Ri-connessione WiFi senza bloccare il loop (Read 438 times) previous topic - next topic

khriss75

Hai centrato in pieno il problema (mio problema  ::) ), purtroppo (anche se in caso remoto) la connessione mqtt può interrompersi anche se quella wifi è attiva.
Nelle mie simulazioni, ho spento il wifi, con un controllo allo stato del wifi posso quindi bypassare il tentativo di connessione a mqtt e di conseguenza non ho problemi di blocco del loop:  if wifi non connesso --> non controllare connessione mqtt.

Se però spengo il server mqtt (broker) allora tutto si blocca. E' pur vero che può sembrare stupido cercare di far funzionare qualcosa che si basa su mqtt quando il suo broker è spento, ma se io posso avere la necessita di attivare un qualcosa semplicemente premendo un pulsante (anche se via mqtt non verrà inviato il comando).
Tutto qua (si fa per dire...).

nid69ita

Beh può capitare che sei in wifi, rete okay ma server broker KO.
Hai visto al link che ti ho postato ?   Comando mqttClient.connected()
my name is IGOR, not AIGOR

khriss75

Si, conosco il comando "mqttClient.connected()"
In pratica nel codice si mette proprio un if e se il client è connesso gli passo i dati.
Il problema è che se arrivi proprio a quel if e non è connesso, blocca il tutto per 5 secondi (nel migliore dei casi) cercando di connettersi al broker. Leggendo qua e la, la libreria si appoggia alla libreria wifi.h per i timing, ma qua per me diventa cmpo un poco troppo complesso.
Spesso mi rimane li bloccato per molto più tempo.

nid69ita

#18
Aug 23, 2019, 11:25 am Last Edit: Aug 23, 2019, 11:27 am by nid69ita
Verifica se anche la libreria mqtt per Arduino ha il comando setConnectionTimeout()
Mi pare ci sia: LINK

Ne parlano qui, ma per libreria Java
my name is IGOR, not AIGOR

khriss75

Dunque dunque...
Ho aperto PubSubClient.h (ovviamente nella cartella che viene richiamata dalla compilazione dello sketch) ed ho sostituito qua:

Code: [Select]
// MQTT_KEEPALIVE : keepAlive interval in Seconds
#ifndef MQTT_KEEPALIVE
#define MQTT_KEEPALIVE 1
#endif

// MQTT_SOCKET_TIMEOUT: socket timeout interval in Seconds
#ifndef MQTT_SOCKET_TIMEOUT
#define MQTT_SOCKET_TIMEOUT 1
#endif


Prima i valori MQTT_KEEALIVE e SOCKET_TIMEOUT erano a 15.

Purtroppo non è cambiato nulla dopo aver ricompilato.

Stando a quello che si dice qua Pubsubclient_API sembrano le voci che effettivamente devo modificare...

Federico66


Ad occhio e croce direi che MQTT_KEEPALIVE, in ogni caso, devi lasciarlo a 15!

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

khriss75

Ciao Federico, si, verificando bene meglio lasciare il KEEPALIVE a 15 sec.

Pare che il problema sia nella libreria wifi esp8266 rilasciata dopo la versione 2.5.2

Go Up