AnyMath 文档
Notebook

从Engee发送信息到Telegram

此示例讨论如何使用DotEnv包。jl和电报。jl用于通过Telegram机器人自动发送有关模拟进度和结果的报告。

导言

我们已经考虑过[与Telegram合作](https://engee.com/community/ru/catalogs/projects/detektor-zvuka-v-telegram-bote )在Engee中,嵌入在ESP8266上的Engee模型生成的代码接收命令并向Telegram bot发送报告。 此外,在其中一个[最近的例子](https://engee.com/community/ru/catalogs/projects/api-engee ),我们提供了从外部应用程序通过API管理Engee的必要材料。 但是,外部APIEngee允许您仅使用[软件控制]与模型交互(https://engee.com/helpcenter/stable/ru/modeling/programmatic-modeling.html ),这可能看起来不像是这样全面,灵活或简单的外部集成方式。

在这个例子中,我们将深入研究Engee模型本身-我们将让它有机会通过向Telegram频道发送消息来处理模拟结果并报告其工作。

环境变量

要与机器人和电报通道进行交互,我们需要两个变量,分别是在创建时发出的机器人令牌和易于进入应用程序的通道id。 这两个变量都将在环境配置文件-中正确定义。恩维 它没有显示在Engee文件浏览器中,但它在那里。 Engee不会在文件浏览器中显示以点开头的文件。
为了使示例工作,您需要获取自己的bot令牌和通道id,并将它们添加到。env文件。

In [ ]:
]add DotEnv # 安装用于使用的软件包。env文件

下载文件内容 .env 从文件:

In [ ]:
using DotEnv
cd(@__DIR__) # 转到示例文件夹
isfile(".env") && DotEnv.load!() # 正在下载。当前文件夹中的env

将必要的变量添加到工作区:

In [ ]:
BOT_TOKEN = ENV["BOT_TOKEN"];
CHAT_ID = ENV["CHAT_ID"];

如果你在工作上有困难。env文件,可以在这里定义token和id。:

In [ ]:
# BOT_TOKEN = '8555970365:AAF0fcmjsJxWIjVUFUmyKrVYv6TtjCT1jeI'
# CHAT_ID = '-1003547189719'

要非常小心-使用机器人令牌可能会导致失去对机器人的控制。
上面和文件中指定的令牌和id .env 它们是在准备示例后有意编辑的。

测试消息发送

让我们开始使用Telegram。 让我们安装电报.jl包,它为我们提供了几种使用Telegram API的方法。

In [ ]:
]add Telegram

让我们准备发送数据:添加标点符号的屏幕,以便在发送之前由解析器正确处理它们。

In [ ]:
EV = engee.version()
EV = replace(EV, r"([.-])" => s"\\\1")
Out[0]:
"25\\.12\\.2\\-H1"

向频道发送消息:

In [ ]:
using Telegram, Telegram.API

TelegramClient(BOT_TOKEN; chat_id = CHAT_ID) # 创建具有通道访问权限的Telegram bot客户端
sendMessage(text = "*来自[Engee]的问候(https://engee.com/account /)\\!*n'engee。版本()`:\n>EV EV",
            parse_mode = "MarkdownV2") # 使用Markdown标记支持发送消息
Out[0]:
JSON3.Object{Vector{UInt8}, SubArray{UInt64, 1, Vector{UInt64}, Tuple{UnitRange{Int64}}, true}} with 7 entries:
  :message_id           => 505
  :sender_chat          => {…
  :chat                 => {…
  :date                 => 1769767359
  :text                 => "Привет из Engee!\n\nengee.version():\n25.12.2-H1"
  :entities             => Object[{…
  :link_preview_options => {…

因此,我们将在通道中看到以下消息:

image.png

注意标记支持,以及发送消息中的标点符号转义。

在建模中使用Telegram API

现在让我们从[面向模型的设计]的角度继续进行Engee和Telegram的更有趣的集成(https://engee.com/helpcenter/stable/ru/explanation/model-based-design.html )。 考虑以下用户案例:

-您运行具有执行时间控制的模型-即在有条件的实时,
-你运行一个模型很长的执行时间,
-你运行一个"沉重"的模型。

在所有这些情况下,您很可能需要等待很长时间才能收到结果。 为了不浪费你的工作时间看图表的运动,你可以在[回调](https://engee.com/helpcenter/stable/ru/modeling/callbacks-engee.html ),并在空闲时间,休息一下阅读最新的[release-notes](https://engee.com/helpcenter/stable/ru/release-notes/2025/release-25.12.html )或[有趣的проекты](https://engee.com/community/ru/catalogs/projects/avtomaticheskaia-sborka-i-simuliatsiia-modeli )在Engee社区。 当您收到机器人的通知时,您将返回到模型。

本例的模型是正弦信号发生器。 执行时间控制在其设置中定义。 Engee试图以几乎等于真实的时间执行模型。

它的回调现在对我们感兴趣。 打开标签 PreLoadFunc:

image.png

它包含了我们已经熟悉的代码行。 接下来,在选项卡中 PostLoadFunc 我们拭目以待:

image.png

也就是说,在打开模型后,将向Telegram频道发送有关使用其数据打开模型的通知。 接下来,标签 StartFunc:

image.png

最有趣的是在标签上 StopFunc :

image.png

让我们运行模型,看看它是如何工作的。:

一切都按计划进行。 让我们穿上一个模型,去吃午饭。

结论

此外,还可以实现"反馈"-例如,通过bot命令管理Engee帐户,计算和建模。 您可以将此模型用作项目中自动化报表的模板。 只是不要忘记添加您的机器人令牌和电报频道ID。