Tengo varios módulos ESP que se conectan a un ANDROID por medio de MQTT al primer inicio todo funciona bien, pero si reseteo el ESP este no recibe información del ANDROID pero este ultimo si recibe el conexión del ESP, al resetear nuevamente vuelve a funcionar y así indefinidamente, imagino que algo me estoy saltando pero yo probé de todo y no encuentro que es.
Adjunto la parte correspondiente al MQTT
ANDROID:
B4R:
Adjunto la parte correspondiente al MQTT
ANDROID:
B4X:
'------------------------------------------------
Sub Process_Globals
Private Broker AsMqttBroker
Private Client AsMqttClient
Public Users AsList
EndSub
Sub Service_Create
Broker.Initialize("", 4120)
Broker.DebugLog = False
Broker.Start
Users.Initialize
Client.Initialize("client", "tcp://127.0.0.1:4120" , "ANDROID")
Client.Connect
End Sub
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
Return True
End Sub
Sub Service_Destroy
Client.Close
Broker.Stop
EndSub
Sub Client_Connected (Success As Boolean)
If Success Then
Client.Subscribe("sensores/#" , 0)
Client.Publish2("sensores/connect","pc".GetBytes("UTF8"),0,True)
EndIf
EndSub
Sub Client_MessageArrived (Topic As String, Payload() As Byte)
Dim PayLoadStr As String = BytesToString(Payload, 0, Payload.Length, "utf8")
If Topic="sensores/user"Then
CallSub2(Main,"AgregarSensor",PayLoadStr)
Return
EndIf
If Topic="sensores/connect" Or Topic="sensores/disconnect" Then
Dim index As Int = Users.IndexOf(PayLoadStr)
If Topic.EndsWith("connect") And index = -1 Then Users.Add(PayLoadStr)
If Topic.EndsWith("disconnect") And index >= 0Then Users.RemoveAt(index)
Client.Publish2("sensores/users", Payload, 0, False)
Elseif Topic = "sensores/users" Then
EndIf
‘Proceso el nuevo mensaje
CallSub2(Main, "NuevoMensajeMQTT",Topic & ":" & PayLoadStr )
If Topic = "temperaturas"Then
Log("Temperatura " & PayLoadStr)
EndIf
End Sub
Public Sub Enviar(Topic AsString,Payload AsString)
If Topic=""Or Topic=NullThenReturn
Log("TOPIC " & Topic & " Texto " & Payload)
Client.Publish2(Topic,Payload.GetBytes("UTF8"),0,False)
End Sub
B4R:
B4X:
Sub Process_Globals
Private mqtt As MqttClient
Private client As WiFiSocket
Private BC As ByteConverter
EndSub
Public Sub Iniciar()
mqtt.Initialize(client.Stream, Main.AndroidIP, 4120, ChipID, "Mqtt_MessageArrived", "Mqtt_Disconnected")
MQTTConnect(0)
EndSub
Private Sub Resetear(T As Byte)
Main.Resetear
EndSub
Private Sub Alarma(Pitidos As Byte)
Main.alarma(Pitidos)
EndSub
Sub MQTTConnect(unused As Byte)
client.Close
mqtt.Initialize(client.Stream, Main.AndroidIP, 4120, ChipID, "Mqtt_MessageArrived", "Mqtt_Disconnected")
If mqtt.Connect = False Then
CallSubPlus("MQTTConnect", 1000, 0)
Return
EndIf
mqtt.Subscribe(ChipID , 0)
mqtt.Publish("sensores/disconnect",ChipID)
mqtt.Publish("sensores/connect",ChipID)
mqtt.Publish("sensores/user",ChipID.GetBytes) 'Agrego mi usuario al servidor
EndSub
Sub Mqtt_Disconnected()
Log("MQTT Desconectado del BROKER")
MQTTConnect(0)
EndSub
Sub Enviar(S() As Byte)
mqtt.Publish(JoinStrings(ArrayAsString("sensores/",ChipID)),S)
EndSub
Sub ChipID() As String ‘crea un identificador con ESP+ultimo digito IP o sea ESP040, ESP041, ESP042
EndSub
Sub Mqtt_MessageArrived (Topic AsString, Payload() As Byte)
Log("TOPIC: ",Topic," COMANDO: ",Payload)
If BC.IndexOf(Payload, "VERDE=1") <> -1Then Main.PrenderLEDVerde
If BC.IndexOf(Payload, "VERDE=0") <> -1Then Main.ApagarLEDVerde
EndSub