[MQTT SCRIPT] WAN Interface not yet ready

Hi.
I have a problem with WAN communication, this is the error when I run BASIC IDE.

[]Operation failed (28) 46 : Mqtt “Connect”
[
][MQTT SCRIPT] WAN Interface not yet ready
[*]Not connected (2)

This is the code I am running in BASIC IDE

//################" CONFIGURATION #################
DeviceId$="Pepsico_G"
IotHubName$ ="IotHubMargarita"

Changepushtime% = 610 //Timer to push only Tags that has changed
Fullpushtime% = 60// Timer to push all values
//Select the Tag Group to publish -> 0 or 1
//Tag must be created and at least set in one of the groups.
GROUPA% = 1
GROUPB% = 0
GROUPC% = 0
GROUPD% = 0

// /usr directory operations to do :
// 1. Generate a Self-Signed certificate using
//    openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -keyout ReplaceByDeviceID.key -out ReplaceByDeviceID.crt -config openssl.cnf
// 2. Rename the cert and the key with the DeviceID (<DeviceID>.crt and <DeviceID>.key)
// 3. Upload the self-signed cert + the key + the baltimoreCA certificate to the /usr
// 4. Start the script -> You should see some "PUBLISH..." logs in the console.
// 5. Do not forget to select Run > Autorun in order to have the script running at boot

//################"END CONFIGURATION ##############

CLS

//Read number of Tags
NB%= GETSYS PRG,"NBTAGS"
DIM a(NB%,2)

MQTT "Open",DeviceId$,IotHubName$ + ".azure-devices.net"
Mqtt "SetParam","Port","8883"
MQTT "setparam", "log", "1"
MQTT "setparam", "keepalive", "20"
MQTT "setparam", "TLSVERSION", "tlsv1.2"
MQTT "setparam", "PROTOCOLVERSION", "3.1.1"
MQTT "setparam", "cafile","/usr/BaltimoreCyberTrustRoot.pem"
MQTT "setparam", "CertFile","/usr/"+DeviceId$+".crt"
MQTT "setparam", "KeyFile","/usr/"+DeviceId$+".key"
Mqtt "SetParam","Username",IotHubName$+ ".azure-devices.net/"+DeviceId$+"/api-version=2016-11-14"
Mqtt "SetParam","Password","HostName="+IotHubName$+";DeviceID="+DeviceId$+";x509=true"

SETSYS PRG,"RESUMENEXT",1  //Continue in case of error at MQTT "CONNECT"
Mqtt "Connect"
ErrorReturned% = GETSYS PRG,"LSTERR"
IF ErrorReturned% = 28 THEN @Log("[MQTT SCRIPT] WAN interface not yet ready")
SETSYS PRG,"RESUMENEXT",0

ONMQTT "GOTO MqttRx"

//a = table with 2 columns : one with the negative indice of the tag and the second one with 1 if the values of the tag change or 0 otherwise
IsConnected:
//Record the Tag ONCHANGE events into an array.
//Allows to post only values that have changed
FOR i% = 0 TO NB%-1
k%=i%+1
SETSYS Tag, "load",-i%
a(k%,1)=-i%
a(k%,2) = 0
GroupA$= GETSYS TAG,"IVGROUPA"
GroupB$= GETSYS TAG,"IVGROUPB"
GroupC$= GETSYS TAG,"IVGROUPC"
GroupD$= GETSYS TAG,"IVGROUPD"

IF GroupA$ = "1" And GROUPA%= 1 THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupB$ = "1" And GROUPB%= 1 THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupC$ = "1" And GROUPC%= 1 THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
IF GroupD$ = "1" And GROUPD%= 1 THEN Onchange -i%, "a("+ STR$ k%+",2)= 1"
NEXT i%

ONTIMER 1,"goto MqttPublishAllValue" // "goto MqttPublishChangedValue"

TSET 1,Fullpushtime%
TSET 2,Changepushtime%
END

//Compute the right time format for AZURE
Function GetTime$()
  $a$ = Time$
  $GetTime$ = $a$(7 To 10) + "-" + $a$(4 To 5) + "-" + $a$(1 To 2) + " " + $a$(12 To 13)+":"+$a$(15 To 16)+":"+$a$(18 To 19)
