PDA

Просмотр полной версии : модуль whatsapp или telegram?



kjum4n
28.05.2022, 10:22
всем привет! есть у кого опыт экспорта тревог\аварий и информационных сообщений( а в идеале еще и отчетов ) с мс3 в мессенджеры?

keysansa
28.05.2022, 12:58
Вы с мессенждерами работали?

kjum4n
28.05.2022, 13:03
было дело в телегу бот делал для пересылки сообщений со скады, скада слала на почту а бот с почты забирал и выкладывал в группу, но в моей лицензии на мс3 нет ключа для отправки отчетов почты... вот и думаю как можно костыль изобрести)

keysansa
28.05.2022, 13:07
Как бот может получать данные?

kjum4n
28.05.2022, 13:12
если бы у меня было решение этого вопроса я бы не создал эту тему)))
были мысли брать с бд напрямую ( бд юзаю внешнюю ), но вдруг есть способ проще...

keysansa
28.05.2022, 13:22
Ок, давайте, найдем способ проще.
1. Клиенту надо куда-то подключиться.
2. По какому-то протоколу
3. Боту надо иметь возможность в принципе куда-то подключиться и по какому-то протоколу.

Нарисуйте круги Эйлера и вы найдете самый лучший вариант.

ЗЫ. Вы складываете данные в доступную извне БД, ваш бот может брать данные из БД и вам нужен способ проще?

melky
28.05.2022, 14:00
Есть готовое решение, но придется использовать другую 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.

kjum4n
28.05.2022, 18:17
спасибо! буду пробовать интегрировать!)

kjum4n
28.05.2022, 19:08
Есть специальный скрипт для 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

kjum4n
29.05.2022, 08:53
Мы не пробовали, но вроде как можно сделать:
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"; вставлять значение с мнемосхемы?

Присвоить ему значение какого нибудь входа типа Строка

kjum4n
29.05.2022, 16:05
не работает... что я делаю не так? код в телегу приходит, а авторизации не происходит...
https://dropmefiles.com/QH4w0 - архив проекта

kjum4n
29.05.2022, 16:17
60953
скрин прилагается....

SCADAMaster
29.05.2022, 20:12
Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.

kjum4n
29.05.2022, 20:21
[QUOTE=SCADAMaster;382146]Так в какой момент возникает ошибка? Вы сделали API_ID и HASH?
Перепроверили сейчас еще раз, с нашим телефоном и API_ID - все прекрасно работает.[/Q
да сделал? код приходит на телефон. после ввода кода и включения входа авторизация ничего не происходит...
60955

kjum4n
29.05.2022, 20:27
ваш код скрипта:
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;
}

}


}

kjum4n
29.05.2022, 21:37
в дэмоверсии должно работать? лицензию еще не подвезли на этот объект...
в журнале ошибка 0х80131500

SCADAMaster
30.05.2022, 09:29
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?

kjum4n
30.05.2022, 10:35
Да, должно работать на любой версии.
Библиотеки положили в папку скады? Какая версия MasterSCADA?

версия скады 3.12.0.25522 3.12(Demo)_22_02_07_11_25
DLL положил по пути C:\Program Files (x86)\MPSSoft\MasterSCADA

kjum4n
30.05.2022, 10:45
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.

kjum4n
30.05.2022, 10:58
С виду да.
Единственный вариант который видится - напишите на support и предоставьте доступ по AnyDesk.

вот видео действий -
https://youtu.be/Nm087rOiiyk

странно, сейчас и код не приходит...

SCADAMaster
30.05.2022, 11:03
Возможно что-то блокирует отправку запроса. Попробуйте выключить фаервол/антивирус.

DarkNOX
18.12.2022, 23:16
А кто то пробовал использовать телеграмм бота? Используя библиотеку 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