מערכת Home Assistant היא מערכת מצויינת לניהול בית חכם המבוססת קוד פתוח העושה שימוש ב- SQLAlchemy כבסיס להתחברות ל Database. משמעות הדבר היא שנוכל לעשות שימוש בכל מסד נתונים מבוסס SQL הנתמך ב SQLAlchemy, כמו MySQL, MariaDB, PostgreSQL, או MS SQL Server. ברירת המחדל של מנוע מסד הנתונים היא SQLite אשר אינה דורשת שום תצורה. מסד הנתונים מאוחסן בספריית ה – Home Assistant Configuration (.homeassistant) וbקרא home-assistant_v2.db, החסרון העקרי שלו הוא בכך שככל שהוא גדל הביצועים שלו נפגמים ובכך מאיט את המערכת. גם המפתחים של המערכת הבינו את הבעיה ועל כן נוספה התמיכה בבוגי ה-Database הנוספים. עם כל זאת המערכת רושמת ל Database הרבה נתונים וקצב הגדילה שלו מהיר. על מנת לעזור למערכת להשאר מהירה ויציבה יש צורך בתחזוקה שוטפת של ה Database.
בגרסה האחרונה שיצא למערכת (0.63.3) נוספה האפשרות לנטר את גודל ה Databse של המערכת (ובתנאי שנעשה שימוש ב MySQL). כפי שתוכלו לראות בגרף הבא קצב הגידול שלו הוא מהיר (בערך 6Mb ב-24 שעות):
אז איך בכל זאת ניתן לשמור על מערכת יציבה ומהירה? על כך ועוד אשיב במאמר זה "Home Assistant Database Maintenance For Better Performance".
חלק א' – Recoder החרגה והכללה של יישויות ו/או דומיינים
Recorder הוא הרכיב בו נעשה השימוש עבור "הקלטת" הנתונים מהחיישנים השונים ושמירתם במערכת. כברירת מחדל הרכיב פעיל ומשתמש בהגדרות ברירת מחדל (לא דרך קובץ הקונפיגורציה) ומקטע הקוד שלו בקובץ הקונפיגורציה נראה כך:
במצב זה המערכת "מקליטה" את המידע מכל החיישנים והאירועים במערכת ושומרת אותם ב Database ברירת המחדל של המערכת.
Exclude (החרגה / אי הכללה)
על מנת להקל על ה Database ניתן לבצעה החרגה של רכיבים מתהליך ההקלטה ובכך למנוע כתיבה מיותרת של נתונים (כאלה שלא משתנים או שההסטוריה שלהם לא רלוונטית עבורינו). ההחרגה יכולה להתבצע ברמת Domain (מפסקים, סנסורים וכו') וכן ברמת יישות (Entity) כדוגמן חיישן ספציפי. על מנת לעשות זאת יש להוסיף קטע להגדרות שמורה על ביצוע ההחרגה, לדוגמה:
בקטע זה תוכלו לראות כי ביצענו החרגה ברמת דומיין לאוטומציות, Weblinks וכן ל-Updater וכן לחיישנים פקטניים כמו שמש, תאריך וריסטרט אחרון לנערכת.
Include (הכללה):
לעיתים ישנם מקרים בהם רשימת היישויות (Entities) במערכת (חיישנים, מפסקים, אוטומציות וכו') גדולה מאוד ועל כן יותר קל לנהל את ההקלטות על ידי קביעה של הישויות אותן נרצה להכליל בהקלטה מאשר את היישויות אותן נרצה להחריג, לשם כך נוכל להוסיף לקטע ההגדרות חלק שמורה על ההכללה עצמה, לדוגמה:
בדוגמה זו תוכלו לראות דוגמה להכללה בה רק המידע של היישויות/דומיינים שברשימה יוקלט וישמר ב Database (במקרה שלנו חיישנים, מתגים ונגני מדיה).
יתכן וישנו מצב בוא נרצה להקליט נתונים מספר גדול של יישויות/דומיינים ולהחריג מספר מצומצם של יישויות. במקרה זה ניתן להשתמש גם ב Include וגם ב Exclude כפי שנוכל לראות בדוגמה הבאה:
*** הערה חשובה ***
ישנן ישויות שנעזרות המידע מה Recorder על מנת לחזור למצב בו היו במקרה והמערכת מאותחלת. לא מומלץ להחריג אותן שכן החרגה כזו תמנע עבודה תקינה של המערכת ואת חזרתם למצבם האמיתי.
היישויות אשר נכללות בכלל זה הנן:
חלק ב' – Recoder – קביעת הזמן לשמירת ההסטוריה וביצוע ניקוי (אוטומטי או יזום):
כברירת המחדל, המערכת לא מגבילה את זמן שמירת המידע ב Database ועל כן ככל שהמערכת פעילה זמן רב יותר ככה גודל ה Database והנתונים הנשמרים בו הולכים וגדלים וזמני התגובה של המערכת (בעיקר בעת איתחולה) הולכים וגדלים בהתאם. על מנת להתמודד עם העניין ישנה יכולת מובנת במערכת אשר מאפשרת ביצוע "ניקוי יזום" של נתונים. הניקוי מתבסס על חישוב של ימים, כלומר כמה ימים אחורה לשמור את הנתונים.
את הגדרת מספר הימים לשמירה ניתן להגדיר על ידי הוספת ההגדרה הבאה תחת ה Recoder:
בדוגמה זו נוכל לראות כי בהגדרות כיוונו לכך שהנתונים שישמרו ב Database הם לאורך זמן של מקסימום 5 ימים וכי כל מה שהוקלט מעבר לכך ינוקה מה Database.
להגדרות אלה יש פרמטר נוסף אשר מגדיר למערכת כל כמה ימים יש לבצע את תהליך הניקוי: purge_interval כאשר ערך ברירת המחדל שלו הוא יום 1 (כלומר התהליך יתבצע בכל יום).
בנוסף, על מנת שתהליך הניקוי ירוץ על פי ההגדרות שקבעתם יש להוסיף Action תחת אוטומציה כפי שניתן לראות בדוגמה הבאה:
עוד על אוטומציות ו Actions ניתן לקרוא כאן
*** הערה חשובה ***
נכון לגרסה הנוכחית 0.63.3 ולא הגדרתם ניקוי אוטומטי המערכת לא תבצע מחיקה וניקוי של ה Database דבר אשר הולך להשתנות בגרסה 64 של המערכת.
בהודעה מטעם המפתחים, החל מגירסה 64 במידה ולא הוגדר אחרת המערכת תשמור נתונים למשך 10 ימים בלבד, לכם אם חשובה לכם הסטוריה ארוכה יותר עליכם להגדיר זאת.
Leave a Reply