如何通过 Telegram 来控制树莓派?

在这个项目中,我们将通过向您展示如何利用 Telegram 来控制树莓派来构建 Telegram 教程。

我们将通过使用 Telegram CLI 中内置的 LUA 解释器来实现此目的,该解释器将使它具有多种功能。

LUA 解释器允许我们对某些功能进行编程,这些功能将在 Telegram CLI 上发生某些事情时触发,例如在收到消息时触发。

该解释器使我们能够根据接收到的消息执行某些操作,我们将向您展示的两个简单任务是一个简单的接收消息和回复,以及如何设置电报 CLI 以便触发外部 bash 脚本并自动上传照片。

在继续本教程之前,请确保您已完成我们的 Telegram CLI 教程,从而为该指南奠定了基础。

设备清单

以下是本指南中有关使用 Telegram CLI 控制树莓派的所有内容。

推荐的

  • 树莓派 2 或 3

  • Micro SD 卡

  • 电源

  • 以太网网络连接或 * Wifi 加密狗 (Pi 3 具有 WiFi 内置的)

可选的

  • 树莓派外壳

为 Telegram CLI 编写第一个脚本

1 在开始本教程之前,您首先必须完成我们的基础 Telegram 教程,因为这将带您完成在树莓派上设置 Telegram 的所有步骤。

完成电报的设置后,您可以继续本教程。在本教程中,将向您展示如何利用 Telegram CL 的 LUA 解释器,以便我们可以主动监视收到的消息并根据收到的消息采取措施。基本上是设置我们自己的树莓派电报机器人,该机器人将响应发送给它的命令。

对于那些不了解 LUA 是非常强大的的人来说,它是一种快速,轻量级和可嵌入的脚本语言。许多应用程序使用 LUA 来使人们可以轻松地修改和扩展其应用程序。

在 Lua 脚本中,我们将编写必须实现的七个不同功能,即使我们仅使用其中一个功能,也需要具备所有功能以停止持续警告。

这个 LUA 脚本将是基本的,它会用”pong” 回复每条用”pong” 表示的消息,而简单的它将为您提供有关如何处理文本消息的想法。

让我们开始在树莓派上运行以下两个命令,为 Telegram 编写 LUA 脚本。

cd〜/tg
vim 动作

2 打开 ** actions.lua ** 文件后,我们需要将以下代码行写入其中。我们将在将每个部分写入文件时对其进行说明。请记住保留标签,因为 LUA 对空格敏感。

函数 on _msg_receive(msg)
      如果 msg .out然后
            返回
      结束
      如果(msg.text =='ping')
            send_msg(msg.from.print_name,'pong',ok_cb,false)
      结束
结束

该代码是我们在本教程中将使用的主要功能,并且每次 Telegram CLI 收到新消息时都会调用此函数。我们首先通过检查 ** msg.out 是否为 true **,确保这不是我们刚刚发送的邮件。

如果为假,则我们继续检查消息的内容。如果邮件等于字符串 ** ping **,我们将继续发送邮件以作回应。

函数 on _our_id(id)
结束

调用此函数时,它将提供当前登录用户的 ID 。我们无需为此做任何事情,因为我们专注于接收和回复消息。

函数 on _secret_chat_update(用户,what_changed)
结束
函数 on _user_update(用户,what_changed)
结束
函数 on _chat_update(用户,what_changed)
结束

当有关于用户的更新信息时,将调用这三个函数,并且提供回的变量是已更新的用户和更改的数组。

函数 on _get_difference_end()
结束

在第一次 ** get \ _difference ** 调用之后调用此函数。这意味着已接收到最后一个客户端执行后的所有更新。

函数 on _binlog_replay_end()
结束

旧事件的重放结束后,将调用此函数。

3 输入完代码后,您应该得到如下所示的内容。检查您的代码,确保没有犯任何错误。

函数 on _msg_receive(msg)
      如果 msg .out然后
          返回
      结束如果(msg.text =='ping')然后 send _msg(msg.from.print_name,'pong',ok_cb,false)
      结束
结束

函数 on _our_id(our_id)
结束

函数 on _secret_chat_update(用户,what_changed)
结束

函数 on _user_update(用户,what_changed)
结束

函数 on _chat_update(用户,what_changed)
结束

函数 on _get_difference_end()
结束

函数 on _binlog_replay_end()
结束

对编写的代码满意后,按 Ctrl + X **,然后是 Y ,然后按 Enter ,以保存文件。

4 使用我们现在编写的 LUA 脚本,我们终于可以测试一下它是否可以与 Telegram 一起成功使用。为此,我们需要在树莓派上运行以下两个命令。这些命令将启动 Telegram CLI 并设置要使用的脚本。

cd〜/tg
bin/telegram-cli -k tg-server.pub -W -s actions.lua

5 现在,电报 CLI (命令行界面) 现在已启动并使用我们的脚本运行,我们需要向电报帐户发送一条消息。

您需要发送的消息是 ping 。发送树莓派消息后,树莓派应立即收到消息,检查消息是否与 ** ping 相匹配,然后回复消息 Pong **。

