TelePi
חשבתם פעם שתוכלו להתכתב עם השרת שלכם? לשאול אותו לשלומו או לבקש ממנו לבצע פקודות? אז זהו, שהיום זה כבר אפשרי ואפילו פשוט ליישום. כאן בדיוק נכנסת לתמונה מערכת ה TelePi המבוססת Telgram Bot ומאפשרת שליחת פקודות וקבלת תגובות והתראות מהשרת שלך (בין אם מדובר ב Raspberry pi או כל שרת מבוסס לינוקס).
על מנת שנוכל להתקין ולהגדיר את המערכת יש לפתוח תחילה חשבון בטלגרם, לצורך כך יש להתקין את האפליקציה על הטלפון הנייד:
- אייפון: https://itunes.apple.com/app/telegram-messenger/id686449807
- אנדרואיד: https://play.google.com/store/apps/details?id=org.telegram.messenger
אחרי התקנת האפליקציה והרישום נעבור לפתיחת ה Bot בו נשתמש לתקשורת עם השרת. לשם כך יש להכנס לכתובת הבאה: https://t.me/BotFather
לחצו על “START” על מנת לקבל את האופציות לשימוש:
כעת לחצו על "newbot/" על מנת לפתוח בוט חדש ואז תתבקשו לתת שם לבוט שלכם, לדוגמא Home:
לחצו על Enter ואז תתבקשו לבחור ID לבוט, ה ID (שם משתמש) חייב להסתיים במילה bot, לדוגמא: home-assistant_bot:
לאחר שתבחרו שם ותלחצו על enter, תקבלו הודעה שהבוט נוצר בהצלחה. בגוף ההודעה ישנו 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 שקבלנו בעת יצירת הבוט בחלקו הראשון של המדריך
התוצאה שנקבל אמורה להראות כך:
כעת לאחר שווידאנו כי ה 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 החיצונית.
בהצלחה!
1. הפקודה: python /opt/TelePt/telebot.py שגויה. צ"ל TelePi
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'
OK, ראיתי שסידרת את האינדנטציה
היי עופר,
הסרתי את השורה הרלוונטית.
תודה על העדכון.
OK, הסרתי את השורה
user_name = msg['chat']['username']
וזה עובד.
הבוט לא מופעל לי אוטומטית בהדלקה.
איך לבדוק את זה? (חלש בלינוקס 🙁
אחלה מדריך. יש דרך להתקין את התהליכים על סטרימר מבוסס אנדרואיד במקום על שרת לינוקסי?
שאלה מעניינת, לא ניסיתי את זה עדיין אבל בהחלט אבדוק את זה.