EndFn

//Publish just the changed tags
MqttPublishChangedValue:
counter% = 0

//Compute JSON
json$ = '{'
FOR r% = 1 TO NB%
IF a( r%,2) = 1 THEN
  a(r%,2) = 0
  negIndex% = a(r%,1)
  SETSYS Tag, "LOAD", negIndex%
  name$= GETSYS Tag, "name"
  json$ = json$ + '"' + name$+ '":"'+STR$ GETIO name$ + '",'
  counter% = counter% +1
ENDIF
NEXT r%
json$ = json$ +    '"time": "'+@GetTime$()+'"'
json$ = json$ +    '}'

IF counter% > 0 THEN
MQTT "PUBLISH","devices/"+DeviceID$+"/messages/events/",json$, 0, 0
PRINT "[PUBLISH ONCHANGE TIMER] " + STR$ counter% + " Tags have changed detected -> Publish"
ELSE
PRINT "[PUBLISH ONCHANGE TIMER] No Tag changes detected! -> Don't publish"
ENDIF
END

//publish all tags
MqttPublishAllValue:
counter%=0
json$ =         '{'
  FOR i% = 0 TO NB% -1
      SETSYS Tag, "load",-i%
      i$= GETSYS TAG,"Name"
     
      GroupA$= GETSYS TAG,"IVGROUPA"
      GroupB$= GETSYS TAG,"IVGROUPB"
      GroupC$= GETSYS TAG,"IVGROUPC"
      GroupD$= GETSYS TAG,"IVGROUPD"
     
      IF GroupA$ = "1" And GROUPA%= 1 THEN json$ = json$ + '"' + i$+ '":"'+STR$ GETIO i$ + '",': counter% = counter% +1
      IF GroupB$ = "1" And GROUPB%= 1 THEN json$ = json$ + '"' + i$+ '":"'+STR$ GETIO i$ + '",': counter% = counter% +1
      IF GroupC$ = "1" And GROUPC%= 1 THEN json$ = json$ + '"' + i$+ '":"'+STR$ GETIO i$ + '",': counter% = counter% +1
      IF GroupD$ = "1" And GROUPD%= 1 THEN json$ = json$ + '"' + i$+ '":"'+STR$ GETIO i$ + '",': counter% = counter% +1
     
  NEXT i%   
  json$ = json$ +    '"time": "'+ @GetTime$() +'"'
  json$ = json$ +   '}'

  STATUS% = MQTT("STATUS")

//Is Connected
If (STATUS% = 5) Then
   Print "[PUBLISH ALL TAGS TIMER] " + STR$ counter% + " tags selected and published"
   MQTT "PUBLISH","devices/"+DeviceID$+"/messages/events/",json$, 0, 0
Else
   Print "Not connected (" + STR$ STATUS% + ")"
Endif
End

FUNCTION Log($Msg$)
  LOGEVENT  $Msg$ ,100
  PRINT $Msg$
ENDFN

I need your help to solve this problem

Best regards

Hi Leidy,

Is your device definitely connected to the Internet? Are you able to remotely connect to it through eCatcher? This error suggests that the device doesn’t have an active WAN connection. This might be a consequence of the script running right after the Ewon boots up. Is it set to autorun? If so, can you try stopping it, verifying the Ewon has a good Internet connection, and then running it again?

Best regards,
Hugh

Hi,

The device is connected to the internet without any problem, If I can connect to it remotely through eCatcher, But I keep getting the same error

Operation failed (28) 46 : Mqtt “Connect”
[MQTT SCRIPT] WAN Interface not yet ready
Not connected (2)

Best Regards
Leidy

Hi Leidy,

Looking at the code, the “[MQTT SCRIPT] WAN interface not yet ready” is logged after trying to connect with MQTT and getting error code 28, which is “operation failed”. I am guessing that the device is not able to connect to your server on Azure. I recommend testing on your computer to make sure that the MQTT broker is running and able to accept connections.