Until few months ago to communicate with my Raspberry Pi I used Yowsup that is able to connect to the Whatsapp servers.
Unfortunately this method has several issues that made me choose something different... First of all the need of a sim card or at least a phone number not used for other Whatsapp connections, the frequent changes on the Whatsapp protocol and so to the Yowsup libraries that force you to always check for them and eventually update the software and your scripts also on the RPi and least but not last the fact that Whatsapp do not like that their servers are used with a software that is not their messenger!
There are several different solutions to communicate with a RPi. One that I'm using is Pushover, but it's just a one way system (from RPi to the smartphone). It works quite well if you just need text notifications, but if you need something really like Whatsapp the solution could be Telegram.
Probably you already heard about this software. It's quite similar to Whatsapp, but it has many more features that make it a perfect software for our needs. Of course it's free, so you have to pay nothing to use it.
The first thing to note is that Telegram can create bots. A bot is just a "user" without a phone number and it can be managed by a software.
The (really) good thing is that this feature is mantained by the Telegram staff, so they can use the same kind of interface and changing the way it works, without any kind of work by the users.
The bad thing about bots is that they cannot start a chat on their own. You need to add them to a group or start a conversation with them before you can receive from them. Anyway this must be done just once before starting your scripts the first time.
If you need more info about Telegram bots, just visit their intro section.
Now let's see how to create a bot. Of course you need to have the Telegram app installed (note that you can install it also on a computer, not only on smartphones).
Then start a chat with @BotFather. This is the main Telegram bot and you can use it to create your bots:
To create a new bot, just send the command /newbot and BotFather wil ask you to give it a name and then a user name. The user name has to terminate with the string bot:
Note that the user name is stored in the Telegram databases, so it's must have never been used before.
Now the bot has been created and BotFather tells you something important:
The token (in the picture above it's just an example) will be used by our scripts to use the bot, so do not lose it!
You could also change some detail about your bot, like the picture or a description, but this would go beyond the scope of this post.
To use a Telegram bot with a Raspberry Pi you need to install the Python Telegram Bot library. To do so just use the following command from the shell:
pip install python-telegram-bot
if you do not have pip installed, just use this before the previous statement:
This is just a small and simple script, just to show you how to get messages and sending them. Let's see how it works...
After importing the library, a new bot is created, The token parameter is exactly the one provided by the BotFather when you created your bot.
Then we just loop waiting for messages. This should be done at least the first time in order to get the chat id needed to send messages with the script. You can also print it and use the value directly the next time as the chat id will remain the same until you delete it.
Note that messages will stay available in the Telegram servers for about 24 hours and then they are deleted. This means that if you cannot receive them (maybe because of an internet connection issue) you could lose them. Another thing you should remember is that if there are messages stored in the servers, the getUpdates command will always return them, even if you already read them, so if you need to wait only for new messages there are more actions to be performed.
At the end we are sending a message to the specified chat and if there are no problems, you should receive the answer from the RPi.
Please remember that this is an extermely simple script to use the Telegram library for Python. With the bot API you can also send and receive photos, audio files, documents and so on. There are tons of features that can be useful and they can also be easily accessed.
Please refer to the Telegram bot API for futher information.
Time permitting (lately I'm quite busy...) I will make a new post with a more complex script to communicate with Raspberry Pi using Telegram. Until then you can surely make your own attempts with the library.
sudo apt-get install python-pip
After installing this library we can use it in our scripts. Let's use the following script:
import telegram
# Connect to our bot
bot = telegram.Bot(token="123456789:ABCDabcdefgYGscai2d_hakusnci7Hdks")
# Waits for the first incoming message
updates=[]
while not updates:
updates = bot.getUpdates()
# Gets the id for the active chat
print updates[-1].message.text
chat_id=updates[-1].message.chat_id
# Sends a message to the chat
bot.sendMessage(chat_id=chat_id, text="It works!")
# Connect to our bot
bot = telegram.Bot(token="123456789:ABCDabcdefgYGscai2d_hakusnci7Hdks")
# Waits for the first incoming message
updates=[]
while not updates:
updates = bot.getUpdates()
# Gets the id for the active chat
print updates[-1].message.text
chat_id=updates[-1].message.chat_id
# Sends a message to the chat
bot.sendMessage(chat_id=chat_id, text="It works!")
This is just a small and simple script, just to show you how to get messages and sending them. Let's see how it works...
After importing the library, a new bot is created, The token parameter is exactly the one provided by the BotFather when you created your bot.
Then we just loop waiting for messages. This should be done at least the first time in order to get the chat id needed to send messages with the script. You can also print it and use the value directly the next time as the chat id will remain the same until you delete it.
Note that messages will stay available in the Telegram servers for about 24 hours and then they are deleted. This means that if you cannot receive them (maybe because of an internet connection issue) you could lose them. Another thing you should remember is that if there are messages stored in the servers, the getUpdates command will always return them, even if you already read them, so if you need to wait only for new messages there are more actions to be performed.
At the end we are sending a message to the specified chat and if there are no problems, you should receive the answer from the RPi.
Please remember that this is an extermely simple script to use the Telegram library for Python. With the bot API you can also send and receive photos, audio files, documents and so on. There are tons of features that can be useful and they can also be easily accessed.
Please refer to the Telegram bot API for futher information.
Time permitting (lately I'm quite busy...) I will make a new post with a more complex script to communicate with Raspberry Pi using Telegram. Until then you can surely make your own attempts with the library.
Thank you so much. This is a really easy way of automation with python and raspberry pi. I connected a PIR sensor to my raspberry pi at home, it sends a message to me, when someone comes to my home
ReplyDeletei cant install ((pip install python-telegram-bot))
ReplyDeletesay me error
if you can help me
regards
Maybe pip is not installed. Try
Deletesudo apt-get install python-pip
before installing the telegram library.
very thanks Carlo Mascellani for fast answer
Deletei installed pip
say me this error
Exception:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/usr/local/lib/python2.7/dist-packages/pip/commands/install.py", line 342, in run
prefix=options.prefix_path,
File "/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py", line 784, in install
**kwargs
File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 851, in install
self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
File "/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py", line 1064, in move_wheel_files
isolated=self.isolated,
File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 345, in move_wheel_files
clobber(source, lib_dir, True)
File "/usr/local/lib/python2.7/dist-packages/pip/wheel.py", line 316, in clobber
ensure_dir(destdir)
File "/usr/local/lib/python2.7/dist-packages/pip/utils/__init__.py", line 83, in ensure_dir
os.makedirs(path)
File "/usr/lib/python2.7/os.py", line 157, in makedirs
mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/certifi-2016.9.26.dist-info'
Just use
Deletesudo pip install...
Instead of just pip install...
i tried
Deletebut i can't
when i use sudo pip install say me this:
pi@raspberrypi:~ $ sudo pip install
You must give at least one requirement to install (see "pip help install")
This comment has been removed by the author.
Deletehaven't any answer?
DeleteI just did not write everything (saw the 3 dots?). Full command would be
Deletesudo pip install python-telegram-bot
i didn't write every thing
Deletei write :
sudo pip install python-telegram-bot
say me error
i'm very need for solve this problem
thank's for you
i'm waiting for answer
regards
now when i enter command:
Deletesudo pip install python-telegram-bot
say me this error:
with open(path, 'rb') as stream:
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/protobuf-3.1.0.post1-py2.7.egg/EGG-INFO/namespace_packages.txt'
pi@raspberrypi:~ $ sudo python tele.py
Traceback (most recent call last):
File "tele.py", line 1, in
import telegram
ImportError: No module named telegram
pi@raspberrypi:~ $
Thank's very much
Deletei installed the library by this command:
sudo pip install python-telegram-bot
but now when i run a python script for send photo say me this error:
pi@raspberrypi:~ $ sudo python tele.py
Traceback (most recent call last):
File "tele.py", line 16, in
bot.sendPhoto(chat_id=281800458, photo=open('./capture.jpg', 'rb'))
File "/usr/local/lib/python2.7/dist-packages/telegram/bot.py", line 125, in decorator
result = func(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/telegram/bot.py", line 151, in decorator
result = self._request.post(url, data, timeout=kwargs.get('timeout'))
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/request.py", line 199, in post
result = self._request_wrapper('POST', url, body=data.to_form(), headers=data.headers)
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/request.py", line 150, in _request_wrapper
raise Unauthorized()
telegram.error.Unauthorized: Unauthorized
pi@raspberrypi:~ $
this python code :
Deleteimport telegram
import picamera
# Connect to our bot
bot = telegram.Bot(token="281800458:AAGc88ix59qMtCCn_6jNM4sqYjsM8vGX8T4")
# Sets the id for the active chat
chat_id=281800458
#Get the photo
camera=picamera.PiCamera()
camera.capture('./capture.jpg')
camera.close()
# Sends a message to the chat
bot.sendPhoto(chat_id=281800458, photo=open('./capture.jpg', 'rb'))
any help?
Deletefor sending photo to telegram
I seem to have the same problem. The cam takes the picture but that's it. After that this error occurs.
ReplyDeleteTraceback (most recent call last):
File "send_photo.py", line 16, in
bot.sendPhoto(chat_id=123456789, photo=open('./capture.jpg', 'rb'))
File "/usr/local/lib/python2.7/dist-packages/telegram/bot.py", line 125, in decorator
result = func(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/telegram/bot.py", line 151, in decorator
result = self._request.post(url, data, timeout=kwargs.get('timeout'))
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/request.py", line 199, in post
result = self._request_wrapper('POST', url, body=data.to_form(), headers=data.headers)
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/request.py", line 150, in _request_wrapper
raise Unauthorized()
telegram.error.Unauthorized: Unauthorized
This comment has been removed by the author.
Deletecan i ask for your help. is it possible for me to request the GPS location of the Pi from telegram? I have searched everywhere, but i can not find it.
ReplyDeleteI also tried to search something and found almost nothing... The only things I have found are:
DeleteGPS coordinates are sent as a media (like photos and videos). At this link you can see that GeoPoint is treated like inputMediaPhoto and similars: core.telegram.org/type/InputMedia
Second thing I found is a comment from 13/06/2016 saying that GPS coordinates are not sent because of a bug, but I did not found anything about a fix of this error...
I see, then i cant do anything about that then.
Deletealso sir, do you know how to send a picture to telegram from raspberry pi by using the picamera?
DeleteHi,
ReplyDeletei 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.
thanks,
Pandiyan
There are several options to start a program at boot, but there are differences between Debian wheezy and jessie. Anyway you can just search on google to find lots of pages on this topic.
Delete
ReplyDeleteHello, I installed the telepot library but I can not connect a led through the telegram. Is it helpful to use another library besides the telepot?
Unfortunately I do not know telepot library, so I cannot say what issue you may have... But if you can receive a message from telegram using this library the problem may reside in the rest of your script.
DeleteAttributeError: 'module' object has no attribute 'bot'
ReplyDeletehow to fix this sir?
It's almost impossible to find the cause of the error without looking at the complete error description and the source code...
Delete# Gets the id for the active chat
ReplyDeleteprint updates[-1].message.text
chat_id=updates[-1].message.chat_id
# Sends a message to the chat
bot.sendMessage(chat_id=chat_id, text="It works!")
why i cannot import this
"object has no attribute 'message'"
Did you send a message to your bot before launching the script?
DeleteScript cannot retrieve chat data without starting a conversation with the bot. To do so you must send one message to the bot using your smartphone (or any other device you will use to communicate with the bot). After this the bot will be able to get the last message and its chat id.
File "tele.py", line 12
ReplyDeleteprint updates[-1].message.text
^
SyntaxError: Missing parentheses in call to 'print'
Most probably you are using Python 3 and the script above was made for Python 2. Try writing the line this way:
Deleteprint (updates[-1].message.text)
Traceback (most recent call last):
ReplyDeleteFile "tele.py", line 1, in
import telegram
File "/usr/local/lib/python2.7/dist-packages/telegram/__init__.py", line 23, in
from .user import User
File "/usr/local/lib/python2.7/dist-packages/telegram/user.py", line 23, in
from telegram.utils.helpers import mention_html as util_mention_html
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/helpers.py", line 165, in
def from_timestamp(unixtime, tzinfo=dtm.timezone.utc):
AttributeError: 'module' object has no attribute 'timezone'
Traceback (most recent call last):
ReplyDeleteFile "tele.py", line 1, in
import telegram
File "/usr/local/lib/python2.7/dist-packages/telegram/__init__.py", line 23, in
from .user import User
File "/usr/local/lib/python2.7/dist-packages/telegram/user.py", line 23, in
from telegram.utils.helpers import mention_html as util_mention_html
File "/usr/local/lib/python2.7/dist-packages/telegram/utils/helpers.py", line 165, in
def from_timestamp(unixtime, tzinfo=dtm.timezone.utc):
AttributeError: 'module' object has no attribute 'timezone'
please help me out
Last Telegram libraries I think could be used just with Python 3, so probably this could be the issue (you are using Python 2.7).
DeleteAnyawy it's an issue with the import of the library, so I can't really help. You should ask the developers... (you can try asking here: https://github.com/python-telegram-bot/python-telegram-bot/issues )
if u guys still get any kind of error please go through the below link.. https://circuitdigest.com/microcontroller-projects/raspberry-pi-telegram-bot
ReplyDelete