всем привет! есть у кого опыт экспорта тревог\аварий и информационных сообщений( а в идеале еще и отчетов ) с мс3 в мессенджеры?
Вид для печати
всем привет! есть у кого опыт экспорта тревог\аварий и информационных сообщений( а в идеале еще и отчетов ) с мс3 в мессенджеры?
Вы с мессенждерами работали?
было дело в телегу бот делал для пересылки сообщений со скады, скада слала на почту а бот с почты забирал и выкладывал в группу, но в моей лицензии на мс3 нет ключа для отправки отчетов почты... вот и думаю как можно костыль изобрести)
Как бот может получать данные?
если бы у меня было решение этого вопроса я бы не создал эту тему)))
были мысли брать с бд напрямую ( бд юзаю внешнюю ), но вдруг есть способ проще...
Ок, давайте, найдем способ проще.
1. Клиенту надо куда-то подключиться.
2. По какому-то протоколу
3. Боту надо иметь возможность в принципе куда-то подключиться и по какому-то протоколу.
Нарисуйте круги Эйлера и вы найдете самый лучший вариант.
ЗЫ. Вы складываете данные в доступную извне БД, ваш бот может брать данные из БД и вам нужен способ проще?
Есть готовое решение, но придется использовать другую Scada :) хотя бы читать данные из БД и оправлять на Email и Telegramm. цена вопроса 7200 если для предприятия.
в сторонней Scada ничего не храним, тупо контролируем нужные каналы.
Есть специальный скрипт для MasterSCADA для отправки сообщений в Telegram.
Возможно в следующей версии сделаем поддержку полноценного канала.
Пример по ссылке ниже.
Нужно получить API_ID и HASH:
https://tlgrm.ru/docs/api/obtaining_api_id
прописать в строку:
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f");
Указать номер телефона отправителя и получателя:
[FBNonRetain] string TelephoneNumber="+79038008810";
[FBNonRetain] string DestNumber="79037002236";
В режиме исполнения подаете сигнал на получить код. Полученный код (из телеграма телефона например) вписываете в Код.
Подаете сигнал на Авторизоваться.
Послать - послать тестовое сообщение.
Все сообщения которые генерируют Событие 1 и Событие 2 будут отправляться в телеграм
По ссылке проект и библиотеки
https://disk.yandex.ru/d/zTUb9ARWjP58Rw
Положить сюда:
c:\Program Files (x86)\MpsSoft\MasterSCADA\
Про какой проект идет речь?
Скрипт нужно вставить в текущий проект и адаптировать его в коде - например указать какие категории выводить в Telegram. Скрипт сам перехватывает сообщение и отправляет. Каких то глобальных доработок в проекте делать не надо.
спасибо! буду пробовать интегрировать!)
Мы не пробовали, но вроде как можно сделать:
https://stackoverflow.com/questions/...age-to-a-group
не работает... что я делаю не так? код в телегу приходит, а авторизации не происходит...
https://dropmefiles.com/QH4w0 - архив проекта
Вложение 60953
скрин прилагается....
Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.
[QUOTE=SCADAMaster;382146]Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.[/Q
да сделал? код приходит на телефон. после ввода кода и включения входа авторизация ничего не происходит...
Вложение 60955
ваш код скрипта:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using TeleSharp.TL;
using TLSharp.Core;
using System.Threading.Tasks;
using MasterSCADA.Hlp.Events;
using System.Collections.Generic;
[FBRetain]
public partial class ФБ : ScriptBase
{
string hash="";
bool? M=false;
bool? L=false;
bool? O=false;
[FBNonRetain] TelegramClient Client=null;
[FBNonRetain] TLVector<TLAbsUser> Contacts=null;
[FBNonRetain] string TelephoneNumber="+79038000102";
[FBNonRetain] string DestNumber="79520690102";
[FBNonRetain] List<string> Messages=new List<string>();
public override void Start()
{
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f",null,"TelegramS ession",null,DataCenterIPVersion.Default,HostFB.Tr eeItemHlp.Project.Path);
Client.ConnectAsync().Wait();
Ошибка=false;
ТекстОшибки="";
АвторизацияУспешна=false;
Authorization();
//подписка на изменение сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsC hangeEvent += AlarmManager_OnRecordsChangeEvent;
//подписка на добавление сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsA ddEvent += AlarmManager_OnRecordsChangeEvent;
//System.Diagnostics.Debug.Assert(false);
}
public override void Execute()
{
if (ПолучитьКод==true && M==false)
{
var hashTask = Client.SendCodeRequestAsync(TelephoneNumber);
hashTask.Wait();
hash = hashTask.Result;
АвторизацияУспешна=false;
}
M=ПолучитьКод;
if (Авторизоваться==true && L==false)
{
Authorization();
}
L=Авторизоваться;
if (АвторизацияУспешна==false) return;
if (Послать==true && O==false)
{
Send("Test");
}
lock(this)
{
if (Messages.Count>0)
{
foreach (string Message in Messages)
{
Send(Message);
}
Messages.Clear();
}
}
O=Послать;
}
void AlarmManager_OnRecordsChangeEvent(MasterSCADA.Hlp. Events.AlarmManagerHlp manager, MasterSCADA.Interfaces.EventID[] eventIDs)
{
lock (this)
{
var filter = new EventFilterData();
var FilterObject = HostFB.TreeItemHlp.Parent; // объект, в котором искать сообщения
filter.Sources.Add(FilterObject);
filter.EventIDs=eventIDs; //фильтруем по новым EventID
var events = manager.GetEvents(HostFB.TreeItemHlp.Parent, filter, 1000);
foreach (var NewEvent in events)
{
string Message=NewEvent.Message;
Messages.Add(Message);
}
}
HostFB.SetNeedUpdate();
}
public void Authorization()
{
if (Код=="" || hash=="")
{
return;
}
try
{
var user = Client.MakeAuthAsync(TelephoneNumber, hash, Код);
user.Wait();
var resultTask = Client.GetContactsAsync();
resultTask.Wait();
Contacts = resultTask.Result.Users;
АвторизацияУспешна=true;
Ошибка=false;
ТекстОшибки="";
}
catch (Exception ex)
{
ТекстОшибки=ex.Message;
Ошибка=true;
АвторизацияУспешна=false;
}
}
public void Send(string Message)
{
try
{
foreach (var it in Contacts)
{
if (it.GetType() == typeof(TLUser))
{
TLUser User = (TLUser)it;
string Phone = User.Phone;
if (Phone == DestNumber)
{
var Send=Client.SendMessageAsync(new TLInputPeerUser() { UserId = User.Id }, Message);
Send.Wait();
}
}
}
Ошибка=false;
ТекстОшибки="";
}
catch (Exception Ex)
{
Ошибка=true;
ТекстОшибки=Ex.Message;
}
}
}
после внесения изменений:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using TeleSharp.TL;
using TLSharp.Core;
using System.Threading.Tasks;
using MasterSCADA.Hlp.Events;
using System.Collections.Generic;
[FBRetain]
public partial class ФБ : ScriptBase
{
string hash="";
bool? M=false;
bool? L=false;
bool? O=false;
[FBNonRetain] TelegramClient Client=null;
[FBNonRetain] TLVector<TLAbsUser> Contacts=null;
[FBNonRetain] string TelephoneNumber="+79644954773";
[FBNonRetain] string DestNumber="79137928646";
[FBNonRetain] List<string> Messages=new List<string>();
public override void Start()
{
Client = new TelegramClient(18376347, "0cfd144a477581157fd2b3948f049076",null,"TelegramS ession",null,DataCenterIPVersion.Default,HostFB.Tr eeItemHlp.Project.Path);
Client.ConnectAsync().Wait();
Ошибка=false;
ТекстОшибки="";
АвторизацияУспешна=false;
Authorization();
//подписка на изменение сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsC hangeEvent += AlarmManager_OnRecordsChangeEvent;
//подписка на добавление сообщений
HostFB.TreeItemHlp.Project.AlarmManager.OnRecordsA ddEvent += AlarmManager_OnRecordsChangeEvent;
//System.Diagnostics.Debug.Assert(false);
}
public override void Execute()
{
if (ПолучитьКод==true && M==false)
{
var hashTask = Client.SendCodeRequestAsync(TelephoneNumber);
hashTask.Wait();
hash = hashTask.Result;
АвторизацияУспешна=false;
}
M=ПолучитьКод;
if (Авторизоваться==true && L==false)
{
Authorization();
}
L=Авторизоваться;
if (АвторизацияУспешна==false) return;
if (Послать==true && O==false)
{
Send("Test");
}
lock(this)
{
if (Messages.Count>0)
{
foreach (string Message in Messages)
{
Send(Message);
}
Messages.Clear();
}
}
O=Послать;
}
void AlarmManager_OnRecordsChangeEvent(MasterSCADA.Hlp. Events.AlarmManagerHlp manager, MasterSCADA.Interfaces.EventID[] eventIDs)
{
lock (this)
{
var filter = new EventFilterData();
var FilterObject = HostFB.TreeItemHlp.Parent; // объект, в котором искать сообщения
filter.Sources.Add(FilterObject);
filter.EventIDs=eventIDs; //фильтруем по новым EventID
var events = manager.GetEvents(HostFB.TreeItemHlp.Parent, filter, 1000);
foreach (var NewEvent in events)
{
string Message=NewEvent.Message;
Messages.Add(Message);
}
}
HostFB.SetNeedUpdate();
}
public void Authorization()
{
if (Код=="" || hash=="")
{
return;
}
try
{
var user = Client.MakeAuthAsync(TelephoneNumber, hash, Код);
user.Wait();
var resultTask = Client.GetContactsAsync();
resultTask.Wait();
Contacts = resultTask.Result.Users;
АвторизацияУспешна=true;
Ошибка=false;
ТекстОшибки="";
}
catch (Exception ex)
{
ТекстОшибки=ex.Message;
Ошибка=true;
АвторизацияУспешна=false;
}
}
public void Send(string Message)
{
try
{
foreach (var it in Contacts)
{
if (it.GetType() == typeof(TLUser))
{
TLUser User = (TLUser)it;
string Phone = User.Phone;
if (Phone == DestNumber)
{
var Send=Client.SendMessageAsync(new TLInputPeerUser() { UserId = User.Id }, Message);
Send.Wait();
}
}
}
Ошибка=false;
ТекстОшибки="";
}
catch (Exception Ex)
{
Ошибка=true;
ТекстОшибки=Ex.Message;
}
}
}
в дэмоверсии должно работать? лицензию еще не подвезли на этот объект...
в журнале ошибка 0х80131500
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f",null,"Teleg ramS ession",null,DataCenterIPVersion.Default,HostFB.Tr eeItemHlp.Project.Path);
это api ID - 1603676, 91545868ec615faf6c751beb93909a1f - это api hash.
[FBNonRetain] string TelephoneNumber="+79038000102"; - номер отправителя
[FBNonRetain] string DestNumber="79520690102"; - номер полуяателя
больше не чего в коде скрипта не меняю? все ведь верно... вроде...
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.
вот видео действий - https://youtu.be/Nm087rOiiyk
странно, сейчас и код не приходит...
Возможно что-то блокирует отправку запроса. Попробуйте выключить фаервол/антивирус.
А кто то пробовал использовать телеграмм бота? Используя библиотеку Telegram.Bot.dll ?
Либо хотя бы код для отправки GET запроса используя httpClient. Перепробовал различные варианты по примерам в инете, никак не работает. Предполагаю, что есть какие то особенности MasterSCADA, которые не дают адекватно работать.
В VisualStudio:
using System;
using System.Threading;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bots.Extensions.Polling;
using Telegram.Bot.Types;
using Telegram.Bot.Exceptions;
namespace TelegramBotExperiments
{
class Program
{
static ITelegramBotClient bot = new TelegramBotClient("TOKEN");
static void Main(string[] args)
{
Console.WriteLine("Запущен бот " + bot.GetMeAsync().Result.FirstName);
bot.SendTextMessageAsync(1131266378, "проверка");
Console.ReadLine();
}
}
} - ВСЕ РАБОТАЕТ
В MasterSCADA:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
using System.Threading.Tasks;
using System.Threading;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Exceptions;
using Telegram.Bot.Args;
using Telegram.Bot.Extensions.Polling;
public partial class ФБ : ScriptBase
{
static ITelegramBotClient bot = new TelegramBotClient("TOKEN");
public override void Start()
{
BotID=bot.BotId;
bot.SendTextMessageAsync(1131266378, "проверка");
}
public override void Execute()
{
if (Послать==true)
{
ТекстОшибки="Отправлено";
bot.SendTextMessageAsync(1131266378, "проверка");
}
}
} - НЕ РАБОТАЕТ
В версии бета версии он теперь доступен штатно:
https://support.mps-soft.ru/MasterSC..._telegram.html
Какой то механизм там был для этого, лучше уточнить напрямую в техподдержке по MS4:
https://support.masterscada.ru/ru
Привет. Может лучше использовать уведомления приложения OwenCloud для выдачи аварий. Звук уведомлений OwenCloud можно сделать отличным от уведомлений ватсап и телеграм. И на этот звук точно среагируешь. От телеги и ватсап в течении дня много сообщений, на которые не обязательно быстро реагировать. В веб версии можно подрегулировать какие сообщения и возможности доступны для каждого пользователя.
Спасибо что откликнулись!
Радует конечно то что у сервиса OwenCloud есть базовый функционал (бесплатный), но все классные "рюшечки" платно!
И на сколько я понял, сервис OwenCloud предназначен для удаленного сбора данных с подключенных приборов, и оперативного оповещения об аварийных ситуациях на объектах где установлены эти приборы.
А у меня встал вопрос в оповещении с уже работающих систем и причём довольно древних, самая древняя из них, версия мастер скада 3.6. Именно поэтому и заинтересовал опыт использования скрипта telegram. В идеале конечно бы было как то интегрировать ФБ telegram из мастерскады версии 3.13, там всё более или мене понятно, и опять же организация канала имеет большой плюс.
За сим и вопрос был к "Скадистам" кто воплотил в жизнь вариант со скриптом telegram.
А поставить что-то поновее просто в качестве агрегатор а для телеграм?
Суть, у вас древние системы, где один и тот же скирьп может вести себя по разному.
А так, с древних систем кидаете данные на агрегатор и там уже одной телегой управляетесь.
Доброго здоровья вам Мelky!
Ну так то да, я тоже думал в этом направлении...
...даже можно тем же OwenCloud, типа со старых - действующих скад собирать "алармы" на один ПЛК, а уже с него через инет и OwenCloud в телегу или даже вроде как есть прямой вариант с ПЛК В телегу.
Просто это всё как то ...
На данном этапе мне нужен простой на уровне кода способ купирования проблемы, хотя бы годика на 2-3, а потом у руководства Наполеоновские планы глобализация и всё такое...
...жалко что с Мастер скады соскачить хотят, она милая с 2011 года у нас на площадках верой и правдой работала, не раз купировала в зародыше проблемы выдав предупреждение или аларм оперативному персоналу!!!
п/с а как ваша система Мelky? вы доделали свой универсальный вариант фермы на базе RapidScada
(если готова пишите в личку, я вам дам адрес наших глобалистов, возможно они заинтересуются вашим проектом!)
yurgin_757, доделать в одно лицо, когда занят другим, шутите? :)
К тому же я не вентиляционщик, не знаю алгоритмов управления, да ещё с учётом адиабатики.
В общем там много чего...
И правильно хотят слезть, MS4D не тот торт. А обещанного как говорится три года ждут.
если есть доступ ко всем сетям, где стоит MS3 то вполне вариант.Цитата:
на один ПЛК, а уже с него через инет и OwenCloud
Нюансы: - в MS3 есть Modbus slave по умолчанию? ( не знаю просто). Так то можно развернуть RapidScada без сохранения БД на любом сервере существующем, потребуется Модуль управления и собственно драйвер Телеграм (из платного) и никаких облаков.