פרסומת
שקעי חשמל חכמים הם הדרך הפשוטה ביותר לאוטומציה של הבית שלך, אך בסביבות 40 $ לכל אחד עבור שקע מבוסס Wi-Fi או ZWave, לא סביר שתרכוש יותר מכמה.
אולי כבר יש לך כמה שקעים מבוססי RF זולים - מהסוג שמגיע עם שלט רחוק מותאם אישית משלהם, ויש כמה בוחרי ערוצים ומזהים מאחור. למרבה הצער, אין כאלה רכזות בית חכם בשוק קרב רכזות הבית החכם: מה שם ומה קורה? קרא עוד זה עובד עם אלה. האם זה לא יהיה נהדר אם היית יכול לקשר איכשהו את אלה למערכת הבית החכם DIY שלך? ובכן, אתה יכול - בקלות די למעשה - עם כ 10 $ לחלקים.
עם קצת יותר עבודה, אתה יכול לשלב גם חומרה מרחוק אחרת מבוססת RF בהתאמה אישית, כמו מסך הקולנוע התקציבי הזה.
מה אתה צריך:
- לוח ESP8266 NodeMCU v12E (למודל המדויק לא משנה, גם V1 או V3 צריכים להיות בסדר). הסיבה שאנו משתמשים בלוח NodeMCU היא מכיוון שאנחנו רוצים את חיבור ה- Wi-Fi הקל בהמשך. הקישור מיועד לחבילה של 2 שעובדת במחיר של 7 $ כל אחת.
- חבילה של משדר ומקלט 433 MHz (בסביבות 3 $).
- ספריות RCSwitch ו- MQTT, והקוד שלנו - הכל זמין להורדה מגיתוב.
- שרת MQTT, מקומי או מרוחק.
- כמה שקעים בשליטת RF הפועלים על פס 433 מגה הרץ (יש לומר בשלט הרחוק). קניתי את מכרי ממפלין כחבילה של 3 בערך 20 ליש"ט (25.89 $).
אם זו הפעם הראשונה שתכנת את לוח NodeMCU, תצטרך להוריד עבורם את התוספים של Arduino: עקוב אחריה עם החלק הראשון של ה- מדריך מבוא לרוצח ארדואינו הכירו את רוצח ארדואינו: ESP8266מה אם הייתי אומר לך שיש לוח dev תואם Arduino עם Wi-Fi מובנה בפחות מ -10 $? ובכן, יש. קרא עוד עבור שבב NodeMCU / ESP8266. תצטרך גם כן נהגים CH430. אתה יכול למצוא הנהגים חתומים על macOS CH430 כאן, או חלונות כאן.
השתמשתי ב- v1.6.5 של הארדואינו מכיוון שכל דבר גבוה יותר מביא ליותר בעיות ממה שהוא פותר. שדרג למטה אם עדיין לא עשית זאת.
לפני שתמשיך, אני הולך להניח רמה בסיסית של ידע אודות תכנות ארדואינו תכנות ארדואינו למתחילים: הדרכת פרויקט בקרת רמזורבניית בקר רמזור של Arduino עוזרת לך לפתח מיומנויות קידוד בסיסיות! אנו מתחילים. קרא עוד , וכי יש לך את הגדרת NodeMCU שלך במנהל הלוח, ואתה יכול להעלות כראוי קוד הדגמה בצורה נכונה. היית צריך להוסיף גם את הספריות הכלולות בהורדה שלנו ארדואינו / ספריות תיקיה.
אם יש לך קיים ספריית PubSubClient או MQTT, גבה אותו והסר אותו - זה שכללתי בהורדה הוא היחיד בו יכולתי לקבל אמינות הודעות ב- NodeMCU, וניסיתי הרבה!
רחרוח RF (אופציונלי)
שלב זה אינו נחוץ אם ברצונך לשלוט רק בשקעי מתג DIP או בחיבור חיוג לבורר - אלה נתמכים מחוץ לקופסה, ו יהיה צורך בשינוי קוד מינימלי (זה עדיין מעניין לעשות קודם כל, כך שתבינו מה קורה מאחורי סצינות).
אם יש לך מרחוק RF אחר שאתה רוצה לנסות להוסיף, יהיה עליך תחילה "לרחרח" את קודי ה- RF המועברים. לשם כך, טען את ה- קבל דמו_מתקדם סקיצה מתוך תפריט -> דוגמאות -> RCSwitch תיקיה ושנה את השורה הבאה מ- 0
mySwitch.enableReceive (0); // מקלט בהפרעה 0 => זהו סיכה מס '2
ל -2.
mySwitch.enableReceive (2); // מקלט ב- GPIO 2 / D4.
חבר את מודול המקלט כדלקמן. במבט קדמי ללוח המקלט (זה הארוך מבין השניים, המשדר מרובע) - הצד עם הרכיבים על:
- מימין הקיצוני GND. התחבר ל- GND בלוח NodeMCU.
- משמאל רחוק הוא VCC. התחבר ל- VIN בלוח NodeMCU.
- שני סיכות אמצעיות הן האות. חבר אחד מהם ל- D4 ב- NodeMCU (הם מחוברים יחד, כך שלא משנה איזה).

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

