Bases de données

Construire une ferme intelligente IoT avec Raspberry Pi et Actian Zen

Johnson Varughese

26 septembre 2024

construire un système intelligent pour l'agriculture

La technologie transforme tous les secteurs d'activité, et l'agriculture ne fait pas exception. L'internet des objets (IoT) et l'informatique de pointe fournissent des outils puissants pour rendre les pratiques agricoles traditionnelles plus efficaces, plus durables et plus axées sur les données. Le Raspberry Pi est une plateforme abordable et polyvalente qui peut constituer la base d'un tel système d'agriculture intelligente.

Dans cet article de blog, nous allons construire un système d'agriculture intelligente utilisant des dispositifs IoT pour surveiller l'humidité du sol, la température et les niveaux d'humidité dans une ferme. L'objectif est d'optimiser l'irrigation et de garantir des conditions de croissance optimales pour les cultures. Nous utiliserons un Raspberry Pi fonctionnant sous Raspbian OS, Actian Zen Edge pour la gestion de la base de données, Zen Enterprise pour gérer les anomalies détectées sur la base de données du serveur distant, et Python avec l'interface Zen ODBC pour le traitement des données. En outre, nous nous appuierons sur AWS SNS (Simple Notification Service) pour envoyer des alertes en temps réel en cas d'anomalies détectées afin de permettre une action immédiate.

Conditions préalables

Avant de commencer, assurez-vous que vous disposez des éléments suivants :

  • Un Raspberry Pi fonctionnant sous le système d'exploitation Raspbian.
  • Python installé sur votre Raspberry Pi.
  • Actian Zen base de données Edge installé.
  • La bibliothèque PyODBC est installée.
  • AWS SNS configuré avec un sujet approprié et des identifiants d'accès.

Étape 1 : Configuration du Raspberry Pi

Tout d'abord, mettez à jour votre Raspberry Pi et installez les bibliothèques nécessaires :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-pip
pip3 install pyodbc boto3

Étape 2 : Installer Actian Zen Edge

Suivez les instructions de la page de téléchargement d'Actian Zen Edge pour télécharger et installer Actian Zen Edge sur votre Raspberry Pi.

Étape 3 : Créer des tables dans la base de données

Nous devons créer des tables pour stocker les données des capteurs et les anomalies. Connectez-vous à votre Actian Zen base de données Edge et créez la table suivante :

CREER TABLE sensor_data (
    id identité PRIMAIRE KEY,
    horodatage DATETIME,
    humidité_du_sol FLOAT,
    température FLOAT,
    humidité FLOAT
) ;

Installez Zen Enterprise, connectez-vous à la base de données centrale et créez la table suivante :

 CREER TABLE anomalies (
    id identité PRIMARY KEY ,
    timestamp DATETIME,
    humidité_du_sol FLOAT,
    température FLOAT,
    humidité FLOAT,
    description longvarchar
) ;

Étape 4 : Définir le script Python

Maintenant, écrivons le script Python pour gérer l'insertion des données des capteurs, la détection des anomalie et l'alerte via AWS SNS.

anomalie Détection Logique

Définir une fonction pour vérifier les anomalies sur la base de seuils prédéfinis :

def check_for_anomalies(data):
    threshold = {'soil_moisture': 30.0, 'temperature': 35.0, 'humidity': 70.0}
    anomalies = []
    if data['soil_moisture'] < threshold['soil_moisture']:
        anomalies.append('Low soil moisture detected')
    if data['temperature'] > threshold['temperature']:
        anomalies.append('High temperature detected')
    if data['humidity'] > threshold['humidity']:
        anomalies.append('High humidity detected')
    return anomalies

Insérer les données du capteur

Définir une fonction pour insérer les données du capteur dans la base de données :

import pyodbc

def insert_sensor_data(data):
    conn = pyodbc.connect('Driver={Pervasive ODBC 
Interface};servername=localhost;Port=1583;serverdsn=demodata;')
    cursor = conn.cursor()
    cursor.execute("INSERT INTO sensor_data (timestamp, soil_moisture, temperature, humidity) VALUES (?, ?, ?, ?)",
                   (data['timestamp'], data['soil_moisture'], data['temperature'], data['humidity']))
    conn.commit()
    cursor.close()
    conn.close()

