HomeManaged ServicesIoT HubHow to
Triggering functions from IoT Hub messages
Jump toUpdate content

Triggering functions from IoT Hub messages

Reviewed on 19 June 2023 • Published on 21 August 2020

Function as a Service allows developers to run code without the hassle of managing the server/instance running it.

IoT Hub allows messages to be exchanged between devices and business-specific software. Some or all components of this software can be implemented using Serverless Functions, and IoT Hub can be configured to trigger these functions to process messages being exchanged on the hub.

Security & Identity (IAM):

You may need certain IAM permissions to carry out some actions described on this page. This means:

  • you are the Owner of the Scaleway Organization in which the actions will be carried out, or
  • you are an IAM user of the Organization, with a policy granting you the necessary permission sets
Requirements:

How to set up a route to a function

  1. Instruct your IoT Hub to trigger your function when a message is published on the my/super/topic topic. To do so we will use an IoT Hub REST Route.
  2. Click the Routes tab of your IoT Hub.
  3. Create a new route with the following settings:
    • Name: any name you want
    • Topic: my/super/topic
    • Route type: REST Query
    • Method: POST
    • Endpoint: the function endpoint you got earlier
    • HTTP Headers: leave empty

In a typical use-case, the same function will be used for many topics. It is possible to achieve this by using MQTT wildcards in the route topic. You can then rely on the X-Mqtt-Topic HTTP header in your Serverless Function for your topic-based processing. See this blog post for more information about MQTT topics.

How to trigger the function

  1. Click the MQTT Webclient button on your device information page. The client will open and automatically connect.

  2. Publish a message to the my/super/topic topic. In the Publish block:

    • Write my/super/topic as the topic
    • Leave QoS as 0
    • Leave Retain unticked
    • Write Hello World ! as the message
    • Click Publish (no confirmation will be issued)

    You can see your published message in the function logs.

    Note:

    There may be a few minutes delay before the logs show up.

How to reply to a message

In many cases, your function will want to publish a message to react to the received message.

To allow this action, add an X-Mqtt-Topic header to your reply, and a new message will be published on your IoT Hub under the topic.

The content of the message will be the body of the reply.

Important:

The HTTP status code needs to be in the 2xx range.

How to use private functions

If you require authentication to protect your Serverless Function, here is how to do it:

  1. Click the settings tab of your function settings tab and tick the Private option.

  2. Generate a token for your function.

  3. Re-create your IoT Hub Route with the following HTTP header: SCW_FUNCTIONS_TOKEN: <function token here>.

    Your function is now private and still accessible from IoT Hub.

See Also