Ce didacticiel montre comment exécuter automatiquement des scripts pour des commandes de texte via Telegram après que l’installation sur le Raspberry a été traitée dans le didacticiel précédent. Cela vous permet, par exemple, d’interroger facilement l’état de vos Pi en déplacement ou simplement d’effectuer des actions à distance via votre messager.
Les préparatifs
Je crée d’abord un script qui exécute mes actions, par exemple, je veux arrêter mon Pi, redémarrer et voir la disponibilité. Je préfère Python, mais bien sûr, tout autre script est également possible (par exemple, bash).
Je nomme mon script tg_actions.py.
sudo nano /home/pi/tg/tg_actions.py
Afin de pouvoir exécuter différentes actions avec un script, j’utilise des arguments de ligne de commande, de sorte que par ex. sudo python /home/pi/tg/tg_actions.py argument est reconnu.
|
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 |
#! / usr / bin / python importation sys importation os de datetime importation timedelta si sys.argv[[1] == « fermer »: impression « Le système s’arrête » os.système(« arrêt maintenant ») elif sys.argv[[1] == « redémarrer »: impression « Le système sera redémarré » os.système(« arrêt -r maintenant ») elif sys.argv[[1] == « disponibilité »: avec ouvert(‘/ proc / uptime’, «r») comme F: uptime_seconds = flotte(F.readline().Divisé()[[0]) uptime_string = str(timedelta(secondes = uptime_seconds)) impression(uptime_string[[:–7]) #autre: #si rien ne correspond |
La liste peut être étendue comme vous le souhaitez, par exemple, les broches GPIO peuvent également être lues
Configurer le télégramme
Pour que Telegram puisse réagir automatiquement à diverses interactions (réception de textes / images / etc.), on peut créer un script Lua. Un exemple de script est disponible dans le répertoire Telegram sous test.lua. Je vais modifier ce fichier car il a déjà des fonctions prêtes à l’emploi pour la réception, etc.
sudo nano /home/pi/tg/test.lua
Étant donné que je souhaite répondre uniquement aux messages texte, la fonction est pour le moment on_msg_receive (msg) à éditer:
|
1 2 3 4 5 6 7 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
une fonction on_msg_receive (msg) si commencé == 0 puis revenir fin si msg.en dehors puis revenir fin –Pour la coche « a lu » si msg.texte puis mark_read (msg.de.nom_imprimé, ok_cb, faux) fin – autoriser un seul numéro / contact si msg.de.nom_imprimé ~= ‘Nom du contact’ puis os.exécuter(« / home / pi / tg / send_script » .. msg.de.impression_Nom .. » ‘Numéro invalide.' ») revenir fin si (chaîne.inférieur(msg.texte) == «disponibilité») puis local manipuler = io.popen(« sudo python /home/pi/tg/tg_actions.py uptime ») local res = manipuler:lis(« *une ») manipuler:Fermer() os.exécuter(« / home / pi / tg / send_script ».. msg.de.impression_Nom ..« ‘ »..res..« ‘ ») –Alternative: –send_msg (msg.from.print_name, res) revenir elseif (chaîne.inférieur(msg.texte) == ‘fermer’) puis local manipuler = io.popen(« arrêt sudo python /home/pi/tg/tg_actions.py ») local res = manipuler:lis(« *une ») os.exécuter(« / home / pi / tg / send_script »..msg.de.nom_imprimé..« ‘ »..res..« ‘ ») manipuler:Fermer() revenir elseif (chaîne.inférieur(msg.texte) == «redémarrer») puis local manipuler = io.popen(« redémarrage sudo python /home/pi/tg/tg_actions.py ») local res = manipuler:lis(« *une ») manipuler:Fermer() os.exécuter(« / home / pi / tg / send_script ».. msg.de.impression_Nom ..« ‘ »..res..« ‘ ») revenir autre os.exécuter(« / home / pi / tg / send_script ».. msg.de.impression_Nom .. » ‘Erreur’ « ) fin fin |
Aux lignes 15, 22, 30, 36 et 39, j’appelle un autre script. Ce n’est pas absolument nécessaire; J’ai écrit la commande alternative à la ligne 14. Quiconque souhaite toujours envoyer une réponse via un script supplémentaire peut en créer une:
sudo nano ~/tg/send_script
Le contenu est:
|
#! / bin / bash /maison/pi/tg/poubelle/télégramme–cli –k /maison/pi/tg/tg–serveur.pub –W –e « msg $ 1 $ 2 » |
Pour que les deux scripts aient les droits correspondants, nous leur attribuons:
sudo chmod +x ~/tg/send_script sudo chmod +x ~/tg/tg_actions.py
Si ce script ne fonctionne pas pour quelqu’un, tazzie a montez avec une alternative.
Attention: Il est important que le (s) numéro (s) de l’expéditeur aient été enregistrés au moyen de ajouter le contact, sinon aucune réponse automatique ne peut être effectuée.
Certains utilisateurs signalent que le script lua affiche l’erreur suivante: lua: /usr/share/lua/5.2/lgi/namespace.lua:149: Typelib file for namespace 'Notify' (any version) not found
Si tel est le cas, la partie intérieure de
-- Notification code {{{
...
-- }}}
doit être supprimé du test.lua.
Lancer le télégramme
Le script créé doit maintenant être démarré avec le messager pour qu’il puisse réagir aux messages. Pour qu’il fonctionne en arrière-plan, vous pouvez le démarrer comme ceci:
screen -dmS TelegramCLI ~/tg/bin/telegram-cli -s ~/tg/test.lua -k ~/tg/tg-server.pub
Si une erreur se produit, vous devez toujours installer l’écran, si ce n’est déjà fait:
sudo apt-get install screen
Voici un processus avec mon Raspberry Pi.

Pour le démarrer automatiquement, suivez ce tutoriel ou utilisez crontab:
crontab -e
À la fin du fichier, écrivez la ligne suivante:
@reboot sleep 60 && screen -dmS TelegramCLI /home/pi/tg/bin/telegram-cli -s /home/pi/tg/test.lua -k /home/pi/tg/tg-server.pub
Pour ceux qui veulent tout faire dans le script Lua, il y a une belle Extension Lua GPIO.
