How to send tool data from telemetry Azure IoT Hub to Azure Functions?

303 views Asked by At

I created a room temperature control automation system project based on people's presence using Azure Custom Vision and Raspberry Pi. I have successfully sent DHT11 temperature sensor data, camera sensors for the number of people in the image to Azure IoT Hub. The next step is how to get data from Azure IoT Hub into Azure Functions and add data to the local database. After that, you can also perform on/off actions on the device being monitored.

My expectation is that after the data can be received by Azure IoT Hub with proof of data in the telemetry message, the data can also be received by Azure Functions, the data can be added to the local database, and with this data Azure Functions can perform actions in the form of on/off to the device monitored.

I have created an event hub, event in azure-iot-hub and i've also created a function from local vscode so that the values ​​from the tool can be entered into the my local database. My problem was when doing the create an Azure Functions project step and in point number 4. Run the following command to create a Functions app in this folder. Link reference: https://github.com/microsoft/IoT-For-Beginners/tree/main/2-farm/lessons/5-migrate-application-to-the-cloud#create-a-serverless-application

My program has an error that can't run as shown in the following image. error azure function still error like this. error azure function 2

1

There are 1 answers

9
Sampath On BEST ANSWER

With Event Hub trigger, we can obtain data from the Azure IoT Hub. This function triggers a response to an event sent to an Event Hub event stream.

import logging

from azure.functions import EventHubEvent
from typing import List


def main(events: List[EventHubEvent]):
    for event in events:
        logging.info('Python EventHub trigger processed an event: %s',
                      event.get_body().decode('utf-8'))


enter image description here

  • The Azure function below handles events from an Event Hub and inserts the all event data into a MySQL database. In Azure, we must use Azure SQL and Azure MySQL.
  • Connect the Azure Event Hub to the IoT Hub events.
  • Create an event hub and storage account using the Azure portal. Connect the IoT Hub Events to the Endpoint Type and Endpoint of the event hub.

enter image description here

enter image description here

Create an Azure Event Hubs trigger for Azure Functions using Visual Studio Code with the steps below:

Code with local MySQL:


from typing import List
import json
import logging
import pymysql
from azure.functions import EventHubEvent

# MySQL connection details
MYSQL_HOST = '127.0.0.1'
MYSQL_USER = 'root'
MYSQL_PASSWORD = 'Password'
MYSQL_DB = 'quickstartdb'

def create_table_if_not_exists(cursor):
    # Define your table schema here
    table_schema = """
        CREATE TABLE IF NOT EXISTS event_data2 (
            id INT AUTO_INCREMENT PRIMARY KEY,
            event_data JSON
        )
    """
    cursor.execute(table_schema)

def insert_event_data(cursor, event_data):
    # Insert JSON event data into the table
    insert_query = "INSERT INTO event_data2 (event_data) VALUES (%s)"
    cursor.execute(insert_query, (json.dumps(event_data),))

def main(events: List[EventHubEvent]):
    # Create a MySQL connection
    connection = pymysql.connect(
        host=MYSQL_HOST,
        user=MYSQL_USER,
        password=MYSQL_PASSWORD,
        db=MYSQL_DB,
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor
    )

    try:
        with connection.cursor() as cursor:
            # Create table if not exists
            create_table_if_not_exists(cursor)

            # Process each event
            for event in events:
                event_data = json.loads(event.get_body().decode('utf-8'))

                # Log the event data
                logging.info('Python EventHub trigger processed an event: %s', event_data)

                # Insert JSON event data into MySQL
                insert_event_data(cursor, event_data)

        # Commit the changes
        connection.commit()

    finally:
        # Close the MySQL connection
        connection.close()

Function Logs: enter image description here

enter image description here

MySQL:

enter image description here

Another method:

enter image description here

enter image description here