כבר לא מעט זמן שאני מחפש דרך יעילה (אך בו בעת גם זולה) לשליח SMS. אני לא מדבר של שליחות מאסיביות לצרכי הפצת מידע אלא למערכת קטנה שתאפשר לי לקבל התראות ממערכות ניטור, ממערכת הבית החכם ועוד. לאחר חיפוש ובחינה של שלל מערכות שלא מצאו חן בעיני, בין אם בגלל עלות או בגלל הסרבול בעבודה מולן הגעתי למסקנה שאולי כדאי לפתח לעצמי מערכת שכזו, ואכן זה מה שגם עשיתי.
במדריך זה אסביר בקצרה איך באמצעות שילוב של טלפון נייד, אפליקציה קטנה בשם Zanzito וכמה שורות קוד הצלחתי להכין לעצמי sms gateway המאפשר לי לשלוח SMS מכל מערכת שאחפוץ בה ובעלות נמוכה מאוד (בסביבות 20 ש"ח לחודש ללא הגבלת שליחה).
אז למה נזדקק עבור הקמת המערכת?
- אפליקציית Zanzito לאנדרואיד אותה תוכלו להוריד מכאן.
- רישוי לאפליקציה (עלות חד עמית של 20ש"ח), ולא חייבים להוריד על ההתחלה, במצב החינמי האפליקציה תעבוד ברצף לכשעתיים ואז צריך לאתחל אותה.
- טלפון נייד (אנדרואיד) עם SIM – אפשר ואף רצוי להשתמש בנייד שלכם (לחסוך עלות סים נוסף).
- שרת MQTT – הסבר בשלב א' של המדריך.
- את הקוד בפייתון שמאפשר להשתמש ב Web Interface / Web API על מנת להתממשק לשליחה מכל מערכת שתחפצו. את הקוד ניתן להוריד מכאן. הסבר לשימוש בו, בחלקו האחרון של המדריך.
שנתחיל?
שלב א' – התקנת שרת MQTT
MQTT הנו פרוטוקול העברת הודעות "קל משקל" בעל מודל המושתת על פרוטוקול TCP / IP ומשמש לתקשורת בין מכשירי IOT כגון ESP8266, Raspberry Pi וכו '. MQTT נפוץ מאוד בעיקר במכשירים בעלי משאבים נמוכים ויישומים המופעלים באמצעות סוללות כמו אוטומציה ביתית, מערכות אזעקה, אבטחה ורשתות חיישנים המופעלות באמצעות סוללה.
Mosquitto הוא מתווך (broker) להודעות קוד פתוח המיישם פרוטוקולי MQTT. בעזרת התמיכה הרבה של הקהילה, וקלות ההתקנה הוא הפך לאחד ממתווכי ה MQTT הפופולריים ביותר.
את שרת ה MQTT ניתן להתקין באחת משתי הדרכים הבאות:
– התקנה על גבי לינוקס (Ubuntu / Raspberry pi ועוד) על פי המדריך הבא.
– התקנה באמצעות Docker Container על פי המדריך הבא.
שלב ב' – התקנת והגדרת האפליקציה
אז אחרי שהתקנתם את שרת ה MQTT, נעבור להתקנת האפליקציה והגדרתה. את האפליקציה ניתן להוריד מכאן. כעת, פתחו את האפליקציה והמסך הראשון שתראו הוא המסך הראשי שכרגע הסטטוס שמוצג בו הוא שהאפליקציה לא מחוברת לשרת:
כעת, לחצו על התפריט בצידו השמאלי עליון של המסך על מנת לעבור למסך האפשרויות:
כעת לחצו על Preferences (בשליש התחתון של המסך) על מנת לעבור להגדרות החיבור בין האפליקציה לשרת ה MQTT:
כעת, לחצו על MQTT Connection על מנת ללהגדיר את החיבור של האפליקציה לשרת ה MQTT Broker.
כאשר:
- HOST – כתובת שרת ה MQTT שלכם (ניתן להשתמש ב IP או FQDN).
- PORT – הפורט שמשמש להתחברות לשרת ה MQTT – ברירת מחדל היא: 1883
- SECURITY – יוביל למסך בו תתבקשו להכניס את שם המשתמש והסיסמה.
במידה ותרצו להגדיר הגדרות שונות במידה והטלפון מתחבר לרשת אלחוטית (בדרך כלל משמש למקרים בהם הטלפון לא תמיד נמצא באותה הרשת עם השרת) לחצו על Home Host והגדירו את הפרטים הבאים:
- שם הרשת – ESSID – שכאשר הטלפון מחובר אליה הוא ישתמש בשם המשתמש והסיסמה שהוגדרו באותו המסך.
כעת, חזרו אל מסך ההגדרות הראשי, ותחת Device Name הכניסו את השם שתרצו לתת למכשיר שלכם (חשוב! שם זה ישמש מאוחר יותר כדי לזהות את המכשיר בשלב שליחת ההודעות).
כעת, חזרו למסך הראשי ולחצו על היתוש. אם ביצעתם הכל כראוי אתם אמורים לראות בתחתית המסך שהסטטוס השתנה ל Connected.
כעת, נגדיר באפליקציה את האפשרות לשלוח דרכה SMS. לצורך כך הכנסו שוב למשך ההגדרות על ידי לחיצה על התפריט (המבורגר) בפינה העליונה של האפליקציה ולחצו על Preferences. רק הפעם גללו מטה ולחצו על Send SMS:
כעת סמנו את תיבות הסימון של Send SMS וכן של Andorid Notification:
חזרו אחורה וסגרו את מסך ההגדרות. זהו, אנו מוכנים לשלב הבא, שלב הבדיקה ושליחת SMS ראשוני.
שלב ג' – בדיקת המערכת
בחלק זה של המדריך אסביר כיצד ניתן לבדוק שהמערכת עובדת על ידי שליחת sms לבדיקה. אני אשתמש בכלי שנקרא Mqtt Explorer אשר עליו ועל איך להתקין אותו אני מסביר במדריך הבא.
כעת, פתחו את התוכנה והתחברו אל שרת ה MQTT שלכם, אותו התקנתם בחלקו הראשון של המדריך:
לאחר ההתחברות למערכת, אתרו בצד שמאל את המילה Zanzito ותחתי תוכלו לראות את המכשיר שלכם:
בין שאר הדברים שתוכלו לראות במידע שעובר מהאפליקציה לשרת ניתן לראות:
- אחוזי סוללה
- מיקום גאוגרפי
- מצב טעינה (אם בטעינה או לא ואיזה סוג טעינה)
- האם האופציה של שליחת SMS פעילה או לא.
על מנת לשלוח SMS לבדיקה, בחלון הימני של התוכנה תחת publish כתבו את ה topic בצורה הבאה:
zanzito/[devicename]/sendsms/[target_phone_number]
סמנו raw בסוג ה data, ובתיבת הטקסט כתבו את תוכן ההודעה:
ולחצו על publish. אם הגדרתם הכל כראוי תוכלו לראות שקיבלתם SMS (בדוגמה למטה תראו SMS ששלחתי לעצמי):
חלק ד' – שליחת SMS באמצעות Micro Service
אז נכון, הכל טוב ויפה. יש שרת MQTT, יש אפליקציה ואפילו הצלחנו לשלוח הודעת בדיקה. אבל השאלה המעניינת היא איך הופכים את כל זה למשהו שמיש? ובכן, בחלק זה (שלדעתי הוא החלק המעניין יותר של המדריך) אענה על שאלה זו.
תחילה עלינו להתקין את התלויות הנדרשות עבור עבודתו התקינה של הממשק, לצורך כך כתבו את הפקודה הבאה:
sudo pip3 install flask flask_restful paho-mqtt --yes
כעת, הורידו את הקוד מהגיט שלי באמצעות הפקודה הבאה:
git clone https://github.com/t0mer/sms-gateway
כעת, כנסו לתיקיה שנוצרה:
cd sms-gateway
וערכו את הקובץ smssender.py, ועדכנו את הערכים בשורות הבאות בהתאם להגדרות שלכם:
#Set Parameters
#mqtt connection Params
server = '' #MQTT Broker Address
port = 1883 #MQTT Broker Port
user = '' #MQTT Broker Username
passw = '' #MQTT Broker Password
zanzitoDevice = '' #Name tou gave your device in zanzito settings
כאשר:
- server – כתובת שרת ה Mqtt Broker
- port – הפורט של השרת (1883 היא ברירת המחדל)
- user – שם המשתמש לשרת ה Mqtt Broker
- password – הסיסמה לשרת ה Mqtt Broker
- zanzitoDevice – השם של המכשיר שדרכו ישלח ה SMS (כפי שהגדרתם באפליקציה).
כעת נריץ את הקוד ונבדוק שהכל עובד בצורה תקינה. לצורך כך, כתבו את הפקודה הבאה:
python3 smssendr.py
הפלט על המסך אמור להראות כך:
כעת, פתחו את הדפדפן והקלידו את את כתובת השרת בתוספת פורט 7040, לדוגמא http:/192.168.0.1:7040. ותקבלו את הממשק הבא:
הכניסו את מספר הטלפון אליו תרצו לשלוח הודעה, את התוכן ולחצו על Send SMS. במידה וביצעתם הכל כראוי, תוכלו לראות שקיבלתם את ה SMS בהצלחה (וכן, אתם יכולים לשלוח גם לעצמכם).
בהצלחה!
Leave a Reply