这篇文章在Telegram教程的基础上,详细展示了如何利用Telegram来控制Raspberry Pi。
主要利用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机器人教程,或者有什么问题,欢迎在下面留言讨论。
欢迎转载,请留下出处链接:Labno3 » Telegram CLI机器人,详细教程用Telegram CLI控制树莓派