Establishing a connection between Azure server and Airlink

I have an an Azure server running an instance of Ignition. I have an Airlink RV55 in the field. I am able to send messages from the server to the airlink however the return status update never gets back to me. A timeout is reached and an error is logged in the Ignition gateway.

java.io.IOException: java.util.concurrent.TimeoutException
at com.inductiveautomation.ignition.alarming.notification.sms.airlink.AirlinkUdpConnection.sendSms(AirlinkUdpConnection.java:115)
at com.inductiveautomation.ignition.alarming.notification.sms.profile.SmsNotificationProfile$2.run(SmsNotificationProfile.java:214)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.util.concurrent.TimeoutException: null
at java.base/java.util.concurrent.CompletableFuture.timedGet(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
at com.inductiveautomation.ignition.alarming.notification.sms.airlink.AirlinkUdpConnection.sendSms(AirlinkUdpConnection.java:108)

I had to deviate from the Ignition setup guide significantly to get this far so really I am looking for any general advice on how to proceed.

I don't know a lot about Azure so I was wondering if there is some setting that might prevent traffic from being returned to the server from the airlink. (Pinging from the server to the airlink also fails).

The RV55 is going to try to send a UDP packet back to the configured IP/port of your Ignition Gateway. It's highly unlikely that Azure's default network/firewall configuration is going to allow this traffic through.

If you're running Ignition in the cloud the Twilio module is a much better fit.

1 Like

So there could be something at the configuration level preventing the UDP packet?

We configured the server firewall rules to allow TCP traffic over 17141 and 17142 (not UDP).

Do you think changing the firewall rule to UDP would make a difference?

I don't technically need the return traffic acknowledgement but in the future they might want 2 way communication.

I agree with your analysis that Twilio is better... but the customer insisted on the Airlink.

Certainly worth a try since Airlink comms don't use TCP.

How is my traffic getting to the Airlink then?

Outbound UDP. Outbound traffic is generally allowed by default, you probably didn't need a firewall rule for it.

I see. I will report back shortly with an update.

I deleted the outbound firewall rule and changed the inbound firewall rule to UDP specific port 17342 and got the same error.

My airlink settings are shown below.

Is the ack happening on port 17341 as well? Your post in this thread seems to confirm it is happening on the 17341 port so I should swap my outbound firewall rule to 17341.

Yeah, the outbound SMS packet goes out on UDP/17341 and the inbound ACK packet comes back on UDP/17341.

It looks like UDP/17342 is only used for inbound SMS replies (two-way).

1 Like

Ok, thanks for confirming.

I just modified the inbound rule to allow UDP traffic on 17341/17342 and got the same error so like you said this is likely a configuration issue I'll have to ask the Azure team about.

Long story short we changed some settings and we can ping the airlink from the Azure Ignition server but traffic will not work either direction now.

The IT team claims there are no rules on traffic and that this setup should work.

Any ideas why we can ping the airlink but not send UDP trafffic?

No, not really. These things are not really related. Ping is ICMP, it can work or not work independent of whether you can communicate via UDP.

Ok, thanks. Not sure why the IT team thinks UDP should be working necessarily... it might be best to swap over to Twilio...

I had the server run this code from Ignition

import socket

target_ip = "receiver_computer_ip"
target_port = 12345  # Use the port you want to send the message to

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = "Hello, receiver!"
client_socket.sendto(message.encode(), (target_ip, target_port))
client_socket.close()

and then had a client PC on the same subnet as the Airlink run the following code in a python script:

import socket

listen_ip = "0.0.0.0"  # Listen on all available network interfaces
listen_port = 12345  # The same port you used on the sender computer

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind((listen_ip, listen_port))

while True:
    data, addr = server_socket.recvfrom(1024)
    print(f"Received message: {data.decode()} from {addr}")

The goal of this was to test if a UDP message could get to any device on the same subnet as the Airlink and we were unable to get that to work so I told the IT group they need to check the settings again.