Hi,
After several tests, here is the code I am currently using:
== Cyclic Section ==
@MQTTConnection()
// Your MQTT Publish here if (MQTTComOK% = 1)
== Init Section ==
MQTTComOK% = 0
@InitMQTTConnection()
== User Section ==
FUNCTION InitMQTTConnection()
FirstConnection% = 1
MQTT "close"
LastEtatWan% = @WANState%() //use in @MQTTConnection()
IF LastEtatWan% = 1 THEN
PRINT "WAN UP"
ELSE
PRINT "WAN DOWN"
ENDIF
ENDFN
FUNCTION WANState%()
SETSYS INF, "LOAD"
$IP$ = GETSYS INF, "VPNIP"
IF($IP$ = "0.0.0.0") THEN
$WANState% = 0
ELSE
$WANState% = 1
ENDIF
ENDFN
FUNCTION MQTTConnection()
$EtatWAN% = @WANState%()
IF (($EtatWAN% = 1) And (FirstConnection% = 1)) Then
@openMQTT_Azure()
ONMQTTSTATUS '@MQTT_StatusChange(MQTT("status"))'
MQTT "Connect"
FirstConnection% = 0
ENDIF
IF (($EtatWAN% = 1) And (LastEtatWan% = 0)) Then
PRINT "WAN is now up"
LastEtatWan% = 1
ENDIF
IF (($EtatWAN% = 0) And (LastEtatWan% = 1)) Then
PRINT "WAN is now down"
LastEtatWan% = 0
ENDIF
ENDFN
FUNCTION MQTT_StatusChange($status%)
IF $status% = 5 Then
MQTTComOK% = 1
PRINT "MQTT connected: "; $status%
ELSE
MQTTComOK% = 0
PRINT "MQTT disconnected:"; $status%
ENDIF
ENDFN
FUNCTION openMQTT_Azure()
IoTHub$ = "Your Hub"
DeviceID$ = "Your Device"
SASToken$ = "Your SASToken"
QoS% = 1 //Quality of Service Values
RMFV% = 0 //Retained Message Feature Values
MQTT "open", DeviceID$, IoTHub$+".azure-devices.net"
MQTT "setparam", "port", "8883"
MQTT "setparam", "keepalive", "30"
MQTT "setparam", "username", IoTHub$+".azure-devices.net"+"/"+DeviceID$+"/api-version=2017-11-11"
MQTT "setparam", "password", SASToken$
MQTT "setparam", "CAFile", "/usr/CA_Azure/BaltimoreCyberTrustRoot.pem"
MQTT "setparam", "CleanSession", "1"
MQTT "setparam", "ProtocolVersion", "3.1.1"
MQTT "setparam", "TLSVersion", "tlsv1.2"
MQTT "setparam", "log", "1"
MQTT "setparam", "MaxInFlight", "50"
PRINT 'MQTT:"open and setparam" with Azure'
ENDFN
With QoS = 1, my publish data is stored for 50 transactions.