8.2 KiB
Alert System Setup Guide
Overview
The Calejo Control Adapter includes a comprehensive multi-channel alert system that can notify operators of safety events, system failures, and operational issues through multiple channels:
- Email Alerts - For all safety events
- SMS Alerts - For critical events only
- Webhook Integration - For external monitoring systems
- SCADA Alarms - For HMI integration (Phase 4)
Current Implementation Status
✅ Fully Implemented
- Alert routing and management framework
- Email sending logic (requires SMTP configuration)
- Webhook integration (requires endpoint configuration)
- Alert history and statistics
- Multi-channel coordination
⚠️ Requires External Configuration
- SMS Integration - Needs Twilio account and billing setup
- Email Integration - Needs real SMTP server credentials
- Webhook Integration - Needs real webhook endpoints
- SCADA Integration - Planned for Phase 4
Configuration Guide
1. Email Alert Setup
Prerequisites
- SMTP server access (Gmail, Office 365, or company SMTP)
- Valid email account credentials
Configuration Steps
- Update environment variables in
config/.env:
# Email Configuration
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password # Use app password for Gmail
SMTP_USE_TLS=true
- Update settings in
config/settings.py:
alert_email_enabled: bool = True
alert_email_from: str = "calejo-control@your-company.com"
alert_email_recipients: List[str] = ["operator1@company.com", "operator2@company.com"]
- For Gmail users:
- Enable 2-factor authentication
- Generate an "App Password" for the application
- Use the app password instead of your regular password
Testing Email Configuration
# Test email configuration
from src.monitoring.alerts import AlertManager
from config.settings import Settings
settings = Settings()
alert_manager = AlertManager(settings)
# Send test alert
await alert_manager.send_alert(
alert_type="TEST_ALERT",
severity="INFO",
message="Test email configuration",
context={"test": "email"}
)
2. SMS Alert Setup (Twilio)
Prerequisites
- Twilio account (https://www.twilio.com)
- Verified phone numbers for recipients
- Billing information (SMS costs money)
Configuration Steps
-
Get Twilio credentials:
- Sign up for Twilio account
- Get Account SID and Auth Token from dashboard
- Get your Twilio phone number
-
Update environment variables in
config/.env:
# Twilio Configuration
TWILIO_ACCOUNT_SID=ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_PHONE_NUMBER=+15551234567
- Update settings in
config/settings.py:
alert_sms_enabled: bool = True
alert_sms_recipients: List[str] = ["+393401234567", "+393407654321"]
- Implement SMS sending (currently only logs):
- The current implementation only logs SMS alerts
- To enable actual SMS sending, uncomment and implement the Twilio integration in
src/monitoring/alerts.py:
# In _send_sms_alert method, replace the TODO section with:
import twilio
from twilio.rest import Client
client = Client(self.settings.twilio_account_sid, self.settings.twilio_auth_token)
for phone_number in self.settings.alert_sms_recipients:
message = client.messages.create(
body=f"[{alert_data['severity']}] {alert_data['message']}",
from_=self.settings.twilio_phone_number,
to=phone_number
)
3. Webhook Integration
Prerequisites
- Webhook endpoint URL
- Authentication token (if required)
Configuration Steps
- Update environment variables in
config/.env:
# Webhook Configuration
ALERT_WEBHOOK_URL=https://your-monitoring-system.com/webhook
ALERT_WEBHOOK_TOKEN=your_bearer_token
- Update settings in
config/settings.py:
alert_webhook_enabled: bool = True
alert_webhook_url: str = "https://your-monitoring-system.com/webhook"
alert_webhook_token: str = "your_bearer_token"
Webhook Payload Format
When an alert is triggered, the webhook receives a JSON payload:
{
"alert_type": "SAFETY_VIOLATION",
"severity": "ERROR",
"message": "Speed limit exceeded",
"context": {
"requested_speed": 55.0,
"max_speed": 50.0
},
"station_id": "STATION_001",
"pump_id": "PUMP_001",
"timestamp": 1234567890.0,
"app_name": "Calejo Control Adapter",
"app_version": "2.0.0"
}
4. SCADA Alarm Integration (Phase 4)
Status: Planned for Phase 4 implementation
When implemented, SCADA alarms will:
- Trigger alarms in SCADA HMI systems via OPC UA
- Provide visual and audible alerts in control rooms
- Integrate with existing alarm management systems
Alert Types and Severity
Alert Types
SAFETY_VIOLATION- Safety limit exceededFAILSAFE_ACTIVATED- Failsafe mode activatedEMERGENCY_STOP- Emergency stop activatedSYSTEM_ERROR- System or communication errorWATCHDOG_TIMEOUT- Database update timeout
Severity Levels
INFO- Informational messagesWARNING- Non-critical warningsERROR- Errors requiring attentionCRITICAL- Critical failures requiring immediate action
Testing the Alert System
Unit Tests
Run the comprehensive alert system tests:
pytest tests/unit/test_alerts.py -v
Manual Testing
# Test all alert channels
from src.monitoring.alerts import AlertManager
from config.settings import Settings
settings = Settings()
alert_manager = AlertManager(settings)
# Test different alert types and severities
test_alerts = [
("SAFETY_VIOLATION", "ERROR", "Speed limit exceeded"),
("FAILSAFE_ACTIVATED", "CRITICAL", "Failsafe mode activated"),
("SYSTEM_ERROR", "WARNING", "Communication timeout"),
]
for alert_type, severity, message in test_alerts:
result = await alert_manager.send_alert(
alert_type=alert_type,
severity=severity,
message=message,
context={"test": True}
)
print(f"{alert_type}: {result}")
Troubleshooting
Common Issues
-
Email not sending:
- Check SMTP server credentials
- Verify TLS/SSL settings
- Check firewall rules for outbound SMTP
-
SMS not working:
- Verify Twilio account is active and funded
- Check phone numbers are verified in Twilio
- Ensure SMS integration is implemented (currently only logs)
-
Webhook failures:
- Verify webhook URL is accessible
- Check authentication tokens
- Monitor webhook server logs
-
No alerts being sent:
- Check alert channels are enabled in settings
- Verify alert system is initialized in main application
- Check application logs for alert-related errors
Logging
Alert system activities are logged with the following events:
alert_sent- Alert successfully sentemail_alert_failed- Email delivery failedsms_alert_failed- SMS delivery failedwebhook_alert_failed- Webhook delivery failedscada_alert_failed- SCADA alarm failed
Security Considerations
- Store SMTP and Twilio credentials securely (environment variables)
- Use app passwords instead of regular passwords for email
- Rotate authentication tokens regularly
- Monitor alert system for abuse or excessive alerts
- Implement rate limiting if needed
Monitoring and Maintenance
Alert Statistics
Use the built-in statistics to monitor alert patterns:
alert_manager = AlertManager(settings)
stats = alert_manager.get_alert_stats()
print(f"Total alerts: {stats['total_alerts']}")
print(f"Severity counts: {stats['severity_counts']}")
print(f"Type counts: {stats['type_counts']}")
Alert History
Review recent alerts:
recent_alerts = alert_manager.get_alert_history(limit=50)
for alert in recent_alerts:
print(f"{alert['timestamp']} - {alert['alert_type']}: {alert['message']}")
Next Steps
- Immediate: Configure email and webhook for basic alerting
- Short-term: Implement Twilio SMS integration if needed
- Long-term: Implement SCADA OPC UA alarm integration in Phase 4
For questions or issues with alert system setup, refer to the application logs or contact the development team.