שליטה מרכזית או מבוזרת

כל מה שקשור על בית חכם, שליטה על אור או מוצרים בבית, אוטומציה של פעילות היום היומית שלנו...
שלח תגובה
סמל אישי של משתמש
Alex
מנהל האתר
הודעות: 763
הצטרף: ה' ינואר 28, 2010 8:27 pm

שליטה מרכזית או מבוזרת

שליחה על ידי Alex »

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

בינתיים הבחירה שלי היא תשתית קווית שמתבססת על רכיבי תקשורת RS485.

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

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

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

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

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

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

אסביר טיפה איך הספריה עובדת:
תמונה
העיגולים עם "S" הם חישנים (Sensors), כמו שרשמתי, כל התקשורת מגיעה לקונטרולר דרך ה-Gateway של הרשת, העיגול עם "GW". הספריה נוצרה במקור לרשת אלחוטית, כך שכדי להתגבר על המצב שהחישנים מרוחקים מדי מה-Gateway צריך רכיבים שיעזרו לתקשר ביניהם, קוראים להם Repeaters, העיגולים עם ה-"R". הרשת יודעת למצוא לבד את המסלול הטוב ביותר לתקשורת בין הרכיבים.
בחיבור הראשוני החישנים ("S") מתקשרים עם הקונטרולר ומקבלים ממנו מספר מזהה יחודי. אפשר גם להקצות את המספרים בצורה ידנית.

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

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

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

למה בכלל צריך Gateway במערכת כזו?
קודם כל כדי שיהיה "שער" אחד לתקשורת עם הקונטרולר. דבר שני, מכיוון שיש הרבה רכיבים שיכולים להתחיל לדבר בו זמנית, צריך שיהיה מישהו אחראי שיוכל לעשות סדר. רכיבי התקשורת RS-485 הם Half-Duplex, מה שאומר שבזמן שמשדרים לא שומעים שידורים של האחרים. אפשר להשתמש ב-2 כאלה כדי להפעיל אותם במקביל על קווים שונים, אבל זה לא הכיוון שלי כרגע. נניח שנשאר עם Half-Duplex. אם שני רכיבים משדרים משהו, אז אף אחד מהם לא ידע על השידור של השני. מקרה כזה נקרא התנגשות (Collision) בטרמינולוגיה של עולם התקשורת. יש פרוטוקולים שיכולים לזהות את זה ברמה החומרתית ולשדר שוב, יש כאלה שהדרך היחידה לזהות את המקרה זה לחכות לתשובה מהצד השני ולבצע שידור נוסף אחרי השעיה אקראית כדי לא להתנגש שוב עם אותו רכיב הנוסף שגם הוא בטח יזהה התנגשות באותו הזמן. לרוב זה עובד לא רע (Wifi, Ethernet כו'). אבל יש גם שיטה אחרת, קצת יותר מיושנת ומגיעה לביצועים פחות טובים מבחינת מהירויות העברת הנתונים אבל יותר דטרמיניסטית מבחינת זמן העברת הנתונים בין הרכיבים ברשת, השיטה נקראת TokenRing. בשיטה זו יש גורם אחראי אחד שמעביר אסימון (Token) בצורה מסודרת (Ring) בין כל הרכיבים של הרשת. זה יכול להיות Gateway יעודי כמו במקרה שלנו, או שזה יכול להיות גם כל אחד מהרכיבים ברשת שמשחק את התפקיד של האחראי, כך שאם האחראי הנוכחי לא מגיב מאיזו שהיא סיבה (התקלקל, כיבו את המכשיר), אז כל השאר יגרילו ביניהם מי יהיה האחראי הבא וכך הרשת ממשיכה הלאה.
במקרה שלנו בכל מקרה צריך שיהיה מקום מרכזי שיתקשר עם הקונרולר, וגם החיבור בין כל הרכיבים הוא לא ממש מעגלי כדי שכולם ישמעו את כולם (אפשר לעשות את זה אם כולם ישבו על הקו בצורה טורית, הזכרתי את זה בפוסט הקודם, אבל זה לא המצב), כך שצריך רכיב מרכזי שיהיה האחראי על הרשת...

המערכת יודעת לטפל בחיבור של עד 254 רכיבים שזה נראה לי מעל ומעבר למה שאצטרך. כל נקודת תקשורת ברשת יכולה לטפל ב 254 חישנים שמחוברים אליה, כך שבתאוריה אפשר להגיע ל-64516 חישנים!

מה עם הקונטרולר עצמו? באתר של MySensors יש רשימה יפה. עוד לא בדקתי אותם לעומק כדי להחליט, אבל הכיוון הוא שהם יעבדו על Raspberry PI ושתהיה אפליקציה ל-Android, דרכה אפשר יהיה לשלוט על כל מה שמחובר. אני מניח שרוב התוכנות מהרשימה עושות את אותו הדבר. בפורום של MySensors הם מפרגנים ל-Domotics, בקבוצת ארדואינו בפייסבוק גיליתי שיש אנשים שמשתמשים ב-HomeAssistant וב-OpenHAB. מהפורום של MyAssistant הבנתי ש-OpenHAB כתוב בשפת Java, שמאפשרת לו לרוץ על הרבה מערכות הפעלה, אבל גם הופכת אותו ללא כל כך יעיל בהשוואה לאחרים שכתובים ב-C++ או אפילו ב-Python.

השלב הבא יהיה למצוא זמן כדי להתחיל לממש משהו מכל מה שכתבתי :)

אתחיל כנראה מחישן טמפרטורה/לחות פשוט כדי לראות שהתקשורת מהחישן לקונטרולר דרך ה-GW עובדת כמו שצריך. אחרי זה אנסה להוסיף מפסק שידליק לד על רכיב אחר (דרך הקונטרולר) ואחרי זה אנסה לעשות את השינויים כדי שהם יתקשרו אחד עם השני ישירות.
www.4project.co.il
כל הרכיבים לפרוייקט שלכם
alsec
הודעות: 1
הצטרף: ו' מאי 18, 2018 11:34 am
יצירת קשר:

Re: שליטה מרכזית או מבוזרת

שליחה על ידי alsec »

פוסט נפלא :) תודה על השיתוף.
שלח תגובה