Raspberry Remote Control With Telegram





Introduction: Raspberry Remote Control With Telegram

Telegram is a very versatile instant messaging software that can be used with the same phone number on different devices simultaneously.
In this tutorial we saw how to install it, and we tried to send text and media messages.
We have also seen that it is possible to set the Raspberry to send messages automatically.
In this tutorial we will ask Raspberry to take a specific action as a function of the received message, for example, we could send a text message with the word "photo" and Raspberry will sends us a photo of the apartment, or "lamp" to turn a lamp, or "open" to open the garage door.
Well, let's start

You need:

a Raspberry Pi B or B+, with the latest version of Raspbian, or our MIcroSD Card 8GB Class 10 Raspbian preinstalled.

Step 1: Installation


Read this tutorial, we use this configuration as start point.

To intercept a new incoming message we create a file action.lua

"Lua is a powerful, fast, lightweight, embeddable scripting language.

Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping." From http://www.lua.org.

sudo nano /home/pi/tg/action.lua

with this content

function on_msg_receive (msg)
      if msg.out then
      if (msg.text=='ping') then
         send_msg (msg.from.print_name, 'pong', ok_cb, false)
  function on_our_id (id)
  function on_secret_chat_created (peer)
  function on_user_update (user)
  function on_chat_update (user)
  function on_get_difference_end ()
  function on_binlog_replay_end ()

Save and exit, when incoming text message is "ping", Telegram answers us with a text message containing "pong".

move in tg

cd /home/pi/tg

then type

bin/telegram-cli -k tg-server.pub -W -s action.lua

Try to send a message, if all goes well, Telegram answers only on "ping" and not "PING", we should see something like this

Raspberry Telegram onreceive


Raspberry Telegram onreceive

Ok, let's do something more interesting.

Install the Raspberry Camera, see this tutorial, then create a new folder where we will save the captured photos.

sudo mkdir /home/pi/camera

create a new file camera.sh

sudo nano /home/pi/camera/camera.sh

with this content

  raspistill -w 800 -h 600 -o /home/pi/camera/photo.jpg 

save and exit, give it execution permissions

sudo chmod -R 0655 /home/pi/camera/camera.sh

Edit action.lua

sudo nano /home/pi/tg/action.lua

add this lines in function on_msg_receive

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

Raspberry Telegram action.lua

Step 2: Test

Test it

bin/telegram-cli -k tg-server.pub -W -s action.lua

Now if you send a text message with "photo", Raspberry answer with a photo

Raspberry telegram send photo

Raspberry photo with Telegram

To enter additional commands simply change the file action.lua inserting a new if block , for example, we could activate a relay or ask the status of a sensor.

In the next tutorials will achieve some other example of use.

Follow us on social to stay informed.




  • Paper Contest 2018

    Paper Contest 2018
  • Pocket-Sized Contest

    Pocket-Sized Contest
  • Science of Cooking

    Science of Cooking

We have a be nice policy.
Please be positive and constructive.




for beter compiling telegram cli, In file tgl/mtproto-utils.c,replace in lines 110:

assert (0);

and replace in lines 101 and 115:

assert (0); // As long as nobody ever uses this code, assume it is broken.
//assert (0); // As long as nobody ever uses this code, assume it is broken.
and run make again.

(or delete the lines) and run make again.

how if i want to run "bin/telegram-cli -k tg-server.pub -W -s action.lua" automatically at boot ?

put this line at the end of this file "/etc/rc.local"

Hi I get this error when I try to take a still photo with the photo command

User Abcd online (was online [2016/05/04 14:08:45])

mmal: main: Error opening output file: /home/pi/camera/photo.jpg~

No output file will be generated

[14:03] Abcd >>> photo

*** 1458323157.993260 lua: attempt to call a nil value

are you sure your camera is enable?

if you are on raspbian:


you should enable your camera by typing this command:

sudo raspi-config

Interfacing Options>enable camera


else, type this command:


sudo apt-get install raspi-config
sudo raspi-config

Interfacing Options>enable camera


finaly reboot your py.

mahdi ahmadvand

I've same issue. You fix it?


i have running the telegram bot in putty using raspberry.if turn off putty my telegram bot not working on raspberry. i need to run telegram bot 24/7 . what i need to do further to run telegram bot automatically in background using raspberry.

kindly help me.



If i change the lua script, it doesnt take effect - i have to reboot the system and then the change is effective. Why? how can i make script changes take effect without rebooting?

Thanks for this guide. Works well for me.

Just published a "Telegram Device/server monitor/commander" on github.

Feel free to use it and extend it: