בית חכם עם ESPHome ו Home Assistant

הסבר על הום אסיסטנט, מערכת הקוד הפתוח לבית חכם ואיך לחבר אליה מיקרובקרים.

כאשר אנחנו מדברים על עולם המייקרים – אלו שיכולים לחבר תוכנות למכשירים דיגיטליים וגם לאינטרנט (מה שנקרא IoT: Internet of Things) יש לנו שני קטבים. הקוטב האחד הוא אלו שעושים את הכל לבד – מחברים את הג׳אמפרים לחיישנים, יוצרים את המארזים ואת הקוד וצורבים ישירות על הבקר. הקוטב השני הוא אלו שקונים את הכל מן המוכן. שקעים חכמים, סוויצ׳ים וכפתורים ומחברים את הכל.

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

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

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

הפוסטים מיועדים למי שמכיר כבר את ESP32 ואת רספברי פיי. אם אתם לא מכירים – אל דאגה! התחילו ללמוד על ESP32 בפוסט הזה שכתבתי. אחרי שתבינו מונחים כמו GPIO, צריבת קושחה ופלט וקלט אנלוגי ודיגיטלי (ולא, זה לא קשה כמו שחושבים, מבטיח שזה עניין קל ממש) אפשר לקפוץ לפוסט שלי שמסביר על רספברי פיי למתחילים ותכירו מונחים כמו צריבת מערכת הפעלה על כרטיס הזכרון וחיבור SSH. תוכלו לחזור לכאן.

הום אסיסטנט

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

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

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

אחרי סיום ההתקנה, והיא באמת פשוטה ומוסברת היטב, מערכת הום אסיסטנט תהיה זמינה ברשת הביתית שלכם תחת הכתובת homeassistant.local:8123 – שימו לב שזה http. היא גם תסרוק את הרשת שלכם ותגלה מכשירים חכמים אחרים. אפשר להתחיל לעבוד כבר עכשיו איתה ולבנות תסריטים שיתממשקו עם המכשירים החכמים הקיימים שלכם. לי למשל יש סונוס ויכולתי לבנות תסריט מיידי שהוא ינגן משהו בשעה מסוימת. אבל המטרה של הפוסט הזה היא לא הום אסיסטנט. המטרה שלנו זה ESP32 ואיך היא עובדת במערכת בית חכם אמיתית את זה אנו עושים עם ESPHOME

ESPHOME

מדובר בתוסף שיושב על הום אסיסטנט ועוזר לנו לתקשר עם ESP32 שיש לנו ברשת ולהגדיר אותם ואת הציוד שלהם. בגדול, אפשר למשל לחבר חיישן מים (מגלה נוכחות של מים) ל-ESP32 ולכתוב לו צד שרת ששולח בקשת AJAX או שולח מייל בכל פעם שיש דליפה ו-ESP32 אחר שמדליק אור או משמיע סירנה. אנחנו יכולים לעשות את הכל עם מיקרופייתון. אבל עם הום אסיסטנט אנחנו יכולים לעשות את זה בקלות יותר. החסרון הוא שיש לנו שכבת אבסטרקציה – אנחנו לא כותבים קוד אלא כותבים קובץ הגדרות בפורמט שנקרא YAML. זה קל יותר אבל פחות גמיש מליטרלי לכתוב את הקוד. התוסף של ESPHOME מאפשר לנו בעצם להתקין קושחה מיוחדת ל-ESP32 שלנו הכוללת כבר חיבור לרשת ואת כל מה שצריך.

אנחנו נדגים באמצעות ESP32 המחובר לחיישן מים. חיישן מים מזהה נוכחות של מים ועוזר לנו לגלות דליפות. למשל שמים אותו מתחת לכיור או בחוץ והוא כבר יזהה גשם.

החיישן הוא חיישן אנלוגי, לא דיגיטלי אבל זה לא משנה – כך או כך אנחנו יכולים לעבוד איתו בקלות עם מיקרו פייתון (בפוסט הזה אני מסביר איך למי ששכח איך עובדים עם קלט דיגיטלי ואנלוגי ב-ESP32). אבל איך אני מחבר אותו ל-Home assistant כדי (למשל) שישלח לי התראה בטלגרם כשיש נזילה, או שיפעיל סירנה, או שיעשה את מגוון האינטגרציות שהום אסיסטנט מאפשר? כאן נכנסת ESPHome לסיפור כי היא מאפשרת לי בקלות לעשות את זה.

התקנת ESPHome

בדומה לתוספים אחרים של הום אסיסטנט, ניתן להתקין את ESPHome באמצעות ה Add on store. נכנסים אל Settings ואז אל Add ons ואז אל Add ons store. אפשר להשתמש גם בקישור הזה. מחפשים ESHome ומתקינים. אפשר לבקש להוסיף את התוסף לתפריט ואז ניתן לגשת אל ESPHome מהתפריט הראשי.

אחרי שנכנסים, אנו נראה שאין לנו שום מכשירים מחוברים. הגיוני למדי.

התקנת ESP ושיוכו ל ESPHOME

נלחץ על הכפתור ונוסיף מכשיר. ראשית נקרא לו בשם. למשל esp1.

אחרי כן נקבל תפריט שבו נוכל לבחור איך לבצע התקנה. יש באמת כמה דרכים. אפשר לחבר את ה-ESP32 ישירות לרספברי פיי בכבל USB. או לחבר את ה-ESP32 למחשב שלכם. אני אבחר באפשרות של חיבור למחשב שלי.

אנו נעבור לאתר שבו ניתן ללחוץ על connect. אנו נלחץ ונוריד גם את ה-bin של הקושחה באמצעות לחיצה על ה-install.

