fbpx
לחץ ״אנטר״ כדי לדלג על התוכן

בית חכם בימי הקורונה; האם אני פנוי?

שגיאאאא זה לא עובדדד. אהה, אתה בשיחה, סליחה; את הסצינה הזאת כנראה שלא מעט ממי שעובד מהבית מכיר, אתה נמצא בפגישה או שיחה אבל אף אחד בבית לא באמת יודע אם אתה פנוי עכשיו או אחר כך. אז הגיע הזמן שידעו, הרי למה יש בית חכם?

הפוסט מציג שני פתרונות, הראשון פשוט וכללי יותר. כנראה שהוא יתאים לרוב המשתמשים והוא גם פשוט לביצוע. החלק השני קצת יותר מסובך ודורש ידע בתכנות אבל הוא נעשה בעיקר בשביל הנסיון שלי ללמוד דברים ולעשות דברים חדשים בתקופה הזו. בנוסף הוא גם הרבה יותר מגניב ;). הרעיון בשניהם זהה, להדליק נורה כאשר אני לא זמין.

IFTTT – אם עסוק אז תדליק

הפתרון הראשון משתמש בשירות הנהדר IFTTT, ולוח שנה ומנורה שנתמכות בשירות של IFTTT. אני השתמשתי בלוח שנה של גוגל ונורה של Yeelight (עוד אפשרויות). הרעיון הוא די פשוט, ליצור “מתכון” שבתחילת כל אירוע הוא מדליק את הנורה, ומכבה אותה בסופה. כדי להקל עליכם, יצרתי תבניות מוכנות שתוכלו להשתמש בהן – הדלקה, כיבוי.

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

ולזה שיודע לשאול ולתכנת

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

כפי שציינתי, כל השיחות מתבצעות באפליקציית Teams וכאשר אני נמצא בשיחה, הסטטוס שלי (Presence) מתעדכן בהתאם כדי ששאר המשתמשים ידעו שאיני פנוי. לשמחתי, כחלק משירות Graph API של מיקרוסופט, ישנה אפשרות לתשאל (Query) עבור הססטוס. זאת אומרת שאם אכתוב אפליקציה שרצה ברקע ובודקת את הססטוס שלי, אוכל להדליק את הנורה גם כשאני נמצא בשיחות.

החלק הראשון היה ליצור אפליקצייה ב-Azure ולתת לה את ההרשאות הנדרשות עבור קריאת סטטוס – Presence.Read. לאחר שקיבלתי אישור מהאדמין בארגון – שלאפליקציה שלי אכן מותר לקרוא את הססטוס של היוזר המחובר, יכלתי להתקדם.

בחרתי להשתמש ב-NodeJS כיוון שהיא מאד נוחה לפיתוח אפליקציות מסוג אלו, יש לה הרבה מאד דוגמאות וחבילות מוכנות כך שסך כל הפיתוח שאצטרך לעשות יהיה לא גדול. די מהר מצאתי את הדוגמה הנהדרת הזו, שיש בה לא מעט ממה שאני צריך.

קצת הרחבה על תהליך ההתחברות וההרשאות. השלב הראשון הוא חיבור המשתמש וווידוא שהוא מאשר את האפליקציה עבור ההרשאות המבוקשות ונקבל authorization code. בקוד זה נשתמש לבקשה עבור האפליקציה שיצרנו ובשם המשתמש (Delegate)לקבלת AccessToken ו-RefreshToken. בעזרתם אפשר לתשאל את ה-Graph API ולקבל את הססטוס המיוחל. טוקנים שפג תוקפם מחודשים אוטומטית בעזרת Refresh Tokens כך שמרגע ההתחברות, האפליקציה אמורה לרוץ למשך כ-3 חודשים מבלי שאצטרך להתחבר מחדש.

במקור הדוגמה מתשאלת את אירוע לוח השנה של המשתמש, אך די בקלות שיניתי אותה כך שהיא תתשאל את הססטוס שלי. השלב הבא הוא תפעול הנורה. כמו שציינתי קודם, NodeJS מביאה עימה כמות עצומה של חבילות מוכנות ו-yeelight-npm היא אחת מהן. כל מה שנשאר הוא להגדיר את כתובת ה-IP של הנורה ואפשר לשלוט גם בה.

הוספתי קצת כפתורי שליטה ב-UI, כמו למשל הדלקה וכיבוי של הנורה, כעת האפליקציה מציגה את המסך הבא:

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

בדיקה כל 2 דקות, אם הססטוס החדש מצריך שינוי בנורה, בצע אם הנורה לא במצב הזה כבר

הגדרתי את האפליקציה כך שאם מצב ה-Availability שלי הוא Busy, הנורה תדלק בעוצמה של 20% בצבע אדום:

יתרון נוסף ב-NodeJS הוא הקלות שבה אוכל כעת ליצור Docker image ולהריצה כמעט בכל מכונה בלי צורך בהגדרות נוספות.

העליתי את כל הקוד של האפליקציה ל-GitHub כך שתוכלו בקלות לשכפל ולהשתמש. אז נכון שיש פה לא מעט תנאים מקדימים, כמו למשל שהארגון שלכם ישתמש ב-Teams ותקבלו את האישורים המתאימים, אבל הקוד נותן מושג וכיוון לכל מי שירצה לעשות משהו דומה.

אהבתם את הפוסט? עקבו אחר עמוד הפייסבוק של הבלוג.