Envoi d'anomalies à la base de données distante

Définir une fonction pour envoyer les anomalies détectées à la base de données :

def send_anomalies_to_server(anomaly_data):
    conn = pyodbc.connect('Driver={Pervasive ODBC Interface};servername=<remote server>;Port=1583;serverdsn=demodata;')
    cursor = conn.cursor()
    cursor.execute("INSERT INTO anomalies (timestamp, soil_moisture, temperature, humidity, description) VALUES (?, ?, ?, ?, ?)",
                   (anomaly_data['timestamp'], anomaly_data['soil_moisture'], anomaly_data['temperature'], anomaly_data['humidity'], anomaly_data['description']))
    conn.commit()
    cursor.close()
    conn.close()

Envoyer des alertes à l'aide de AWS SNS

Définir une fonction pour envoyer des alertes à l'aide d'AWS SNS :

def send_alert(message) :
    sns_client = boto3.client('sns', aws_access_key_id= 'Votre ID de clé',
    aws_secret_access_key = 'Votre clé d'accès', region_name='votre-région')
    topic_arn = 'arn:aws:sns:votre-région:votre-identification-de-compte:votre-nom-de-sujet'
    response = sns_client.publish(
        TopicArn=topic_arn,
        Message=message,
        Subject=anomalie Alert'
    )
    return response

Remplacer votre-région, votre-id-compteet votre-nom-de-sujet avec les détails de votre sujet AWS SNS.

Étape 5 : Générer les données des capteurs

Définir une fonction pour simuler les données d'un capteur du monde réel :

import random
import datetime

def generate_sensor_data():
    return {
        'timestamp': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'soil_moisture': random.uniform(20.0, 40.0),
        'temperature': random.uniform(15.0, 45.0),
        'humidity': random.uniform(30.0, 80.0)
    }

Étape 6 : Fonction principale pour simuler la collecte et le traitement des données

Enfin, le tout est regroupé dans une fonction principale :

def main():
    for _ in range(100):
        sensor_data = generate_sensor_data()
        insert_sensor_data(sensor_data)
        anomalies = check_for_anomalies(sensor_data)
        if anomalies:
            anomaly_data = {
                'timestamp': sensor_data['timestamp'],
                'soil_moisture': sensor_data['soil_moisture'],
                'temperature': sensor_data['temperature'],
                'humidity': sensor_data['humidity'],
                'description': ', '.join(anomalies)
            }
            send_anomalies_to_server(anomaly_data)
            send_alert(anomaly_data['description'])
if __name__ == "__main__":
    main()

Conclusion

Et voilà ! En suivant ces étapes, vous avez réussi à mettre en place un système agricole intelligent de base sur un Raspberry Pi à l'aide d'Actian Zen Edge et de Python. Ce système, qui surveille les niveaux d'humidité, de température et d'humidité du sol, détecte les anomalies, stocke les données dans des bases de données et envoie des notifications via AWS SNS, est une solution évolutif pour optimiser l'irrigation et garantir des conditions de croissance optimales pour les cultures. Maintenant, c'est à vous d'appliquer ces connaissances et de contribuer à l'avenir de l'agriculture intelligente.

N'oubliez pas de remplacer les espaces réservés par les détails de votre sujet AWS SNS et les détails de la connexion à la base de données. Bonne agriculture !

Portrait de Johnson Varughese

À propos de Johnson Varughese

Johnson Varughese est directeur de l'ingénierie de Support chez Actian, où il aide les développeurs à créer des applications utilisant les interfaces ZEN telles que Btrieve, ODBC, JDBC, ADO.NET, Btrieve2, et d'autres. Son rôle consiste à fournir des conseils techniques, à dépanner et à s'assurer que les développeurs peuvent utiliser efficacement ces interfaces pour créer des applications robustes et efficaces dans différents environnements de programmation. L'expertise de M. Johnson dans ces technologies permet de rationaliser les processus de développement et d'améliorer les performances et les fonctionnalités des applications développées.