Telegram CLI机器人,详细教程用Telegram CLI控制树莓派

这篇文章在Telegram教程的基础上,详细展示了如何利用Telegram来控制Raspberry Pi。

Telegrambotv2.png

主要利用Telegram CLI中内置的LUA解释器来实现,它为Telegram CLI开放了相当多的功能。

LUA解释器可以让我们对某些功能进行编程,这些功能在Telegram CLI上发生某些事情时触发,例如当它收到一条消息时。

这个解释器可以根据接收到的消息进行一定的操作,我们将向大家展示的两个简单的任务就是简单的接收消息和回复,还有就是如何设置Telegram CLI,可以触发外部的bash脚本,自动上传照片。

在进行教程之前,请确保已经完成了Telegram CLI教程,因为它为本指南奠定了基础。

设备清单

下面是我用Telegram CLI控制Raspberry Pi的所有设备清单,点击链接可直达特别优惠购买。

建议

可选

为Telegram CLI编写第一个脚本

1. 首先要完成基础Telegram教程,因为这将告诉你怎么在树莓派上设置Telegram。

一旦你完成了Telegram的设置,就可以继续学习本教程。本教程将向你展示如何利用Telegram CL的LUA解释器,这样就可以主动监控收到的消息,并根据收到的消息采取行动。设置自己的Raspberry Pi telegram机器人,它将对发送给它的命令做出响应。

LUA是一种非常强大、快速、轻量级和可嵌入的脚本语言。许多应用程序都使用LUA来让人们轻松地修改和扩展他们的应用程序。

在我们将要编写的Lua脚本中,将有7个不同的函数必须实现,尽管只使用其中的一个函数,但需要让所有的函数都到位,来阻止不断的警告。

这个LUA脚本是很简单的,它对每一条说 “ping “的消息都会用 “pong “来回复,虽然简单,但它会让你知道如何处理短信。

开始为Telegram编写LUA脚本,在Raspberry Pi上运行以下两个命令。

cd ~/tg
nano actions.lua

2. 打开 actions.lua 文件后,需要将以下几行代码写入其中。我在写进文件时解释每一部分。记住要保留制表符,因为LUA是对空格敏感的。

function on_msg_receive (msg)
      if msg.out then
            return
      end
      if (msg.text=='ping') then
            send_msg (msg.from.print_name, 'pong', ok_cb, false)
      end
end

这段代码是在本教程中要用到的主要函数,每次Telegram CLI收到新消息时都会调用这个函数。首先检查 msg.out 是否为真来确定这不是我们刚刚发送的消息。

如果是false,继续检查消息的内容。如果消息等于字符串ping,就继续发送消息回复。

function on_our_id (id)
end

当这个函数被调用时,它提供了当前登录用户的id。不需要为此实现任何功能,因为重点是接收和回复消息。

function on_secret_chat_update (user, what_changed)
end
function on_user_update (user, what_changed)
end
function on_chat_update (user, what_changed)
end

当有用户信息更新时,就会调用这三个函数,提供回来的变量是被更新的用户和变化的内容数组。

function on_get_difference_end ()
end

这个函数在第一次调用get_difference之后被调用。这意味着最后一次客户端执行后的所有更新都被接收。

function on_binlog_replay_end ()
end

该函数在旧事件重播结束后被调用。

3. 一旦你完成了代码的输入,你应该最终得到类似下面显示的东西。检查一下你的代码,确保你没有犯任何错误。

function on_msg_receive (msg)
      if msg.out then
          return
      end
      if (msg.text=='ping') then
            send_msg (msg.from.print_name, 'pong', ok_cb, false)
      end
end

function on_our_id (our_id)
end

function on_secret_chat_update (user, what_changed)
end

function on_user_update (user, what_changed)
end

function on_chat_update (user, what_changed)
end

function on_get_difference_end ()
end

function on_binlog_replay_end ()
end

写完后,按Ctrl + X然后Y,然后回车保存文件。

4. 现在LUA脚本已经写好了,可以测试一下它是否能与Telegram一起工作。需要在Raspberry Pi上运行以下两个命令。这些命令将启动Telegram CLI并设置脚本的利用。

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