如果您在设备上收到 ``Pong’’,则表示您已成功编写了第一个 LUA 脚本,该脚本可让树莓派 Telegram 机器人自动回复消息。

在下一节中,我们将进一步探讨这个概念,这一次展示了如何使用 LUA 脚本运行外部批处理脚本,该脚本将拍摄照片并将其通过 Telegram 发送到接收器。

该示例脚本将使您了解如何使用 Telegram 在树莓派上进行各种操作,而不受 LUA 的限制。这意味着如果需要,您可以使用它来通过 GPIO 引脚控制设备。

通过电报自动发送照片

1 要继续本教程的这一部分,您需要安装并设置树莓派相机,因为我们将使用它来自动拍照并在我们的 LUA 脚本收到消息时发送它们。

首先,我们将创建一个目录,在该目录中我们将临时存储我们拍摄的图像和 bash 脚本,我们需要编写该脚本以供 LUA 脚本调用。

在树莓派上运行以下命令以创建新文件夹。

苏多·麦克迪尔〜/camera

2 创建文件夹后,让我们编写 bash 脚本,该脚本将基本上调用 ** raspistill 应用程序,因此树莓派将拍照并保存到我们的新 /home/ 中。 pi/camera/** 目录。

vim 〜/camera/camera.sh

3 在此文件中编写以下代码行。

#!/bin/bash
raspistill -w 800 -h 600 -o /home/pi/camera/photo.jpg

在这两行中编写完之后,请依次按 ** Ctrl + X Y ,然后最后按 Enter **,保存文件。

4 现在,在继续修改 ** actions.lua ** 脚本之前,我们需要确保可以从 Lua 脚本执行新的 bash 脚本。

在树莓派上运行以下命令以设置正确的权限。

sudo chmod 755〜/camera/camera.sh

5 最后,我们可以继续修改我们在本教程前面编写的 ** actions.lua ** 脚本。运行以下命令以开始在树莓派上编辑文件。

vim /home/pi/tg/actions.lua

6 在此文件中,我们需要添加以下代码。

      如果 msg .out然后
          返回
      结束
      如果(msg.text =='ping')
            send_msg(msg.from.print_name,'pong',ok_cb,false)
      结束

在下方添加

      如果(msg.text =='photo')然后
            os.execute('/home/pi/camera/camera.sh')
            send_photo(msg.from.print_name,'/home/pi/camera/photo.jpg',ok_cb,否)
      结束

这段新的代码通过在解释正确的消息时检查所有包含照片的消息来工作,然后我们执行本教程前面编写的 camera .sh bash 脚本。

执行脚本后,我们可以利用 Telegram CLI 的 ** send \ _photo ** 函数发送通过 bash 脚本捕获的照片。

简单地说,这是从树莓派相机拍摄的照片,然后将其发送回给将消息照片发送到您的 Telegram 帐户的用户。

7 将这些新行写入 ** actions.lua ** 脚本后,您应该得到一个看起来像下面所示的文件。

函数 on _msg_receive(msg)
      如果 msg .out然后
          返回
      结束
      如果(msg.text =='ping')
            send_msg(msg.from.print_name,'pong',ok_cb,false)
      结束
     如果(msg.text =='photo')然后
            os.execute('/home/pi/camera/camera.sh')send_photo(msg.from.print_name,'/home/pi/camera/photo.jpg',ok_cb,false)结束
结束

函数 on _our_id(our_id)
结束

函数 on _secret_chat_update(用户,what_changed)
结束

函数 on _user_update(用户,what_changed)
结束

函数 on _chat_update(用户,what_changed)
结束

函数 on _get_difference_end()
结束

函数 on _binlog_replay_end()
结束

确定您正确输入了新行后,可以按 Ctrl + X ,然后按 Y **,然后按 Enter ,以保存并退出文件。

8 现在,我们终于可以测试我们的新代码,只需在树莓派上运行以下两个命令,即可运行与本教程前面所运行的相同的 telegram -cli 命令。

cd〜/tg
bin/telegram-cli -k tg-server.pub -W -s actions.lua

9 随着 Telegram CLI 现在以 ** actions.lua 脚本运行,您现在可以向自己发送一条消息,说”** 照片 “。 树莓派在拍摄照片时应暂时暂停,然后在发送照片时应该能够看到上传进度。

希望到目前为止,您已经成功地使用 Telegram 设置了树莓派,并且对如何使用 LUA 脚本使 Telegram 控制树莓派有了很好的了解。您显然可以通过将其设置为通过 GPIO 引脚控制其他设备来进一步扩展此功能。

通过转到开发人员 [LUA 文档页面](https://github.com/vysheng/tg/blob/master/README-LUA,可以找到有关可在 Telegram CLI 提供的 LUA 脚本中使用的功能的更多文档。 )。

我们希望到现在为止,您已经学会了如何使用 Telegram 控制树莓派,我们现在应该已经基本了解了它的工作原理以及如何利用它来完成许多工作。树莓派。

如果您喜欢树莓派 Telegram Bot 教程,或者需要一些帮助使其开始运行,请随时在我们的论坛上发表评论。

分享到