אחרי ההורדה נלחץ על חיבור ונבחר את הקובץ. לפני שלוחצים על Install, יש ללחוץ על כפתור ה-BOOT! אחרת ההתקנה תכשל.

ההתקנה תתחיל, אחרי שהאחוזים מתחילים, אפשר לשחרר את כפתור ה-BOOT ולחכות עד להשלמה.

אחרי הנקודה של ההתקנה, אפשר לחבר את ה-ESP32 לכל נקודת חשמל בבית. אין לנו צורך במחשב יותר כי אנו ננהל אותה מרחוק.

או קיי, אז יש לי ESP32 שמחובר לרשת ואני רואה אותו. ייפי קא ייאי. עכשיו מה?

חיבור חיישן אל ESP32

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

אנחנו נלחץ על EDIT, זה יביא אותנו לממשק עריכת ה-YAML. מדובר בפורמט מאד ידוע ונפוץ להגדרות וכך אנו שולטים על המיקרו בקר שלנו. באמצעות הגדרות. אני רוצה לחבר אליו חיישן מים. חיישן המים עובד עם שלושה פינים – הפלוס הולך למתח, אז אחבר לפין של המתח הקבוע. המינוס לגראונד ואכן אני אעשה את זה והפין של ה-S יחובר לאחד מה-GPIO התומך ב-ADC למשל GPIO34. אם הייתי כותב במיקרופייתון, זה היה ממש פשוט לכתוב קוד שמקבל נתונים מ-GPIO34 – אם יש קלט יותר גדול מאפס, יש לנו מים. אבל איך אני עושה את זה פה? אני מוסיף ל-YAML את הטקסט הבא:

sensor:
  - platform: adc
    pin: GPIO34
    name: "Water Leak Detector"
    update_interval: 10s
    attenuation: 11db  

מה זה אומר? זה אומר שאני מגדיר על המכשיר sensor ואז אני מפרט על החיישן הזה. הפלטפורמה שלו היא adc (כלומר הוא אנלוגי), הפין הוא GPIO34. השם הוא שם שאני בוחר. אני בוחר שהוא ישר כל 10 שניות ואני בוחר גם את ה-attenuation. זה די דומה למה שעבדנו איתו קודם.

אם אין לכם מושג, זה הזמן ללכת ל-GPT ולשאול אותו. אני השתמשתי בשאילתה הזו:

I have home assistance with ESPHome. I want to connect a water sensor to it, I have an ESP32 connected with GPIO34. How will the yaml looks like?

וקיבלתי את ה-YAML הזה. אם מר ג׳יפיטי נותן לכם גם קוד lambda או קוד מעט אחר אתם יכולים להשתמש בו. בגדול אפשר גם לנבור בדוקומנטציה של ESPHOME ויש שם הסבר מעולה (וכמובן שידידנו מר GPT כבר סרק את הטקסט הזה) אבל אם אפשר לקצר תהליכים אז למה לא.

נשמור ונתקין את ה-YAML מחדש באמצעות Install ונבחר באפשרות של מרחוק.

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

אחרי כמה דקות ה-ESP32 יתחבר מרחוק והחיישן יתחיל לעבוד. איך נראה אותו עובד? ראשית נוכל להכנס ללוג ולראות את הקריאות. אמור להיות כל 10 שניות. אם נכניס את החיישן לכוס מים קטנה, נראה מייד את הקריאות.

אפשר לראות את החיישן באמצעות Devices. נכנס ל-Settings ואז ל-Devices. נבחר ב-ESP32 שלנו ונוכל לראות שיש שם כבר חיישן שאפשר לחבר אותו ל-Dashboard! וכמובן לראות את הנתונים.

חיבור LED

דיברנו על קלט – כלומר לקבל נתונים. בואו נדבר על פלט. הפלט יהיה עם אור ובואו נחבר גם LED ל-ESP32 שלנו. לאותו אחד, כן? אין שום בעיה לחבר מגוון של חיישנים או מכשירים. הפעם אני אבחר בנורת LED אדומה. אתקין אותה עם נגד (ממליץ לבדוק שזה עובד עם מתח קבוע לפני שמחברים אותה ל-GPIO).

חיברתי את הפין של המתח ל-GPIO13. אז איך אני מגדיר את זה ב-YAML? בדרך הזו:

light:
  - platform: binary
    name: "LED"
    output: led_output

output:
  - id: led_output
    platform: gpio
    pin: GPIO13

קודם כל הגדרתי אור. האור הוא בינארי (עובד או לא עובד), נתתי לו שם מסוים בשם LED והגדרתי שהפלט שלו הוא led_output. אחרי כן הגדרתי את הפלט – נתתי לו id, הגדרתי את הפלטפורמה שזה gpio ופירטתי את הפין. במקרה הזה GPIO13.

הקוד הזה מצטרף לקוד המלא שיש לי ב-YAML. אני מצרף אותו פה כהדגמה איך זה נראה. אצלכם זה יהיה טיפה שונה אבל בגדול כך יש גם חיישן קלט וגם פלט.

נשמור את ה-YAML ונבצע התקנה. אחרי ההתקנה, אנו נוכל לראות את האור שלנו ב-Device. אם נלחץ על הכפתור, ה-LED יידלק. גם נראה את זה בלוג.

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

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

פוסטים נוספים שכדאי לקרוא

צילום מסך של סוואגר
יסודות בתכנות

openAPI

שימוש בתשתית הפופולרית למיפוי ותיעוד של API וגם הסבר בסיסי על מה זה API

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

גלילה לראש העמוד