5. 现在Telegram CLI(命令行界面)已经和脚本一起运行了,向Telegram账户发送一条消息。

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

如果在设备上收到Pong,就成功编写了第一个LUA脚本,让Raspberry Pi Telegram机器人自动回复消息。

在下一节中,进一步深入研究这个概念,这次将展示如何使用LUA脚本来运行一个外部批处理脚本,该脚本将拍摄一张照片,并通过Telegram将其发送给接收方。

这个示例脚本将为您提供一个如何使用Telegram在您的树莓派上做各种事情的想法,并且不受LUA的限制。也就是说,如果你想的话,你可以用它来控制GPIO引脚上的设备。

通过Telegram自动发送照片

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

为了开始,我们将建立一个目录,在这个目录中,我们将暂时存储我们拍摄的图片和我们需要写的bash脚本,供我们的LUA脚本调用。

在我们的Raspberry Pi上运行以下命令来创建我们的新文件夹。

sudo mkdir ~/camera

2. 创建好文件夹后,让我们写下我们的bash脚本,这个脚本基本上会对raspistill应用程序进行调用,这样Raspberry Pi就会拍摄一张照片并保存到我们新的/home/pi/camera/目录中。

nano ~/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 脚本。

在Raspberry Pi上运行以下命令来设置正确的权限。

sudo chmod 755 ~/camera/camera.sh

5. 最后,修改在教程中前面写的actions.lua脚本。运行下面的命令,开始在Raspberry Pi上编辑文件。

nano /home/pi/tg/actions.lua

6. 在该文件中,需要添加以下代码:

寻找

      if msg.out then
          return
      end
      if (msg.text=='ping') then
            send_msg (msg.from.print_name, 'pong', ok_cb, false)
      end

添加到下面

      if (msg.text=='photo') then
            os.execute('/home/pi/camera/camera.sh')
            send_photo (msg.from.print_name, '/home/pi/camera/photo.jpg', ok_cb, false)
      end

这段新代码的工作原理是检查是否有任何消息是照片,当解释正确的消息后,就执行在本教程前面写的 camera.sh bash 脚本。

脚本执行后,可以利用Telegram CLI的send_photo函数来发送用bash脚本捕获的照片。

简而言之,它可以从你的树莓派相机中拍摄一张照片,然后将其发回给发送消息照片到你的Telegram账户的用户。

7. 一旦把这些新行写进了 actions.lua 脚本,应该会得到一个看起来像下面所示的文件。

function on_msg_receive (msg)
      if msg.out then
          return
      end
      if (msg.text=='ping') then
            send_msg (msg.from.print_name, 'pong', ok_cb, false)
      end
     if (msg.text=='photo') then
            os.execute('/home/pi/camera/camera.sh')
            send_photo (msg.from.print_name, '/home/pi/camera/photo.jpg', ok_cb, false)
      end
end

function on_our_id (our_id)
end

function on_secret_chat_update (user, what_changed)
end

function on_user_update (user, what_changed)
end

function on_chat_update (user, what_changed)
end

function on_get_difference_end ()
end

function on_binlog_replay_end ()
end

写完后,可以保存和退出文件,按Ctrl + X,然后按Y,然后输入。

8. 现在终于可以测试新代码了,只要在Raspberry Pi上运行以下两个命令,就可以运行教程前面运行的同样的telegram-cli命令。

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

9. 现在Telegram CLI已经和你的Actions.lua脚本一起运行了,你现在可以给自己发送一条 “photo“的消息。Raspberry Pi在拍摄照片时应该会暂时暂停,然后应该可以在发送照片时看到上传进度。

希望现在您已经成功地用Telegram设置了您的Raspberry Pi,现在您已经很好地理解了如何使用LUA脚本来让Telegram控制您的Raspberry Pi。您可以进一步扩展这个功能,甚至通过GPIO引脚来控制其他设备。

可以到开发者的LUA文档页面找到更多可以在Telegram CLI提供的脚本中利用的功能。

如果你喜欢这个树莓派Telegram机器人教程,或者有什么问题,欢迎在下面留言讨论。

平均: 5 / 5. votes: 1

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » Telegram CLI机器人,详细教程用Telegram CLI控制树莓派

赞 (1)

1 评论

2+6=