Статья описывает интеграцию промышленных SCADA-систем с Exolve API для отправки критических уведомлений по SMS. Приведены варианты интеграции, примеры кода для WinCC, Ignition, MasterSCADA и практический сценарий с превышением температурного порога.
- SCADA-системы фиксируют аварийные события и могут передавать их в Exolve API для отправки SMS, email или push-уведомлений.
- Интеграция возможна двумя способами: через встроенные скрипты SCADA (Python, VBScript, Lua) или через промежуточный сервер (Node-RED, Python-сервис, облачные функции).
- Поток обработки событий включает фиксацию аварии, формирование уведомления, передачу данных в Exolve API и отправку сообщения ответственным специалистам.
- Для WinCC приведён пример на VBScript, для Ignition — на Python с использованием postToURL, для MasterSCADA — на Lua.
- Промежуточный сервер на Python (Flask) принимает данные от SCADA и пересылает их в Exolve API, обеспечивая гибкость и масштабируемость.
- Практический пример показывает настройку аларма при превышении температуры 100 °C и отправку SMS с текущим значением и временем события.
- SCADA
- Exolve API
- WinCC
- Ignition
- MasterSCADA
- OPC UA
- MQTT
- HTTP POST
Кому полезно: Инженеры АСУ ТП, разработчики и интеграторы SCADA-систем
- Обучение SCADA TRACE MODE 7 КАК ПОДПИСЧИК И ИЗДАТЕЛЬ MQTT
- Статья Разговариваем с датчиками на человеческом: как связать MQTT, TimescaleDB и LLM через Model Context Protocol (MCP)
- Статья Соединение S7 1200 с MQTT (Mosquitto)
Первоисточник: habr.com
Выжимка составлена редакцией сайта с помощью ИИ по тексту статьи.
SCADA-системы — это программно-аппаратные комплексы для мониторинга и управления промышленными процессами. При сбоях и авариях они формируют критические уведомления о перегревах, утечках, отказах оборудования и других опасных ситуациях.
Отправлять такие оповещения в Telegram значит их гарантированно потерять. Поэтому мы решили сделать интеграцию с Exolve API для их автоматической отправки для мгновенного оповещения ответственных специалистов через SMS.
Архитектура интеграции SCADA с Exolve API
Прежде чем выстраивать интеграцию, стоит понять, как весь процесс будет выглядеть на практике. Вот общая схема:
Рассмотрим детальнее основные аспекты архитектуры взаимодействия.
- Общая схема взаимодействия SCADA-системы и Exolve API.
SCADA-система фиксирует аварийные события (например, превышение температуры, отказ насоса, утечка газа) и передает их в Exolve API. API, в свою очередь, обрабатывает данные, определяет получателей и отправляет уведомления по заданным каналам (SMS, email, push-уведомления).
- Варианты интеграции.
Интеграция может выполняться двумя основными способами:
- Встроенные механизмы SCADA: большинство SCADA-систем (например, WinCC, Ignition, Wonderware) поддерживают выполнение скриптов (Python, JavaScript) или модули связи (OPC UA, MQTT, REST API). Это позволяет отправлять HTTP-запросы к Exolve API напрямую.
- Внешние сервисы: если SCADA не поддерживает прямую отправку HTTP-запросов, можно использовать промежуточный сервер или шлюз (Node-RED, Python-сервис, облачные функции), который получает события от SCADA (через OPC, MQTT, базы данных) и пересылает их в Exolve API.
- Поток обработки событий.
- SCADA фиксирует аварийное событие в реальном времени.
- Настроенные триггеры или скрипты формируют уведомление.
- Данные передаются в Exolve API (через HTTP POST или MQTT).
- Exolve API анализирует событие, выбирает получателей и форматирует сообщение.
- Уведомление отправляется по заданным каналам связи.
- Ответственные специалисты получают сообщение и реагируют на аварию.
Интеграция с популярными SCADA-системами
Интеграцию Exolve API с промышленными SCADA-системами можно реализовать с использованием встроенных скриптовых языков, настройки HTTP-запросов или через промежуточный сервер. Рассмотрим каждый из этих подходов.
Использование встроенных скриптовых языков
Многие SCADA-системы поддерживают выполнение пользовательских скриптов на языках, таких как Python, Lua или VBScript. Это позволяет напрямую вызывать Exolve API для отправки уведомлений.
Пример на Python (для SCADA с поддержкой Python):
import requests
api_key = "ваш_api_ключ"
url = "https://api.exolve.ru/send_sms"
payload = {
"api_key": api_key,
"phone": "+79123456789",
"text": "Критическое уведомление: температура превышена.",
"sender": "SCADA"
}
response = requests.post(url, json=payload)
if response.status_code == 200:
print("SMS отправлено успешно:", response.json())
else:
print("Ошибка:", response.status_code, response.text)
Пример на VBScript (для WinCC):
Dim http, url, apiKey, phone, text, sender
apiKey = "ваш_api_ключ"
url = "https://api.exolve.ru/send_sms"
phone = "+79123456789"
text = "Критическое уведомление: температура превышена."
sender = "SCADA"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.SetRequestHeader "Content-Type", "application/json"
http.Send "{""api_key"":""" & apiKey & """,""phone"":""" & phone & """,""text"":""" & text & """,""sender"":""" & sender & """}"
If http.Status = 200 Then
WScript.Echo "SMS отправлено успешно: " & http.ResponseText
Else
WScript.Echo "Ошибка: " & http.Status & " " & http.ResponseText
End If
Примеры настройки HTTP-запросов в SCADA-системах
- WinCC.
WinCC позволяет настраивать HTTP-запросы через встроенные скрипты VBScript или C-скрипты. Пример выше демонстрирует использование VBScript для отправки SMS через Exolve API.
- Ignition.
Ignition поддерживает Python-скрипты и имеет встроенные инструменты для работы с HTTP-запросами. Пример на Python:
from system.net import postToURL
import json
api_key = "ваш_api_ключ"
url = "https://api.exolve.ru/send_sms"
payload = {
"api_key": api_key,
"phone": "+79123456789",
"text": "Критическое уведомление: температура превышена.",
"sender": "SCADA"
}
response = postToURL(url, json.dumps(payload), {"Content-Type": "application/json"})
if response.isSuccessful():
print("SMS отправлено успешно:", response.getResponseText())
else:
print("Ошибка:", response.getStatusCode(), response.getResponseText())
- MasterSCADA.
MasterSCADA поддерживает выполнение скриптов на Lua. Пример:
local http = require("socket.http")
local ltn12 = require("ltn12")
local api_key = "ваш_api_ключ"
local url = "https://api.exolve.ru/send_sms"
local payload = {
api_key = api_key,
phone = "+79123456789",
text = "Критическое уведомление: температура превышена.",
sender = "SCADA"
}
local response = {}
local body = "api_key=" .. api_key .. "&phone=" .. payload.phone .. "&text=" .. payload.text .. "&sender=" .. payload.sender
local result, status_code = http.request{
url = url,
method = "POST",
headers = {
["Content-Type"] = "application/json",
["Content-Length"] = #body
},
source = ltn12.source.string(body),
sink = ltn12.sink.table(response)
}
if status_code == 200 then
print("SMS отправлено успешно:", table.concat(response))
else
print("Ошибка:", status_code, table.concat(response))
endИспользование промежуточного сервера для маршрутизации уведомлений
Для сложных систем или случаев, когда SCADA-система не поддерживает прямую интеграцию с API, можно использовать промежуточный сервер. Этот сервер будет принимать данные от SCADA-системы, формировать запросы к Exolve API и обрабатывать ответы.
Пример архитектуры:
- SCADA-система отправляет данные на промежуточный сервер через HTTP, MQTT или другой протокол.
- Промежуточный сервер (например, на базе Node.js, Python или Java) обрабатывает данные, формирует запрос к Exolve API и отправляет уведомление.
- Сервер логирует результаты и возвращает статус SCADA-системе.
Пример на Python (промежуточный сервер):
from flask import Flask, request, jsonify
import requests
app = Flask(__name__)
@app.route('/send_notification', methods=['POST'])
def send_notification():
data = request.json
api_key = "ваш_api_ключ"
url = "https://api.exolve.ru/send_sms"
payload = {
"api_key": api_key,
"phone": data["phone"],
"text": data["text"],
"sender": "SCADA"
}
response = requests.post(url, json=payload)
if response.status_code == 200:
return jsonify({"status": "success", "message_id": response.json()["message_id"]})
else:
return jsonify({"status": "error", "code": response.status_code, "message": response.text}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Этот подход обеспечивает гибкость и масштабируемость, особенно в системах с большим количеством SCADA-узлов.
Практический пример
В этом разделе рассмотрим реализацию сценария отправки уведомлений через Exolve API при превышении температурного порога в SCADA-системе. Схематично это будет выглядеть так:
Мы разберем подробнее конфигурацию SCADA, написание кода для отправки сообщений и тестирование работы системы.
Реализация сценария: отправка уведомлений при превышении температурного порога
Сценарий:
- SCADA-система мониторит температуру на промышленном объекте.
- При превышении заданного порога (например, 100 °C) система отправляет SMS-уведомление через Exolve API.
- Уведомление содержит информацию о текущей температуре и времени события.
Конфигурация SCADA для мониторинга параметров
Для мониторинга температуры в SCADA-системе необходимо настроить соответствующий тег (переменную), который будет считывать данные с датчика. Рассмотрим пример для WinCC:
- Создайте новый тег Temperature типа Float для хранения текущего значения температуры.
- Настройте связь тега с устройством (например, через OPC-сервер или драйвер).
- Создайте аларм (тревогу) для тега Temperature, установив пороговое значение 100 °C.
- Настройте триггер аларма для вызова скрипта при срабатывании.
Написание кода отправки сообщений через API
Для отправки SMS-уведомлений при срабатывании аларма используем встроенный скриптовый язык SCADA-системы. Пример для WinCC на VBScript:
Sub SendTemperatureAlert(temperature)
Dim http, url, apiKey, phone, text, sender
apiKey = "ваш_api_ключ"
url = "https://api.exolve.ru/send_sms"
phone = "+79123456789"
text = "Критическое уведомление: температура превышена. Текущее значение: " & temperature & "°C."
sender = "SCADA"
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", url, False
http.SetRequestHeader "Content-Type", "application/json"
http.Send "{""api_key"":""" & apiKey & """,""phone"":""" & phone & """,""text"":""" & text & """,""sender"":""" & sender & """}"
If http.Status = 200 Then
LogMessage "SMS отправлено успешно: " & http.ResponseText
Else
LogMessage "Ошибка: " & http.Status & " " & http.ResponseText
End If
End Sub
Sub LogMessage(message)
' Логирование сообщений в файл или SCADA-систему
Dim fso, logFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set logFile = fso.OpenTextFile("C:SCADA_LogsExolve_API.log", 8, True)
logFile.WriteLine Now() & " - " & message
logFile.Close
End Sub
Для интеграции с алармом в настройках аларма добавьте вызов функции SendTemperatureAlert с передачей текущего значения температуры.
Тестирование работы и анализ логов
Тестирование:
- Установите значение температуры выше порогового (например, 105 °C) через симулятор или вручную.
- Убедитесь, что аларм срабатывает и вызывается скрипт отправки SMS.
- Проверьте получение SMS на указанный номер телефона.
Анализ логов:
- Проверьте файл логов C:SCADA_LogsExolve_API.log на наличие записей об отправке SMS и возможных ошибках.
- Пример записи в логе:
2023-10-10 14:30:45 - SMS отправлено успешно: {"status":"success","message_id":"1234567890"}- В случае ошибок (например, 401 или 429) проверьте корректность API-ключа и лимиты запросов.
Интеграция Exolve API с промышленными SCADA-системами для отправки критических уведомлений — это эффективное решение для оперативного оповещения о критических событиях. Использование встроенных скриптовых языков, настройка HTTP-запросов и промежуточных серверов позволяет гибко адаптировать систему под конкретные задачи.
В будущем систему можно расширить за счет добавления поддержки мультиканальных уведомлений (SMS, голосовые вызовы и так далее), интеграции с системами аналитики для прогнозирования событий, а также автоматизации обработки ответов API для более гибкого управления уведомлениями. Это позволит повысить отказоустойчивость и удобство использования системы.
Источник: https://habr.com/ru/companies/exolve/articles/892032/
Источник: статья в сообществе ВКонтакте