חיפוש
  • יניב אור

פרויקט Wikey - שרת websocket וממשק משתמש למפעיל

בחלק זה אתאר את תהליך כתיבת השרת שדרכו נשלחות פקודות ל-ESP8266 שמחובר לקודן - כחלק מהפרויקט Wikey.


פרויקט Wikey - קודן ללא מגע יד אדם - הקדמה


הקוד מקור נמצא ב-Github הבא:

https://github.com/YanivOr/wikey-web


שרת websocket

סך הכל שרת פשוט מאוד - שרת NodeJS, אגב - ללא הרבה קוד וסיבוכיות. החבילות npm היחידות בהן השתמשתי הן: express ו-ws (ל-websocket).


השרת מאזין לבקשות משני סוגי לקוחות במערכת:

1. המפעיל (operator)

2. רכיב ה-IoT ובמקרה שלנו ה-ESP8266 - שמחובר לקודן (device)


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


ההודעה היחידה כרגע ש-device שולח היא הודעת INIT שמודיעה לשרת שהוא מותקן ומוכן לקבל פקודות. מלבד הפקודה INIT, הוא שולח את ה-unique id שלו. זהו המספר הרנדומלי אותו יצר בזמן הקינפוג (ראו חלקים קודמים). המספר הזה משמש כמפתח באובייקט שמכיל את הרכיבים במערכת. המידע הנוסף שמקושר לכל רכיב הוא: connected -עם הערכים true או false - והאובייקט socket שבאמצעותו יהיה אפשר לשלוח הודעות לרכיב בהמשך ע"י המפעיל.


לרשימת TODO: פקודת ניתוק שמעבירה את connected למצב false ופקודת מחיקה מאובייקט הרכיבים.


יש טיפול במספר סוגי הודעות אותן המפעיל יכול לשלוח והן כולן כוללות את המספר של הרכיב אליו הוא רוצה לתת פקודה, מספר מזהה מפעיל ומידע נוסף. הטיפול בפקודה עצמה מותנה בכך שה-device קיים במערכת (באובייקט רכיבים) והוא מחובר. הפקודה INIT מוסיפה לאובייקט של הרכיב את פרטי המפעיל שכולל את המזהה שלו ואת אובייקט ה-socket שלו. מעבר לכך, יש 4 פקודות נוספות אותן המפעיל יכול לשלוח לרכיב והן: GPIO, PULSE, STR ו-PING.


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


לרשימת TODO: הוספת certificate וטיפול ב-HTTPS.


ממשק משתמש למפעיל

אפרט בהמשך, בינתיים תמונה להמחשה:


© 2023 by DO IT YOURSELF. Proudly created with Wix.com