לאחר שעשיתי זאת מצאתי כי מסך המקרן שלי משתמש
- SCREEN UP: קיבל 8694273/24 סיביות; אורך הדופק: 355 או 356; פרוטוקול: 1
- SCREEN DOWN: קיבל 8694276/24 ביט;אורך הדופק: 355 או 356; פרוטוקול: 1
המשך לכפתורים רבים ככל שתצטרך.
בדיקת המשדר
בשלב הבא ננסה לשלוח קודים באמצעות המשדר. חוט את מודול המשדר (המרובע) כדלקמן. היזהר: התיוג על סיכות אלה הוא זוועה.
סיכת ה- VCC נמצאת למעשה באמצע, לא בצד שמאל. הרסתי מודול אחד בתהליך הבנתו. הדבר האומר "ATAD" הוא למעשה "נתונים", מאוית לאחור. שוב, הנתונים עוברים ל- D4, VCC ל- VIN, ו- GND ל- GND (הסר את מודול המקלט, אינך זקוק לו יותר).

טען את ה- דוגמאות -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, ושוב, שנה את סיכת הנתונים:
mySwitch.enableTransmit (10);
ל
mySwitch.enableTransmit (2);
שימו לב, מגוון דוגמאות כלולות בספריה, ואילו מהן עובדות עבורכם תלויות בסוג המתג המדויק שיש לכם. סוג A (מתגי טבילה) ו- B (חיוג או סליידר) הם הנפוצים ביותר - עיין בתמונות בדף RCSwitch. עבור סוג B, כיבוי ושבת של שקע פשוט כמו:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
כאשר 1 הוא מזהה הערוץ (החוגה העליונה), ו -4 הוא מזהה השקע (החוגה התחתונה). אלה נכתבו בספרות רומיות על שקעי. לפיכך ניתן לטפל במקסימום 16 שקעים בודדים, אם כי שקעים מרובים יכולים להשתמש באותה כתובת אם יש לך מספר מכשירים להפעלה בו זמנית.
עם זאת, מסך המקרן שלי היה מעט שונה - הוא השתמש באורך דופק שונה. אז כדי להפעיל את אלה, הדברים הבאים עבדו. שים לב שתוכל גם להגדיר פרוטוקול אחר אם השלט שלך זקוק לו, אך ודא שאתה מגדיר את הפרוטוקול לפני אורך הדופק. אורך הדופק מוחלף בעת שינוי פרוטוקול.
// שימו לב שהמסך שלי דורש למעשה לחיצות על שני כפתורים (לא לחיצה ארוכה, אלא שתי פיזיות לוחץ), אז אני מתמהמה ואז שולח שוב את אותו האות screen vop () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (קוד עשרוני, מספר ביטים) עיכוב (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); עיכוב (2000); mySwitch.send (8694276,24); }
בדוק שכל הקודים שלך עובדים קודם לפני שתעבור לשלב הבא.
שליטה באמצעות MQTT
פתח את הסקיצה שהורדת מגיתוב בשם mqtt_rcswitch.ino, והתחל בשינוי רשת ה- SSID והסיסמה של הבית שלך. לאחר מכן, שנה את שם הערוץ אם תרצה, והגדר את שרת MQTT. אם אין לך כבר שרת MQTT בהתקנת OpenHAB שלך, קרא את החלק 2 במדריך למתחילים של OpenHAB שלנו מדריך למתחילים של OpenHAB חלק 2: ZWave, MQTT, כללים ומפותOpenHAB, תוכנת האוטומציה של הקוד הפתוח, חורגת בהרבה מהיכולות של מערכות אוטומציה ביתיות אחרות בשוק - אך לא קל להתקין אותה. למעשה, זה יכול להיות מתסכל לחלוטין. קרא עוד . שימו לב שהקוד שלי מיועד לשקעים מסוג B (מתג סיבובי), אם כי תוכלו בקלות לשנות אותו גם עבור מתגי DIP.
החלק החשוב ביותר של הקוד הוא הודעה התקבלה() פונקציה, המגיבה לפקודות MQTT נכנסות. בפונקציה זו אנו בודקים תחילה את מילת המפתח העיקרית - בחרתי ב"מתג "ו"מסך". במקרה של "מתג", אנו מנתחים את הערוץ ואת מזהה התקע; ואז לבדוק את הפקודה על גוף המשא.
הודעה בטלה נתקבלה (נושא מחרוזת, עומס מחרוזת, char * בתים, אורך int int שלא חתום) {if (topic.indexOf ("מתג")> = 0) {// בקרת מתג, ניתוח את הערוץ ותקע מזהה int ערוץ = getValue (נושא '/', 3) .toInt (); int plug = getValue (נושא, '/', 4) .toInt (); if (load == "on") {mySwitch.switchOn (ערוץ, תקע); } else {mySwitch.switchOff (ערוץ, תקע); }} אחרת אם (topic.indexOf ("מסך")> = 0) {// שליטת המסך אם (עומס == "למעלה") {screenUp (); } אחר אם (load == "down") {screenDown (); }} / * הוסף עוד אחד אם כאן כדי להאזין לפקודות נוספות (או פשוט לשנות את זה למעלה אם אתה לא רוצה מסך) * / }
כברירת מחדל, פקודות MQTT הבאות עובדות:
סלון / בקרה / מתג / X / Y (כאשר X הוא ערוץ, ו- Y הוא מזהה תקע; עם גוף ההודעה מופעל או כבוי)
סלון / בקרה / מסך (עם גוף ההודעה למעלה או למטה)
השתמש בשורת הפקודה או בלקוח GUI MQTT כדי לבדוק את המכשירים שלך לפני שאתה מוסיף ל- OpenHAB.
מוסיף ל- OpenHAB
כצעד אחרון, עלינו רק ליצור פריטים למתגים אלה ב- OpenHAB. הגדרתי כעת את הפריטים הבאים, אך אתה אמור להבין כיצד להוסיף עוד:
/ * מכשירי RF433mHz * / החלף את CinemaScreen "מסך" (קולנוע) {mqtt = "> [מתווך: סלון / בקרה / מסך: פקודה: ON: למטה],> [מתווך: סלון / בקרה / מסך: פקודה: OFF: למעלה]"} Switch Switch41 "Switch41" (קולנוע) {mqtt = "> [מתווך: סלון / בקרה / מתג / 4/1: פקודה: ON: on],> [מתווך: livingroom / control / switch / 4/1: הפקודה: OFF: כבוי]"} Switch Switch42 "Switch42" (קולנוע) {mqtt = "> [מתווך: סלון / בקרה / מתג / 4/2: פקודה: ON: on],> [מתווך: livingroom / control / switch / 4/2: הפקודה: OFF: כבוי]"}
כעת אתה אמור להיות מסוגל לשלוט במכשירי ה- RF שלך מ- OpenHAB! דבר שהופתעתי ממנו לטובה היה הטווח - צומת יחידה הצליחה לכסות את רוב הבית שלי. אתה יכול כמובן להוסיף עוד צומת, האזנה לאותו ערוץ, שפשוט חוזר על אותן פקודות, אם אתה זקוק לכיסוי נוסף.
המגבלה היחידה שכדאי לזכור היא שהשקעים עצמם לא יכולים לדווח על מעמדם, כך שאם אתה השתמש בשלט המקורי, בקרת מצב השקע עשויה שלא להשתקף במדויק OpenHAB. דבקו רק בממשק OpenHAB ועליכם להיות בסדר.
שאלות או בעיות? בקש משם בתגובות, ואעשה כמיטב יכולתי לעזור. אם תרצה לשפר את הקוד שלי, אל תהסס להגיש בקשת משיכה.
ג'יימס הוא בעל תואר ראשון בבינה מלאכותית, והוא מוסמך CompTIA A + ו- Network +. הוא המפתח הראשי של MakeUseOf, ומבלה את זמנו הפנוי במשחקי פיינטבול VR ומשחקי לוח. הוא בנה מחשבים אישיים מאז שהיה ילד.