Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Grigoriy075 от 18 Сентября 2025, 10:24:33

Название: Telegram уведомления
Отправлено: Grigoriy075 от 18 Сентября 2025, 10:24:33
Здравствуйте. Помогите написать скрипт отправки сообщения в Telegram. Есть скрипт вывода текста о причине запуска, как продублировать то же самое в Telegram?
Код: (delphi)
begin
  if Sender is TM_Text then   // проверяем, что Sender это текст
    with Sender as TM_Text do // приводим Sender к типу "TM_Text"
      case AsInt of
        128 : Text331.Text := 'Ручной';
        129 : Text331.Text := 'Автоматический';
        130 : Text331.Text := 'Дистанц.RS485';
      end;
end.
Название: Re: Telegram уведомления
Отправлено: Simple_Scada от 18 Сентября 2025, 11:16:57
Здравствуйте.

1. Предварительно нужно настроить параметры отправки Telegram-сообщений, подробнее см. в разделе "Настройка Telegram (https://simple-scada.com/help/manual/telegramset.html)".
2. Для отправки Telegram-сообщения нужно использовать процедуру "SendTelegram (https://simple-scada.com/help/script/sendtelegram.html)".
3. Если требуется отправить Telegram сообщение группе пользователей (https://simple-scada.com/help/manual/newusergroup.html), то можно использовать метод SendTelegram для группы (https://simple-scada.com/help/script/sendtelegramgroup.html).
4. Примеры скриптов для отправки Telegram-сообщений можно найти здесь (https://simple-scada.com/help/script/sendtelegram.html) и здесь (https://simple-scada.com/help/script/sendmess.html).

К примеру, можно создать скрипт с типом события "Изменились переменные (https://simple-scada.com/help/script/changemulvar.html)", добавить в список скрипта переменные, по которым должны отправляться оповещения и написать следующий код:
Код: (delphi)
begin
  // пропускаем первое изменение переменной, чтобы скрипт не выполнялся при перезапусках проекта
  if not IsFirstChange then
  // при необходимости добавляем в сообщение нужную информацию, например имя или описание переменной
    case Variable.AsInt of
      128 : SendTelegram ('Активирован ручной режим ' + Variable.Description);
      129 : SendTelegram ('Активирован автоматический режим ' + Variable.Description);
      130 : SendTelegram ('Активирован дистанционный режим RS-485' + Variable.Description);
    end;
end.
Данный скрипт будет отправлять сообщения в Telegram при изменении переменных, добавленных в список скрипта. Первое изменение переменных будет пропущено, чтобы сообщения не отправлялись при перезапусках проекта.

Также комментарий по приведенному Вами коду скрипта: рекомендуем использовать универсальные скрипты (https://simple-scada.com/help/script/script-types.html), тогда не нужно будет писать отдельный скрипт для каждого объекта. Исправленный вариант скрипта:
Код: (delphi)
begin
  if Sender is TM_Text then   // проверяем, что Sender это текст
    with Sender as TM_Text do // приводим Sender к типу "TM_Text"
      case AsInt of
        128 : Text := 'Ручной';
        129 : Text := 'Автоматический';
        130 : Text := 'Дистанц.RS485';
      end;
end.
Данный скрипт можно назначить всем объектам, у которых текст должен меняться по таким условиям.

Если не разберетесь, то пришлите на support@simple-scada.com текущую версию Вашего проекта из директории "..\Simple-Scada 2\Projects\" и укажите скрипт, который нужно проверить. 
Название: Re: Telegram уведомления
Отправлено: Grigoriy075 от 18 Сентября 2025, 21:20:50
Огромное Вам спасибо, очень помогли.
Есть один момент если я убираю данную строку то все работает нормально
Код
 
 // пропускаем первое изменение переменной, чтобы скрипт не выполнялся при перезапусках проекта
  if not IsFirstChange then

Если снова ее прописываю то сообщения перестают отправляться, в чем может быть причина?
Название: Re: Telegram уведомления
Отправлено: Simple_Scada от 18 Сентября 2025, 22:30:48
Цитировать
Есть один момент если я убираю данную строку то все работает нормально. Если снова ее прописываю то сообщения перестают отправляться, в чем может быть причина?
Назначение данной строки кода описано в комментарии скрипта выше. Функция IsFirstChange позволяет пропустить первое изменение переменной. Если убрать данную строку, то при каждом перезапуске проекта, либо при разрыве/восстановлении связи с OPC-сервером, будут отправляться сообщения. Т.е., несколько раз перезапустив проект, можно получить такое же количество одинаковых сообщений в Telegram.

Обычно требуется пропускать первое изменение переменной после запуска проекта и отправлять сообщение только при следующем изменении переменной. Если Вас устраивает отправка сообщений при каждом перезапуске проекта, то можно удалить данную строку из скрипта.