Using IoT Hub for Cloud to Device Messaging

Using IoT Hub for Cloud to Device Messaging

In the previous blog posts of this IoT Hub series, we have seen how we can use IoT Hub to administrate our devices, and how to do device to cloud messaging. In this post we will see how we can do cloud to device messaging, something which is much harder when not using Azure IoT Hub. IoT devices will normally be low power, low performance devices, like small footprint devices and purpose-specific devices. This means they are not meant to (and most often won’t be able to) run antivirus applications, firewalls, and other types of protection software. We want to minimize the attack surface they expose, meaning we can’t expose any open ports or other means of remoting into them. IoT Hub uses Service Bus technologies to make sure there is no inbound traffic needed toward the device, but instead uses per-device topics, allowing us to send commands and messages to our devices without the need to make them vulnerable to attacks.

IoT Hub For Cloud To Device Messaging

Send Message To Device

When we want to send one-way notifications or commands to our devices, we can use cloud to device messages. To do this, we will expand on the EngineManagement application we created in our earlier posts, by adding the following controls, which, in our scenario, will allow us to start the fans of the selected engine.

IoT Hub For Cloud To Device Messaging

To be able to communicate to our devices, we will first implement a ServiceClient in our class.

private readonly ServiceClient serviceClient = ServiceClient.CreateFromConnectionString("HostName=youriothubname.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=yoursharedaccesskey"); 

Next we implement the event handler for the Start Fans button. This type of communication targets a specific device by using the DeviceID from the device twin.

private async void ButtonStartFans_Click(object sender, EventArgs e)
{
    var message = new Microsoft.Azure.Devices.Message();
    message.Properties.Add(new KeyValuePair<string, string>("StartFans", "true"));
    message.Ack = DeliveryAcknowledgement.Full; // Used for getting delivery feedback
    await serviceClient.SendAsync(comboBoxSerialNumber.Text, message);
}

Process Message On Device

Once we have sent our message, we will need to process it on our device. For this, we are going to update the client application of our simulated engine (which we also created in the previous blog posts) by adding the following method.

private static async void ReceiveMessageFromCloud(object sender, DoWorkEventArgs e)
{
    // Continuously wait for messages
    while (true)
    {
        var message = await client.ReceiveAsync();

        // Check if message was received
        if (message == null)
        {
            continue;
        }

        try
        {
            if (message.Properties.ContainsKey("StartFans") && message.Properties["StartFans"] == "true")
            {
                // This would start the fans
                Console.WriteLine("Fans started!");

            }

            await client.CompleteAsync(message);
        }
        catch (Exception)
        {
            // Send to deadletter
            await client.RejectAsync(message);
        }
    }
}

We will run this method in the background, so update the Main method, and insert the following code after the call for updating the firmware.

// Wait for messages in background
var backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += ReceiveMessageFromCloud;
backgroundWorker.RunWorkerAsync();

Message Feedback

Although cloud to device messages are a one-way communication style, we can request feedback on the delivery of the message, allowing us to invoke retries or start compensation when the message fails to be delivered. To do this, implement the following method in our EngineManagement backend application.

private async void ReceiveFeedback(object sender, DoWorkEventArgs e)
{
    var feedbackReceiver = serviceClient.GetFeedbackReceiver();
    
    while (true)
    {
        var feedbackBatch = await feedbackReceiver.ReceiveAsync();

        // Check if feedback messages were received
        if (feedbackBatch == null)
        {
            continue;
        }

        // Loop through feedback messages
        foreach(var feedback in feedbackBatch.Records)
        {
            if(feedback.StatusCode != FeedbackStatusCode.Success)
            {
                // Handle compensation here
            }
        }

        await feedbackReceiver.CompleteAsync(feedbackBatch);
    }
}

And add the following code to the constructor.

var backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += ReceiveFeedback;
backgroundWorker.RunWorkerAsync();

Call Remote Method

Another feature when sending messages from the cloud to our devices is to call a remote method on the device, which we call invoking a direct method. This type of communication is used when we want to have an immediate confirmation of the outcome of the command (unlike setting the desired state and communicating back reported properties, which has been explained in the previous two blog posts). Let’s update the EngineManagement application by adding the following controls, which would allow us to send an alarm message to the engine, sounding the alarm and displaying a message.

IoT Hub For Cloud To Device Messaging

