Here is a comprehensive guide on how to develop a simple AI application that sends alerts when an alarm is triggered on a system and sends a follow-up alert when the alarm clears. We’ll use MySQL as the database and send alerts via email and SMS.
Introduction
This guide walks you through the process of developing a simple AI application that monitors a system for alarms, sends email and SMS alerts when an alarm is triggered, and notifies you again when the alarm is cleared.
Prerequisites
- Basic knowledge of Python, MySQL, and machine learning
- MySQL database setup
- Email and SMS service accounts (e.g., SendGrid for email, Twilio for SMS)
Setting Up the Environment
- Install Python and necessary libraries:
pip install mysql-connector-python
pip install scikit-learn
pip install sendgrid
pip install twilio
- Set up your MySQL database:
Ensure you have a MySQL server running and create a database for storing alarm data.
Database Design
Create a table in your MySQL database to store alarm data. This table will log alarm events and their statuses.
CREATE DATABASE alarm_db;
USE alarm_db;
CREATE TABLE alarms (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp DATETIME NOT NULL,
alarm_status VARCHAR(10) NOT NULL
);
AI Model for Alarm Detection
We’ll use a basic rule-based AI model to detect alarm states for simplicity. In a real-world scenario, you might use more complex machine learning models.
import mysql.connector
from datetime import datetime
def check_alarm_status():
# Connect to MySQL database
conn = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="alarm_db"
)
cursor = conn.cursor()
# Query to get the latest alarm status
query = "SELECT * FROM alarms ORDER BY timestamp DESC LIMIT 1"
cursor.execute(query)
result = cursor.fetchone()
conn.close()
return result
def detect_alarm_change(previous_status, current_status):
if previous_status != current_status:
return True
return False
Alerting Mechanism
We’ll use SendGrid for sending emails and Twilio for sending SMS alerts.
- SendGrid Setup:
Sign up for a SendGrid account and get your API key. - Twilio Setup:
Sign up for a Twilio account and get your Account SID and Auth Token. - Python Code for Sending Alerts:
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
from twilio.rest import Client
# Environment variables for SendGrid and Twilio credentials
SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')
TWILIO_ACCOUNT_SID = os.getenv('TWILIO_ACCOUNT_SID')
TWILIO_AUTH_TOKEN = os.getenv('TWILIO_AUTH_TOKEN')
TWILIO_PHONE_NUMBER = os.getenv('TWILIO_PHONE_NUMBER')
TO_PHONE_NUMBER = os.getenv('TO_PHONE_NUMBER')
TO_EMAIL = os.getenv('TO_EMAIL')
def send_email(subject, content):
message = Mail(
from_email='[email protected]',
to_emails=TO_EMAIL,
subject=subject,
html_content=content
)
try:
sg = SendGridAPIClient(SENDGRID_API_KEY)
response = sg.send(message)
print(response.status_code)
except Exception as e:
print(e.message)
def send_sms(content):
client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
message = client.messages.create(
body=content,
from_=TWILIO_PHONE_NUMBER,
to=TO_PHONE_NUMBER
)
print(message.sid)
Putting It All Together
Combine the above components into a main script that monitors the alarm status, detects changes, and sends alerts.
import time
previous_status = None
while True:
# Check the current alarm status
alarm_data = check_alarm_status()
if alarm_data:
alarm_id, timestamp, current_status = alarm_data
# Detect if there's a change in the alarm status
if detect_alarm_change(previous_status, current_status):
if current_status == 'triggered':
send_email('Alarm Triggered', f'An alarm was triggered at {timestamp}')
send_sms(f'Alarm Triggered at {timestamp}')
elif current_status == 'cleared':
send_email('Alarm Cleared', f'The alarm was cleared at {timestamp}')
send_sms(f'Alarm Cleared at {timestamp}')
# Update the previous status
previous_status = current_status
# Sleep for a specified interval before checking again
time.sleep(60)
Testing the Application
- Insert test data into the MySQL database:
INSERT INTO alarms (timestamp, alarm_status) VALUES (NOW(), 'triggered');
- Run the Python script:
python monitor_alarms.py
- Check for email and SMS alerts.
Conclusion
You’ve now created a simple AI application that monitors a MySQL database for alarm statuses and sends alerts via email and SMS when an alarm is triggered or cleared. This setup can be expanded with more sophisticated machine learning models and integrated into larger systems for comprehensive monitoring and alerting solutions.
Leave a Reply