TelePi – שלוט בשרת שלך באמצעות הודעות טקסט

TelePi - Control your pi with Tlegram Bot

TelePi

חשבתם פעם שתוכלו להתכתב עם השרת שלכם? לשאול אותו לשלומו או לבקש ממנו לבצע פקודות? אז זהו, שהיום זה כבר אפשרי ואפילו פשוט ליישום. כאן בדיוק נכנסת לתמונה מערכת ה TelePi המבוססת Telgram Bot ומאפשרת שליחת פקודות וקבלת תגובות והתראות מהשרת שלך (בין אם מדובר ב Raspberry pi או כל שרת מבוסס לינוקס).

על מנת שנוכל להתקין ולהגדיר את המערכת יש לפתוח תחילה חשבון בטלגרם, לצורך כך יש להתקין את האפליקציה על הטלפון הנייד:

אחרי התקנת האפליקציה והרישום נעבור לפתיחת ה Bot בו נשתמש לתקשורת עם השרת. לשם כך יש להכנס לכתובת הבאה: https://t.me/BotFather

לחצו על “START” על מנת לקבל את האופציות לשימוש:

BotFather-Command-list

 

כעת לחצו על "newbot/" על מנת לפתוח בוט חדש ואז תתבקשו לתת שם לבוט שלכם, לדוגמא Home:
Name-your-bot
לחצו על Enter ואז תתבקשו לבחור ID לבוט, ה ID (שם משתמש) חייב להסתיים במילה bot, לדוגמא: home-assistant_bot:

Set-the-bot-UserName

לאחר שתבחרו שם ותלחצו על enter, תקבלו הודעה שהבוט נוצר בהצלחה. בגוף ההודעה ישנו token שישמש אותנו להגדרת הבוט:

Bot-Access-Token

 

 

 

ה Token נראה כך:

123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ

כעת, נתקין telepot שהוא framework מבוסס פיתון שמשמש לעבודה עם טלגרם:

sudo apt-get install python-pip
sudo pip install telepot

לאחר ההתקנה נבדוק את ה TOKEN שקבלנו בשלב הקודם. על מנת לעשות זאת יש להכנס לסביבה של פייתון על ידי הקשת הפקודה python בטרמינל ואז את הפקודות הבאות:

import telepot
bot = telepot.Bot('*** copy bot token from browser ***')
bot.getMe()

כאשר בשורה השניה יש להכניס את ה Token שקבלנו בעת יצירת הבוט בחלקו הראשון של המדריך

התוצאה שנקבל אמורה להראות כך:

Telepot-Working - techblog.co.il

 

 

כעת לאחר שווידאנו כי ה TOKEN וההתקנה תקינים נוכל להתחיל ללמד את הפאי להגיב לפקודות. לצורך כך צרו תיקיה בשם TelePi תחת opt ועברו אליה על ידי הפקודה הבאה :

mkdir /opt/telePi
cd /opt/telePi

כעת ניצור קובץ דוגמה על ידי הפקודה:

nano telebot.py

והדביקו לתוכו את הטקסט הבא:

import time
import random
import datetime
import telepot
from subprocess import call
import subprocess
import os
from telepot.loop import MessageLoop

def handle(msg):
    chat_id = msg['chat']['id']
    command = msg['text']

    print ('Got command: %s')%command
    if command == '/time':
        bot.sendMessage(chat_id, str(datetime.datetime.now()))
    elif command == '/speed':
        x = subprocess.check_output(['speedtest-cli','--share'])
        bot.sendMessage(chat_id,x)
    elif command == '/ip':
        x = subprocess.check_output(['curl','ipinfo.io/ip'])
        bot.sendMessage(chat_id,x)
    elif command == '/disk':
        x = subprocess.check_output(['df'])
        bot.sendMessage(chat_id,x)
    elif command == '/mem':
        x = subprocess.check_output(['cat','/proc/meminfo'])
        bot.sendMessage(chat_id,x)
    elif command == '/stat':
        bot.sendMessage(chat_id,'Number five is alive!')
    elif command == '/ddns':
        x = subprocess.check_output(['python','/opt/telepi/ddns.py'])
        bot.sendMessage(chat_id,x)
    elif command == '/services':
        x = subprocess.check_output('service --status-all|grep "+"', shell = True)
        bot.sendMessage(chat_id,x)

bot = telepot.Bot('*** your telebot token from step 2*********')
MessageLoop(bot, handle).run_as_thread()
print('I am listening ...')

while 1:
    time.sleep(10)

 

לחצו Ctrl+x לסיום ולאחריו y על מנת לשמור את השינויים ולצאת מהעורך.

כעת ניצור סקריפט הפעלה (service) שיפעיל את הבוט עם עליית המערכת. לצורך כך, כתבו את הפקודה הבאה:

sudo nano /etc/systemd/system/telepi.service

והדביקו פנימה את הקוד הבא:

[Unit]
Description=Home Assistant
After=network.target
 
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/python2.7 /opt/telepi/telebot.py
 
[Install]
WantedBy=multi-user.target

שמרו את הקובץ וכתבו את הפקודות הבאות עבור הגדרת העליה האוטומטית:

sudo systemctl --system daemon-reload
sudo systemctl enable telepi.service
sudo systemctl start telepi.service

על מנת לבדוק את הבוט, שלחו לו את הפקודה ip/, אם הכל תקין הבוט אמור להחזיר בתשובה את כתובת ה IP החיצונית.

בהצלחה!

9 Comments

  1. 1. הפקודה: python /opt/TelePt/telebot.py שגויה. צ"ל TelePi
    2. הפייתון מתלונן על אינדנטציה בטקסט שהועתק הודבק כמו שהוא.

  2. זה מה שאני מקבל אחרי כל פקודה (למשל /IP)

    I am listening …
    Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/telepot/loop.py", line 37, in run_forever
    self._handle(msg)
    File "/opt/TelePi/telebot.py", line 13, in handle
    user_name = msg['chat']['username']
    KeyError: 'username'

  3. הבוט לא מופעל לי אוטומטית בהדלקה.
    איך לבדוק את זה? (חלש בלינוקס 🙁

  4. אחלה מדריך. יש דרך להתקין את התהליכים על סטרימר מבוסס אנדרואיד במקום על שרת לינוקסי?

Leave a Reply

כתובת האימייל שלך לא תפורסם


*