SCADA-системы — это программно-аппаратные комплексы для мониторинга и управления промышленными процессами. При сбоях и авариях они формируют критические уведомления о перегревах, утечках, отказах оборудования и других опасных ситуациях.
Отправлять такие оповещения в Telegram значит их гарантированно потерять. Поэтому мы решили сделать интеграцию с Exolve API для их автоматической отправки для мгновенного оповещения ответственных специалистов через SMS.
Архитектура интеграции SCADA с Exolve API
Прежде чем выстраивать интеграцию, стоит понять, как весь процесс будет выглядеть на практике. Вот общая схема:

Рассмотрим детальнее основные аспекты архитектуры взаимодействия.
1. Общая схема взаимодействия SCADA-системы и Exolve API.
SCADA-система фиксирует аварийные события (например, превышение температуры, отказ насоса, утечка газа) и передает их в Exolve API. API, в свою очередь, обрабатывает данные, определяет получателей и отправляет уведомления по заданным каналам (SMS, email, push-уведомления).
2. Варианты интеграции.
Интеграция может выполняться двумя основными способами:
-
Встроенные механизмы 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.
3. Поток обработки событий.
-
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-системах
1. WinCC.
WinCC позволяет настраивать HTTP-запросы через встроенные скрипты VBScript или C-скрипты. Пример выше демонстрирует использование VBScript для отправки SMS через Exolve API.
2. 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())
3. 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_Logs\Exolve_API.log", 8, True) logFile.WriteLine Now() & " - " & message logFile.Close End Sub
Для интеграции с алармом в настройках аларма добавьте вызов функции SendTemperatureAlert с передачей текущего значения температуры.
Тестирование работы и анализ логов
Тестирование:
-
Установите значение температуры выше порогового (например, 105 °C) через симулятор или вручную.
-
Убедитесь, что аларм срабатывает и вызывается скрипт отправки SMS.
-
Проверьте получение SMS на указанный номер телефона.
Анализ логов:
-
Проверьте файл логов C:\SCADA_Logs\Exolve_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/articles/892032/
Добавить комментарий