Now add the following event handler for clicking the Send Alarm button.

private async void ButtonSendAlarm_Click(object sender, EventArgs e)
{
    var methodInvocation = new CloudToDeviceMethod("SoundAlarm") { ResponseTimeout = TimeSpan.FromSeconds(300) };
    methodInvocation.SetPayloadJson(JsonConvert.SerializeObject(new { message = textBoxMessage.Text }));

    CloudToDeviceMethodResult response = null;

    try
    {
        response = await serviceClient.InvokeDeviceMethodAsync(comboBoxSerialNumber.Text, methodInvocation);
    }
    catch (IotHubException)
    {
        // Do nothing
    }

    if (response != null && JObject.Parse(response.GetPayloadAsJson()).GetValue("acknowledged").Value<bool>())
    {
        MessageBox.Show("Message was acknowledged.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    else
    {
        MessageBox.Show("Message was not acknowledged!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

And in our simulated device, implement the SoundAlarm remote method which is being called.

 
private static Task<MethodResponse> SoundAlarm(MethodRequest methodRequest, object userContext)
{
    // On a real engine this would sound the alarm as well as show the message
    Console.ForegroundColor = ConsoleColor.Red;
    Console.WriteLine($"Alarm sounded with message: {JObject.Parse(methodRequest.DataAsJson).GetValue("message").Value<string>()}! Type yes to acknowledge.");
    Console.ForegroundColor = ConsoleColor.White;
    var response = JsonConvert.SerializeObject(new { acknowledged = Console.ReadLine() == "yes" });
    return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(response), 200));
}

And finally, we need to map the SoundAlarm method to the incoming remote method call. To do this, add the following line in the Main method.

client.SetMethodHandlerAsync("SoundAlarm", SoundAlarm, null);

Call Remote Method On Multiple Devices

When invoking direct methods on devices, we can also use jobs to send the command to multiple devices. We can use our custom tags here to broadcast our message to a specific set of devices.
In this case, we will add a filter on the engine type and manufacturer, so we can, for example, send a message to all main engines manufactured by Caterpillar. In our first blog post, we added these properties as tags on the device twin, so we now use these in our filter. Start by adding the following controls to our EngineManagement application.

IoT Hub For Cloud To Device Messaging

Now add a JobClient to the application, which will be used to broadcast and monitor our messages.

 
private readonly JobClient jobClient = JobClient.CreateFromConnectionString("HostName=youriothubname.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=yoursharedaccesskey");

To broadcast our message, update the event handler for the Send Alarm button to the following.

 
private async void ButtonSendAlarm_Click(object sender, EventArgs e)
{
    var methodInvocation = new CloudToDeviceMethod("SoundAlarm") { ResponseTimeout = TimeSpan.FromSeconds(300) };

    methodInvocation.SetPayloadJson(JsonConvert.SerializeObject(new { message = textBoxMessage.Text }));

    if (checkBoxBroadcast.Checked)
    {
        try
        {
            var jobResponse = await jobClient.ScheduleDeviceMethodAsync(Guid.NewGuid().ToString(), $"tags.engineType = '{comboBoxEngineTypeFilter.Text}' and tags.manufacturer = '{textBoxManufacturerFilter.Text}'", methodInvocation, DateTime.Now, 10);
            
            await MonitorJob(jobResponse.JobId);
        }
        catch (IotHubException)
        {
            // Do nothing
        }
    }
    else
    {
        CloudToDeviceMethodResult response = null;

        try
        {
            response = await serviceClient.InvokeDeviceMethodAsync(comboBoxSerialNumber.Text, methodInvocation);
        }
        catch (IotHubException)
        {
            // Do nothing
        }

        if (response != null && JObject.Parse(response.GetPayloadAsJson()).GetValue("acknowledged").Value<bool>())
        {
            MessageBox.Show("Message was acknowledged.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            MessageBox.Show("Message was not acknowledged!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
}

And finally, add the MonitorJob method with the following implementation.

 
public async Task MonitorJob(string jobId)
{
    JobResponse result;

    do
    {
        result = await jobClient.GetJobAsync(jobId);
        Thread.Sleep(2000);
    }
    while (result.Status != JobStatus.Completed && result.Status != JobStatus.Failed);

    // Check if all devices successful
    if (result.DeviceJobStatistics.FailedCount > 0)
    {
        MessageBox.Show("Not all engines reported success!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
    else
    {
        MessageBox.Show("All engines reported success.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}

Conclusion

By using IoT Hub we have a safe and secure way of communicating from the cloud and our backend to devices out in the field. We have seen how we can use the cloud to device messages in case we want to send one-way messages to our device or use direct methods when we want to be informed of the outcome from our invocation. By using jobs, we can also call out to multiple devices at once, limiting the devices being called by using (custom) properties of the device twin. The code for this post can be found here.

IoT Hub Blog Series

In case you missed the other articles from this IoT Hub series, take a look here.

Blog 1: Device Administration Using Azure IoT Hub
Blog 2: Implementing Device To Cloud Messaging Using IoT Hub
Blog 3: Using IoT Hub for Cloud to Device Messaging

Author: Eldert Grootenboer

Eldert is a Microsoft Integration Architect and Azure MVP from the Netherlands, currently working at Motion10, mainly focused on IoT and BizTalk Server and Azure integration. He comes from a .NET background, and has been in the IT since 2006. He has been working with BizTalk since 2010 and since then has expanded into Azure and surrounding technologies as well. Eldert loves working in integration projects, as each project brings new challenges and there is always something new to learn. In his spare time Eldert likes to be active in the integration community and get his hands dirty on new technologies. He can be found on Twitter at @egrootenboer and has a blog at http://blog.eldert.net/.

TUGA IT 2017 – Be There!

TUGA IT 2017 – Be There!

Just under two weeks away, TUGA IT will be held once again in beautiful Lisbon. TUGA IT is three days full of sessions, workshops, meeting the experts, and having a great time. After having visited last year as a participant, I am honored to have been selected as one of the speakers this year.

On saturday I will be giving a session where we will be going into industrial IoT on Azure. The industrial space is where we will be seeing a huge growth in IoT, and I will be showing how we can use Azure IoT Hub to manage our devices and do bi-directional communication. I will also be showing how we can use Dynamics 365 to give a familiar and easy to use interface to work with these devices and visualize the data. And of course, Azure’s stack will be used to extend on the solution.

Integration is everywhere, and TUGA IT is no exception. We will have a full integration track on saturday where I will be joined by fellow integrators and good friends, Steef-Jan, Sandro, Nino, Tomasso and Ricardo to give a day full of integration sessions.

Schedule overview Saturday including Integration track

But there is more than just integration going on. On thursday there are several workshops, where you can learn about various Microsoft products and get hands-on experience. On friday there are also multiple tracks with sessions on many topics like Azure, .NET and more.

Schedule overview Thursday

Schedule overview Friday

As you can see, there is something for everyone at TUGA IT, whether you want to do workshops, attend sessions, or just want to meet with MVP’s and experts from various countries. Be sure to be there as well, registrations are open, and they only ask a small fee for lunch.

TUGA IT 2017 – Be There!

TUGA IT 2017 – Be There!

Just under two weeks away, TUGA IT will be held once again in beautiful Lisbon. TUGA IT is three days full of sessions, workshops, meeting the experts, and having a great time. After having visited last year as a participant, I am honored to have been selected as one of the speakers this year.

On saturday I will be giving a session where we will be going into industrial IoT on Azure. The industrial space is where we will be seeing a huge growth in IoT, and I will be showing how we can use Azure IoT Hub to manage our devices and do bi-directional communication. I will also be showing how we can use Dynamics 365 to give a familiar and easy to use interface to work with these devices and visualize the data. And of course, Azure’s stack will be used to extend on the solution.

Integration is everywhere, and TUGA IT is no exception. We will have a full integration track on saturday where I will be joined by fellow integrators and good friends, Steef-Jan, Sandro, Nino, Tomasso and Ricardo to give a day full of integration sessions.

Schedule overview Saturday including Integration track

But there is more than just integration going on. On thursday there are several workshops, where you can learn about various Microsoft products and get hands-on experience. On friday there are also multiple tracks with sessions on many topics like Azure, .NET and more.

Schedule overview Thursday

Schedule overview Friday

As you can see, there is something for everyone at TUGA IT, whether you want to do workshops, attend sessions, or just want to meet with MVP’s and experts from various countries. Be sure to be there as well, registrations are open, and they only ask a small fee for lunch.

TUGA IT 2017 – Be There!

TUGA IT 2017 – Be There!

Just under two weeks away, TUGA IT will be held once again in beautiful Lisbon. TUGA IT is three days full of sessions, workshops, meeting the experts, and having a great time. After having visited last year as a participant, I am honored to have been selected as one of the speakers this year.

On saturday I will be giving a session where we will be going into industrial IoT on Azure. The industrial space is where we will be seeing a huge growth in IoT, and I will be showing how we can use Azure IoT Hub to manage our devices and do bi-directional communication. I will also be showing how we can use Dynamics 365 to give a familiar and easy to use interface to work with these devices and visualize the data. And of course, Azure’s stack will be used to extend on the solution.

Integration is everywhere, and TUGA IT is no exception. We will have a full integration track on saturday where I will be joined by fellow integrators and good friends, Steef-Jan, Sandro, Nino, Tomasso and Ricardo to give a day full of integration sessions.

Schedule overview Saturday including Integration track

But there is more than just integration going on. On thursday there are several workshops, where you can learn about various Microsoft products and get hands-on experience. On friday there are also multiple tracks with sessions on many topics like Azure, .NET and more.

Schedule overview Thursday

Schedule overview Friday

As you can see, there is something for everyone at TUGA IT, whether you want to do workshops, attend sessions, or just want to meet with MVP’s and experts from various countries. Be sure to be there as well, registrations are open, and they only ask a small fee for lunch.

BizTalk 2016 Gets Real Love With Feature Pack 1

BizTalk 2016 Gets Real Love With Feature Pack 1

For quite some time, BizTalk was not getting the love it deserved. Sure, we got our platform alignment, and sometimes a new or updated adapter, but all in all, there were not many exciting new features. That changes now, with the just released Feature Pack 1 BizTalk 2016. In this feature pack, we are seeing more new features than we have in a long time, and shows that the product team, with our very own Tord at the helm, really is caring about the product once again. If you look at the user-voice page for BizTalk, you will notice a lot of suggestions are being made by the community, and this feature pack shows that we are actually being listened to as well! In this post, I will go into the new features being introduced.

Installation of this feature pack is very straight forward, just download the installer and run the wizard.

Once installed, you will see the new features in your BizTalk installation.

One of the places where BizTalk was falling behind in this world where agile is becoming increasingly important was the ALM story. Of course, we had projects like the BizTalk Deployment Framework (of which I am a big fan) which helped with this, but being dependent on a third party for this proved to be cumbersome at times. Thankfully FP1 addresses this, and gives us the option to do continuous integration using VSTS! This allows us to automatically deploy new applications or update existing applications after checking in our project. After you have installed the feature pack, you can create a new BizTalk project, called BizTalk Server Application Project. If you don’t see it in the list, make sure to select the latest .NET framework version.

To be able to deploy the project, we will also need to add the Deploy BizTalk Application task to our VSTS. This will give us a new task we can use in our VSTS build definitions.

Add new deploy definition

You can check here for a full overview on how to set this up.

With FP1, we now have the option to log our message data to Application Insights. Application Insights is already supported or planned to be supported in various places within Azure like Web and API apps, Azure Functions and Logic Apps, and as of now we can use this platform from BizTalk as well, allowing us to have a consolidated tracking mechanism for our messages both from on-premise and in the cloud.

This is the same data we see in our tracking data, and can be set up very easily. To enable integration with Application Insights, open the settings of your BizTalk group, and check the Enable group-level analytics option. In the connection parameters, you have to enter the instrumentation key, which can be found in the portal for your Application Insights instance.

C:Userseldert.grootenboerAppDataLocalMicrosoftWindowsINetCacheContent.Word2017-04-26 13_13_04-Windows Server 2016 - BizTalk 2016 RTM on KRUKALA - Virtual Machine Connection.png

And finally enable analytics on your port.

You can check here for a full overview.

With this feature pack, BizTalk 2016 now also exposes REST API’s with which you can manage your BizTalk artifacts, like your ports, orchestrations, hosts, pipelines, as well as operational data like retrieving and working with messages, service instances and much more. This gives us the possibility to integrate our BizTalk management in any application we want, as well as easily script our BizTalk management tasks. And of course, the API’s are all documented with Swagger, allowing us to get started with this right away. You can read here on how to enable the REST API’s.

Visualize With PowerBI

And what is more, we can also use PowerBI to visualize the feed from these API’s. The BizTalk team provides an out of the box template for this, which you will find in X:Program Files (x86)Microsoft BizTalk Server 2016OperationalDataServiceBizTalkOperationalData.pbit which can then be loaded into PowerBI Desktop. This template will give you a starting point, on which you can then expand and build your own PowerBI dashboards, which you can also integrate in your monitoring solution like BizTalk360.

biztalk-power-bi-dashboard - BizTalk Server 2016 Feature Pack 1

More information can be found here.

When we wanted to schedule something on BizTalk’s receive locations, we were always very confined, with just being able to specify a start date, a stop date, and the start and stop time for the service window. With Feature Pack 1, this has now been made much more granular, allowing us to set much more granular schedules, allowing us to trigger every x days, or even on certain days of the week or month. Many of these features could already be found in the Scheduled Task Adapter by Sandro, which still provides some more advanced options, but it is good to see Microsoft looking at the popular extensions the community created and incorporating them into the product.

More information can be found here.

And finally, BizTalk can now use encrypted columns in SQL server, which allows us to protect sensitive data in SQL server.

More information can be found here.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

https://pbs.twimg.com/media/C9yv7VpWsAEpcWv.jpg:large

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

https://pbs.twimg.com/media/C9yv7VpWsAEpcWv.jpg:large

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Recap – Sweden and Global Azure Bootcamp

Recap – Sweden and Global Azure Bootcamp

This week was a busy week for me, in a very good way. I got to travel around again, this time to Sweden, together with my good buddy Steef-Jan. Having been to Sweden doing sessions last year as well, I was very much looking forward going back. I also got to speak at the Global Azure Bootcamp, a massive event all over the world with people speaking, doing labs and having all kinds of interactions around Azure.

We started on Tuesday going to Gothenburg, where I got to do a session on industrial IoT for the SWEBUG, showing how we can integrate with IoT Hub and Dynamics 365 using Logic Apps, Service Bus and more. We had a nice crowd, and lots of interaction, which is always a big plus. In my opinion industrial is where the big chances for IoT are, and had some interesting discussions on how others were seeing this.

The next day we went on to Stockholm by train, so we had some time to enjoy the country side, talk about work, and look back on the Global Integration Bootcamp, for which we both were main organizers. We are already making plans for a GIB2018 event as well, so keep your eye out on that. In Stockholm we first participated in an integration architecture forum, a great initiative by Johan Hedberg, where architects from different companies come together and discuss what is happening in the integration space, and how people are using these new techniques. It is great to see this kind of deep technical interaction, where people really are willing to help each other out.

Image may contain: 6 people, people smiling, people sitting and indoor

Next was our sessions for the SWEBUG, where I again got to do my IoT session. Once again, a great audience, with some nice discussion going on between and after the sessions.

https://pbs.twimg.com/media/C9yv7VpWsAEpcWv.jpg:large

After the sessions, it was time for some beers and discussions. The great thing of being able to do these trips is you get to meet a lot of new people, as well as catch up with friends. The next day we got all to ourselves, so we got to see a lot of Stockholm, walking around the city, and visiting the Vasa Museum. During lunch we met up with Mikael Hakansson, and talked a lot about IoT and his product microServiceBus.com, which does a great job filling the gap currently left by the big cloud providers. In the evening we met another good friend of mine, Mikael Sand, for some beers and great food.

Image may contain: one or more people, people sitting, table and indoor

As you can tell, I once again had a great time in Sweden, and look forward to going back there again.

On Saturday, it was time for the Global Azure Bootcamp, for which I was invited by Azug.be to do a session in Ghent. Having done some sessions in Belgium before, I can say I love the audience here, they really make you feel welcome. For the boot camp I adjusted my IoT session a bit, doing a bit more of a deep dive into its possibilities.

https://pbs.twimg.com/media/C-A-DCWXoAAcZSM.jpg:large

I also enjoyed the other sessions a lot, especially the session on iPaas and enterprise integration by Glenn, giving a really nice overview of just how much Azure has matured.

Global Integration Bootcamp 2017

Global Integration Bootcamp 2017

Yesterday, we held the first Global Integration Bootcamp, an event set up by integration communities around the world. We ended up doing the event in 12 countries, with 16 locations, over 55 speakers and an amazing number of over 650 attendees. Starting in New Zealand, and going around the globe, finally ending in Seattle, this truly has been a global event, bringing the community together.

I am proud to have been one of the organizers and drivers behind this great event, along with my good friends and community leaders, Steef-Jan, Rob, Tomasso, Martin, Gijs, Glenn and Sven.

Back in august, Mandi Ohlinger sent out the following tweet, about the BizTalk Bootcamp which had been done in Charlotte.

Mandi Ohlinger Following @mandi_onlinger Agenda is lookin' good. Great lineup of discussion leaders. aka.ms/BizTalkBootCamp #BizTalkBootCamp #LogicApps #msbts

The tweet quickly got picked up by the community, to do an event like this in more locations.

Gijs in 't veld @gintveld 22 Aug 2016 @mandi_onlinger now about a European counterpart? #msöts 1 Martin Abbott @martinabbott - 23 Aug 2016 @gintveld @mandi_onlinger and APAC tor that matter, f you need a body helping organise let me know 2 Glenn Colpaert @GlennColpaert - 23 Aug 2016 @martinaööott @gintveld @mandi_onlinger f you need a speaker, let me know (Can't blame a guy tor trying» 1 Glenn Colpaert @GlennColpaert - 23 Aug 2016 @martinaööott @gintveld @mandi_onlinger less liking, more inviting ; 1 Martin Abbott @martinabbott - 23 Aug 2016 @GlennColpaert @gintveld @mandi_onlinger leave t witn me.. I 1 Mandi Ohlinger @mandi_ohlinger - 23 Aug 2016 @martinaööott @GlennColpaert @gintveld Great idea guys. It needed, I can provide some guidance. 1 Eldert Grootenboer @egrootenboer - 23 Aug 2016 @mandi_onlinger @martinaööott @GlennColpaert @gintveld Would definitely be a great idea, let me know now I can help out' 1 Martin Abbott @martinabbott - 23 Aug 2016 @egrootenöoer @mandi_onlinger @GlennColpaert @gintveld I love the integration community #msöts

We quickly got a core group of people together, with whom we started moving this idea forward, and thus the organization of the Global Integration Bootcamp was formed. After a couple of Skype calls with Mandi and the group in the following weeks, we started to reach out to members of the community to see if we could expand our reach. It became clear that there definitely was a lot of interest for an event like this, starting with around 6 countries, so we started a Slack group, brought up a website, and opened registrations for locations. In the meantime, a lot of work has been going on behind the scenes. A couple of us started working on creating labs for the locations, thinking of a scenario and working this into fun labs, using the technologies Microsoft has given us over the years, like BizTalk, Logic Apps, Service Bus, API Management, On-Premise Data Gateway, IoT Hub and more!

As time progressed, more and more locations started contacting us to join in on the event as well, turning it into a real global event. We also worked closely with the MS Pro Integration product group during our preparations, where Jon arranged some very nice shirts and stickers for all the locations.

GLOBAL BO *ORLDWIOE

And we even got a video from the product group which the locations got to use in the welcome slides, with Jim welcoming everyone to the Global Integration Bootcamp, bringing the global communities even closer together.

Global Integration Bootcamp Welcome Video

And so finally, March 25th was here, and the Global Integration Bootcamp got on the way. As people started in New Zealand, twitter was starting to become busy on the #GIB2017 hashtag, and as the event started going around the globe, positive messages from around the globe started coming in, the Bootcamp was a success!

I got to do 2 sessions myself in Rotterdam, one being on Hybrid Integration using BizTalk, and the other on IoT with Azure, with Steef-Jan, Tomasso, Rob and Gijs doing sessions as well. We had a very nice turn-out, and people had a lot of fun watching the sessions and doing the labs.

C:UsersELDER_~1AppDataLocalTempmsohtmlclip12clip_image001.png

Below are some impression of the event, and reactions we had from the attendees, speakers and product group. Looking at the feedback we received, we decided we have to make this an annual event, so be prepared for Global Integration Bootcamp 2018! More information will follow in the coming weeks and months, keeping you up to date as we move forward. Thanks to everyone who helped us make this such a great event, my co-organizers, the locations organizers, the product groups, the attendees, and anyone I may have missed here! I will close this post with some impressions and feedback we got of the event. Be sure to check out the #GIB2017 hashtag on twitter for more, read the blogpost Saravana made about this as well, and join us at Integrate if you want to talk more about this years or next years Global Integration Bootcamp.

Tord Glad Nordahl Help Microsoft build Integration software know of very few products that have a community spinning up everything needed for a hands on m across multiple services and tools, book it on a Saturday cwer 17 cities, 12 countries and get over 700 people to sign up worldwide. Microsofts integration community is unique. And I am incredibly proud!

Jeff Hollan @jefhollan 20h Incredible to see #gib2017 around the world. @Microsoft integration stands apart because of our community. Lucky to consider myself a member

Jim Harrer @JimHarrer 7h Thank you for the support' Gijs in 't Veld @gintveld Microsott has spawned an awesome global #integration community @scottgu @JimHarrer Greetings trom the Dutch Team' #giö2017 @microsott #Azure

Tord Glad Nordahl @tordeman - 7h Hey, shoutout to the integration community, YOU ROCK! #msbts #gib2017

Jon Fancey @onfancey 10h more awesomeness from our fantastic community of MVPs and partners #gib2017 ROD FOX robfox The Rotterdam speakers ot #giö2017 @egrootenöoer @SteetJan @tlagroenendijk @gintveld @xroötox #mstt #azure #integration

J. Kunjur @jkunjur 10h #GlB2017 Chicago Global Integration 300tcamp pictures. VÉ had thirty attendees and positive teedöack_ Attendees came trom IN, Ml and WI.

Gyanendra Gautam @ggauta 10h dig thanks to all #GlB2017 organizers world wide' Happy to be part ot this great event'

Mattias Ldgdberg @MLogdberg 13h @TechMeet360 Great event' Great attendes and speakers. Alot ot tun and nard work _ Hope it was as good in India' Regards trom Sweden' #gib2017

Jet coo's @jcooIs85 16h Thanks to everyone around the globe who took partl organising the Global Integration 300tcamp' Top notch day ot integration tun' #GlB2017

Toon Vanhoutte @ToonVanhoutte - 17h dig thanks to all #GlB2017 organizers world wide' Happy to be part ot this great event'

C:UsersELDER_~1AppDataLocalTempmsohtmlclip12clip_image001.png

Integration Down Under

Integration Down Under

In February I went on vacation to Australia for almost a month, and had decided to throw in some work-related activities as well (fortunately I have a very understanding wife 🙂 ). I had an amazing time here, catching up with old friends, and meeting new ones. I love the integration community, and always have a lot of fun with these people. In this post, I will go into some of the work-related highlights of my vacation.

Sydney was basically our central hub throughout the vacation, where we returned a couple of times during these weeks. My old colleague Rene Brauers lives here, as does Mick Badran, so we have had a lot of time catching up and being shown around.

We also did a Meet Up organized by Simon and Rene, where I was joined on stage by Steef-Jan, my good friend and fellow MVP from the Netherlands, as well as Jon and Kevin.

When I had booked my vacation, I found out that Ignite would be held when I was in Australia, so I decided this would be a good opportunity to visit this as well. Here at Ignite, it was confirmed for me that Integration is alive and kicking, with many integration sessions. Even Scott Guthrie had a nice part on it in the keynote, which confirms for me Microsoft is sharing my vision that integration keeps getting more important in these days.

A large part of the Pro Integration team was represented at Ignite as well, with Jim, Kevin, Jon and Jeff, and they did a great session showing Microsoft’s vision on Hybrid Integration. Also Dan was here, and he had an awesome session on messaging in Azure, showing the capabilities of the Service Bus stack.

Furthermore, my good friends and fellow MVP’s Martin and Daniel did a couple of great sessions as well, it’s really cool to see how much love the integration space is getting. And of course the best thing about events like this, is socializing after the sessions are done ;-).

For a full overview of all the sessions at Ignite, you can see all the videos here.

After Ignite, we got invited by Daniel to join him for a tour of Brisbane. I have to say, I really love this place, it’s not too crowded, and just has a great scenery.

In Melbourne we did a lot of sight-seeing, and met up with Bill, Jim and Jeff, for some more socializing.

We also did a webcast here at Bill’s house, after having had some of the best BBQ steaks.

As you can tell, we had a great time in Australia, and I want to thank everyone who made this such a great experience for us. Of course, we did not only do work-related stuff, and if you ever happen to find yourself in Australia, I can definitely recommend going to the Blue Mountains, one of the most beautiful places we have been so far.