פרסומת
HomeKit נמצא סוף סוף בחיק הטבע, ומאפשר שליטה קולית באמצעות סירי עבור קומץ מכשירי בית חכמים לצרכנים.
למרבה הצער, אני מתכוון לקומץ מילולי - כל מה שכבר קנית כנראה לא תואם. עם זאת, הפרוטוקול כבר הונדס הפוך ואמולטור קוד פתוח עבור ממשק ה- API של HomeKit זמין: או ב באנגלית רגילה, כעת תוכלו ליצור מכשירי HomeKit "מזויפים", וסירי תשלוט בהם ממש כמו כל HomeKit רשמי אחר. אבזר.
היום אנו הולכים ליצור תאורת Wi-Fi נשלטת ולשלוט בה באמצעות סירי. הנה הדגמה.
הנה מה שתצטרך:
- פאי פטל (השתמשתי ב- RPi2, יש הבדל קטן בגירסאות ה- Node להתקנה בהתחשב בארכיטקטורת ARM המשודרגת - ראה הערות בהמשך).
- מתווך MQTT המותקן ב- Raspberry Pi. עיין בסעיף "התקן יתוש על ה- Pi שלך" בסעיף שלי מדריך OpenHAB חלק 2 מדריך למתחילים של OpenHAB חלק 2: ZWave, MQTT, כללים ומפותOpenHAB, תוכנת האוטומציה של הקוד הפתוח, חורגת בהרבה מהיכולות של מערכות אוטומציה ביתיות אחרות בשוק - אך לא קל להתקין אותה. למעשה, זה יכול להיות מתסכל לחלוטין. קרא עוד . זה לא צריך להיות מותקן באופן ספציפי על ה- Pi - אתה יכול אפילו להשתמש בשרת MQTT מבוסס ענן, אך מכיוון שאנחנו צריכים Pi עבור הדרכה זו בכל מקרה, זה נוח.
- NodeMCU v2 (תואם Arduino)
- נוריות Neopixel (אני ממליץ על 4 פיקסלים לבדיקה, ואז תוכל להוסיף ספק כוח חיצוני ולהוסיף כמה שתרצה)
התקנת גשר HomeKit
אנו הולכים להתקין יישום NodeJS בשם HAP-NodeJS ל- Raspberry Pi: זה יהווה גשר בין בקשות HomeKit לבין התקני ה- Wi-Fi. אנו מגדירים את הגשר הזה עם אביזר אחד לעת עתה, אך אתה יכול להוסיף כמה שרק תרצה.
אני בעצם מתקין את זה על שרת הבית הקיים שלי שמריץ את OpenHAB - אני מקווה לחבר את השניים יחד ב תאריך מאוחר יותר, אך לעת עתה, דעו שהם יכולים להתקיים יחד על אותו פטל פטל. אם אתה עושה את אותו הדבר, פשוט ב מקרה, בצע גיבוי משובט של כרטיס ה- Pi SD הנוכחי שלך שבט בקלות את כרטיס ה- SD שלך למחשוב Pi פטל ללא בעיותבין אם יש לך כרטיס SD אחד או כמה, דבר אחד שתצטרך הוא היכולת לגבות את הכרטיסים שלך כדי למנוע את הבעיות שמתרחשות כאשר Raspberry Pi שלך לא מצליח לאתחל. קרא עוד . אם הכל משתבש, אתה יכול לשחזר לזה.
התחל על ידי ביצוע שדרוג מלא מהטרמינל או מ- מפגש SSH הגדרת Pi פטל שלך לשימוש ללא ראש עם SSHה- Raspberry Pi יכול לקבל פקודות SSH כאשר הוא מחובר לרשת מקומית (באמצעות Ethernet או Wi-Fi), מה שמאפשר לך להגדיר אותה בקלות. היתרונות של SSH חורגים מהפרת המסך היומי ... קרא עוד .
עדכון sudo מתאים לקבל. sudo מתאים לקבל שדרוג.
ייתכן שתצטרך לעשות זאת פעמיים אם עבר זמן.
כעת התקן כמה חבילות ליבה שנצטרך להן:
sudo apt-get להתקין npm git-core libnss-mdns libavahi-compat-libdnssd-dev.
בשלב הבא, אנו נתקין את הגרסה האחרונה של NodeJS. אתה עשוי להתפתות לעשות זאת apt-get, אבל אל תעשה - הגרסה ההיא ממש ישנה עכשיו והיא לא תעבוד. במקום זאת, בקרו nodejs.org, דפדף אל הורד / שחרר / האחרון-v5.x.0 / במדריך ובדוק מה הקישור לגירסה האחרונה. אתה מחפש linux-armv7l עבור פטל Pi 2, או linuxarmv6l עבור דגמי ה- RPi המקוריים. לאחר מכן, התאמת כתובות האתר ושמות הספריות לפי הצורך, הורד והתקן באמצעות הפקודות הבאות.
ווגט https://nodejs.org/download/release/latest-v5.x.0/node-v5.5.0-linux-armv7l.tar.gz. tar -xvf node-v5.5.0-linux-armv7l.tar.gz. צומת CD-v5.5.0-linux-armv7l. sudo cp -R * / usr / local.
אשר באמצעות הקלדה
גרסת הצומת.
ואתה צריך לראות את v5.5 (או מה שהיה האחרון שהורדת).
בשלב הבא, יש לנו כמה מודולי צומת להתקנה.
התקן sudo npm - g npm. sudo npm התקן -g צומת Gyp.
בפקודה הראשונה הזו אנו משתמשים למעשה במנהל החבילות של Node (npm) כדי להתקין גרסה חדשה יותר של עצמה. נבון!
עכשיו, כדי להוריד את אמולטור HomeKit שנקרא HAP-NodeJS:
שיבוט גיט https://github.com/KhaosT/HAP-NodeJS.git. תקליטור HAP-NodeJS. בנייה מחדש בבוקר. sudo npm התקן צמת התמדה. התקן srp.
בשלב זה ביצעתי שגיאה זו: "#error גרסה זו של הצומת / NAN / v8 דורשת מהדר C ++ 11“. אם זה קורה לך, התקן מהדר C ++ עדכני יותר עם הפקודות:
sudo apt-get להתקין gcc-4.8 g ++ - 4.8. חלופות עדכון sudo - התקן / usr / bin / gccgcc / usr / bin / gcc-4.6 20. חלופי עדכון sudo - התקן / usr / bin / gcc gcc /usr/bin/gcc-4.8 50. חלופות עדכון sudo - התקן / usr / bin / g ++ g ++ /usr/bin/g++-4.6 20. חלופות עדכון sudo - התקן / usr / bin / g ++ g ++ /usr/bin/g++-4.8 50.
עכשיו לא אמורה להיות לך בעיה. המשך להפעיל את הפקודות האלה, אחת אחת:
התקן srp. sudo npm התקן mdns --unsafe-perm. התקנה באגים של sudo npm -. sudo npm התקן ed25519 --unsafe-perm. sudo npm התקן curve25519 --unsafe-perm.
זה אמור להיות הכל. נסה להריץ את האמולטור עם:
הצומת Core.js.
אם אתה מקבל שגיאות באומרו שהוא לא יכול למצוא מודול כזה וכזה, פשוט השתמש ב התקן sudo npm - הפקודה שוב, והדבק את השם של כל מודול שהיה חסר. בהנחה שהכול בסדר, כדאי שתראו כמה אזהרות, וגשר ה- HomeKit שלכם יפעל. כך נראית הצלחה:
אתה יכול לראות מיד שזה כבר יצר קבוצה של 6 מכשירים מזויפים. אנו נשתמש בזה כנקודת התחלה עבור תאורת ה- Wi-Fi שלנו משלנו בהמשך, אך פשוט נשתמש בכאלה לעת עתה כדי לבדוק. אתה יכול גם לראות מידע נוסף על באגים אם אתה מפעיל את השרת עם:
DEBUG = * צומת Core.js
כעת קפוץ למכשיר אפל שמסוגל להריץ את סירי. אפל באופן מוזר לא מספקת אפליקציית HomeKit מלאי למעט מפתחים רשומים, אז הורידו את החינם אפליקציית Elgato Eve, אפליקציית ניהול של HomeKit המאפשרת להוסיף מכשירים (אפילו שאינם אלגאטו) לרשת HomeKit שלך.
בפעם הראשונה שתפעיל את האפליקציה תצטרך לתת שם לבית שלך, קדימה ותעבור בזה. ואז בחר "הוסף אביזר". התעלם מההודעה על כך שקרוב אליו!
זה יגיד לך לחפש אחר קוד הגדרת HomeKit ייחודי. התעלם מכך ולחץ על "הוסף ל [שם הבית שלך]".
זה גם אומר לך שהמכשיר אינו מאושר. אכן זה לא. קדימה בכל מקרה. כשמגיעים למסך ומבקשים קוד אביזר ...
בחר להזין את הקוד ידנית, והקלד את הדברים הבאים:
031-45-154
ניתן למצוא / לשנות את זה ב- Light_accessory.js הקובץ, אך על כך בהמשך. הוסף אביזר זה לחדר ברירת המחדל שלך, התקשר אליו אור מזויף, והמשיכו לעבור דרך הדיאלוגים לבחירת סמל וכו '.
לבסוף, קפוץ חזרה לסשן ה- SSH בו פועל HAP-NodeJS. יכול להיות שכבר ראית הודעה שנאמר "האם אנו נמצאים?" - זו סקירת אפליקציית אלגטו על מצב האור. פתח את סירי ואמר לה "תדליק אור מזויף", ואז נסה לכבות אותו שוב. אני מקווה שתראה כמה הודעות באגים מ- HAP-NodeJS כדי להראות שהוא קיבל את הפקודות.
אנחנו ב? לא. הדלקת האור! מכבה את האור!
פנטסטי, זה השלב הראשון שסיים. כעת נצטרך אור בפועל, לפני שנחזור להגדיר את הגשר שוב.
בניית אור Wi-Fi
צד החומרה של שלב זה הוא פשוט מפתיע אם נתחיל בארבעה Neopixels בלבד, שכן אנו יכולים להעביר אותם ישירות מלוח ה- NodeMCU ומחיבור ה- USB שלו. אם יש לך רצועה ארוכה יותר, אל דאגה - הגדרנו זאת בתוכנה, כך שהשאר פשוט לא יופעלו.
חבר את כבל החשמל האדום מחוט Neopixel לפין ה- VIN, האדמה הכחולה ל- GND, ואת כבל האות הירוק לפין המסומן D2 ב- NodeMCU. היזהר מאוד בקוטביות: אם אתה מערבב את הקרקע ו- VIN, אתה תשלח גל של כוח דרך הלוח שלך ותשמיד אותו בתהליך.
אם סביבת Arduino שלך טרם הוגדרה לעבודה עם ESP8266, קדימה ופעל לפי המדריך המופיע בסעיף שלי ESP8266: הרוצח ארדואינו הכירו את רוצח ארדואינו: ESP8266מה אם הייתי אומר לך שיש לוח dev תואם Arduino עם Wi-Fi מובנה בפחות מ -10 $? ובכן, יש. קרא עוד מדריך ואז חזור לאחר שתאשר שזה עובד. התקן את הספריות הנוספות הבאות:
- PubSubClient של lmroy
- NeoPixels של Adafruit
הקוד בו אנו משתמשים הוא שינוי של משתמש Github של Aditya Tannu - הסרתי את הפונקציונליות העדכנית המיותרת של עדכון האוויר, הוספתי בכמה פונקציות HSV שהיו חסרות והקלתי על יצירת אורות נוספים רק על ידי שינוי משתנה יחיד. אם אינך יכול לראות את הקוד המוטמע למטה, תוכל למצוא אותו בכתובת הגיסט הזה.
עדכן את השורות הבאות באמצעות פרטי הרשת שלך, ושם ייחודי לכל גוף שאתה יוצר (מארח).
const char * ssid = "..."; const char * סיסמא = "..."; const char * host = "officelight"; IPAddress MQTTserver (192, 168, 1, 99);
כתובת ה- IP של מתקן זה מתקבלת אוטומטית באמצעות DHCP - לא משנה אם היא תשתנה, מכיוון שאנו מתחברים לאותו שרת MQTT בכל פעם.
נכון לעכשיו אנו משתמשים רק בארבעה Neopixels, אך אתה יכול להגדיל את המספר בהמשך אם תעביר אותם ממקור חיצוני. העלה את הקוד ובוא נבדוק - השתמש בלקוח MQTT המועדף עליך לשליחת פקודות (התאם את שם המארח בהוראות שלהלן אם שינית אותו).
- אתה יכול לשלוח ב לשורש אור רשמי ערוץ כדי להפעיל אותו. שלח כל ערך אחר לערוץ הזה כדי לכבות אותו.
- אתה יכול לשלוח מספר בין 0-360 לאור / גוון הרשמי כדי לשנות את הצבע. אנו משתמשים ב- חלל צבע HSV, כך 0 ו- 360 הם אדומים, 120 הם ירוקים, ו -240 הם כחולים.
- אתה שולח ערך אחוז עבור בהירות (0-100, לא כולל את סמל%).
- זהה לרוויה. ערך של 100 יהיה רווי במלואו (כלומר צבע אחיד), ואפס יהיה לבן טהור, ללא קשר לגוון שצוין.
לאחר שתאשר שגוף התאורה מונע MQTT שלך עובד, המשך הלאה.
קביעת תצורה של אביזר HomeKit חדש
חזור אל ה- Raspberry Pi וסיים את היישום HAP-NodeJS אם עדיין לא עשית זאת. נווט אל /accessories ספרייה. כדי להקל על זה, אתה יכול להוריד ישירות קוד שכבר הותאם למתקן "אור הרשמה" על ידי הקלדת הדברים הבאים:
ווגט https://gist.githubusercontent.com/jamesabruce/a6607fa9d93e41042fee/raw/12e4fd1d1c2624e7540ba5e17c3e79bc6bdec5fd/Officelight_accessory.js
בעיקרו של דבר, מדובר בשכפול של אביזר התאורה המוגדר כברירת מחדל, עם כמה שמות משתנים (שוב, מותאמים מהעבודה של Adysan, מפושטים לנוחות השימוש). זה מה שעליך לדעת על יצירת אביזרים מותאמים אישית משלך בהתבסס על זה.
- יש לקרוא לכל האביזרים *_accessory.js
- שנה את כתובת ה- IP במשתנה האפשרויות בחלקו העליון לשרת MQTT שלך
- אם יש לך שם גוף אחר, חפש / החלף את כל המקרים של "אור רשמי"עם שם המתקן הייחודי שלך. אתה יכול לבצע חיפוש / להחליף ב- Nano על ידי לחיצה על CTRL ו \, הקלד את המונח כדי למצוא, את המונח שיש להחליף ואז לחץ על א (כלומר כל המקרים). שלב דרך כל אחד מאלה כדי ללמוד במדויק אילו משתנים מתעדכנים.
- צור שם משתמש ייחודי הקסדצימאלי עבור האביזר (light.username = “1B: 2B: 3C: 5D: 6E: FF”;)
- אל תשנה את קוד ה- PIN. זה בעקבות פורמט ספציפי, אלא אם אתה יודע מה אתה עושה, הוא לא יוכל להתאים. אין שום בעיה לשמור אותם זהים בין אורות.
- אתה יכול לתת למתקן שלך "שם סירי" אחר כשאתה מוסיף אותם לאפליקציית Elgato Eve, ולערוך את אלה בכל עת, כך שאתה לא תקוע בבחירה הראשונית שלך. אין צורך לערוך את קבצי התצורה או להפעיל מחדש את השרת.
- לאחר שיש לך מספר גופי, אתה יכול להשתמש באפליקציית Elgato Eve כדי לקבץ אותם לפי חדרים, או כדי ליצור סצינות ספציפיות המורכבות ממספר פעולות מורכבות. סצינות יכולות להיות מורכבות ממספר פעולות, כגון: הדלקו את נורת המשרד, העמימו אותה ל -25%, הפכו אותה לאדומה והפעילו את מכונת הקפה.
תצטרך להוסיף את האביזר החדש שלך דרך אפליקציית HomeKit שתבחר.
לבסוף, אנו רוצים להפעיל את אפליקציית HAP-NodeJS שלנו בכל פעם שה- Pi מופעל מחדש. הוסף את הדברים הבאים שלך וכו '/ rc.local קובץ, ממש לפני יציאה 0.
צומת הצמד /home/pi/HAP-NodeJS/Core.js dev / null &
אתה יכול לראות ששילבתי את זה עם כמה פקודות שכבר הגדרתי להתחיל באתחול.
אם זו הפעם הראשונה שאתה משתמש ב- rc.local, ייתכן שיהיה עליך להגדיר את זה כהפעלה:
sudo chmod 755 /etc/rc.local
אם מסיבה כלשהי אתה צריך להריץ אותה שוב במצב באגים, אתה יכול להרוג את אפליקציית Node הפועלת באמצעות:
צומת killall
שלב אחרון: נווט אל ספריית האביזרים ומחק את ה- GarageDoorOpener_accessory.js. בזמן הכתיבה זה באגי, ויגרום לנתק השרת לאחר זמן מה.
במה תשלוט עם סירי?
עכשיו, אחרי שיש לך את היסודות למטה, באמת אין גבול למה אתה יכול לשלוט - אם אתה יכול לקודד אותו ב- Javascript, אתה יכול להכין קובץ אביזר משלך. יש כאן כל כך הרבה פוטנציאל, אני חושב שאתה הולך לעשות כיף. תודיעו לי בתגובות עם מה אתם מגיעים!
ג'יימס הוא בעל תואר ראשון בבינה מלאכותית, והוא מוסמך CompTIA A + ו- Network +. הוא המפתח הראשי של MakeUseOf, ומבלה את זמנו הפנוי במשחקי פיינטבול VR ומשחקי לוח. הוא בנה מחשבים אישיים מאז שהיה ילד.