Просмотр полной версии : модуль whatsapp или telegram?
всем привет! есть у кого опыт экспорта тревог\аварий и информационных сообщений( а в идеале еще и отчетов ) с мс3 в мессенджеры?
keysansa
28.05.2022, 12:58
Вы с мессенждерами работали?
было дело в телегу бот делал для пересылки сообщений со скады, скада слала на почту а бот с почты забирал и выкладывал в группу, но в моей лицензии на мс3 нет ключа для отправки отчетов почты... вот и думаю как можно костыль изобрести)
keysansa
28.05.2022, 13:07
Как бот может получать данные?
если бы у меня было решение этого вопроса я бы не создал эту тему)))
были мысли брать с бд напрямую ( бд юзаю внешнюю ), но вдруг есть способ проще...
keysansa
28.05.2022, 13:22
Ок, давайте, найдем способ проще.
1. Клиенту надо куда-то подключиться.
2. По какому-то протоколу
3. Боту надо иметь возможность в принципе куда-то подключиться и по какому-то протоколу.
Нарисуйте круги Эйлера и вы найдете самый лучший вариант.
ЗЫ. Вы складываете данные в доступную извне БД, ваш бот может брать данные из БД и вам нужен способ проще?
Есть готовое решение, но придется использовать другую Scada :) хотя бы читать данные из БД и оправлять на Email и Telegramm. цена вопроса 7200 если для предприятия.
в сторонней Scada ничего не храним, тупо контролируем нужные каналы.
keysansa
28.05.2022, 14:10
Есть готовое решение, но придется использовать другую Scada :) хотя бы читать данные из БД и оправлять на Email и Telegramm. цена вопроса 7200 если для предприятия.
в сторонней Scada ничего не храним, тупо контролируем нужные каналы.
Мы тут вообще-то ищем решение исходя из существующего бюджета )))
SCADAMaster
28.05.2022, 14:12
Есть специальный скрипт для 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\
keysansa
28.05.2022, 14:15
Есть специальный скрипт для MasterSCADA для отправки сообщений в Telegram.
Проект MasterSCADA бесплатно перепишет?
SCADAMaster
28.05.2022, 14:32
Про какой проект идет речь?
Скрипт нужно вставить в текущий проект и адаптировать его в коде - например указать какие категории выводить в Telegram. Скрипт сам перехватывает сообщение и отправляет. Каких то глобальных доработок в проекте делать не надо.
keysansa
28.05.2022, 14:35
Про какой проект идет речь?
Скрипт нужно вставить в текущий проект и адаптировать его в коде - например указать какие категории выводить в Telegram. Скрипт сам перехватывает сообщение и отправляет. Каких то глобальных доработок в проекте делать не надо.
Я прошу прощения, не заметил, что обсуждение идет в теме MasterSCADA.
спасибо! буду пробовать интегрировать!)
Есть специальный скрипт для 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\
а в чат групповой есть возможность отправки?
SCADAMaster
28.05.2022, 20:03
Мы не пробовали, но вроде как можно сделать:
https://stackoverflow.com/questions/52597753/tlsharp-send-message-to-a-group
Мы не пробовали, но вроде как можно сделать:
https://stackoverflow.com/questions/52597753/tlsharp-send-message-to-a-group
еще вопросы, как можно в строку [FBNonRetain] string DestNumber="79037002236"; вставлять значение с мнемосхемы?
несколько номеров через запятую можно указать?
SCADAMaster
29.05.2022, 11:00
еще вопросы, как можно в строку [FBNonRetain] string DestNumber="79037002236"; вставлять значение с мнемосхемы?
Присвоить ему значение какого нибудь входа типа Строка
не работает... что я делаю не так? код в телегу приходит, а авторизации не происходит...
https://dropmefiles.com/QH4w0 - архив проекта
60953
скрин прилагается....
SCADAMaster
29.05.2022, 20:12
Так в какой момент возникает ошибка? Вы сделали 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,"TelegramSession",null,DataCenterIPVersion.Default,HostFB.TreeItemH lp.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,"TelegramSession",null,DataCenterIPVersion.Default,HostFB.TreeItemH lp.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
SCADAMaster
30.05.2022, 09:29
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?
версия скады 3.12.0.25522 3.12(Demo)_22_02_07_11_25
DLL положил по пути C:\Program Files (x86)\MPSSoft\MasterSCADA
Client = new TelegramClient(1603676, "91545868ec615faf6c751beb93909a1f",null,"TelegramS ession",null,DataCenterIPVersion.Default,HostFB.Tr eeItemHlp.Project.Path);
это api ID - 1603676, 91545868ec615faf6c751beb93909a1f - это api hash.
[FBNonRetain] string TelephoneNumber="+79038000102"; - номер отправителя
[FBNonRetain] string DestNumber="79520690102"; - номер полуяателя
больше не чего в коде скрипта не меняю? все ведь верно... вроде...
SCADAMaster
30.05.2022, 10:48
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.
вот видео действий -
https://youtu.be/Nm087rOiiyk
странно, сейчас и код не приходит...
SCADAMaster
30.05.2022, 11:03
Возможно что-то блокирует отправку запроса. Попробуйте выключить фаервол/антивирус.
А кто то пробовал использовать телеграмм бота? Используя библиотеку 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, "проверка");
}
}
} - НЕ РАБОТАЕТ
SCADAMaster
19.12.2022, 09:47
В версии бета версии он теперь доступен штатно:
https://support.mps-soft.ru/MasterSCADAHelp/index.html?proekt_stranicy_svojstv_elementov_srran icy_svojstv_sistemy_soobschenia_telegram.html
Anton156
07.02.2023, 09:18
В версии бета версии он теперь доступен штатно:
https://support.mps-soft.ru/MasterSCADAHelp/index.html?proekt_stranicy_svojstv_elementov_srran icy_svojstv_sistemy_soobschenia_telegram.html
Здравствуйте!
Извините, что не в тот раздел, а тоже самое, но для MasterSCADA 4D есть?
SCADAMaster
07.02.2023, 09:24
Какой то механизм там был для этого, лучше уточнить напрямую в техподдержке по MS4:
https://support.masterscada.ru/ru
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot