תוכן עניינים:

השהיית Chromcast עם שלט רחוק: 5 שלבים
השהיית Chromcast עם שלט רחוק: 5 שלבים

וִידֵאוֹ: השהיית Chromcast עם שלט רחוק: 5 שלבים

וִידֵאוֹ: השהיית Chromcast עם שלט רחוק: 5 שלבים
וִידֵאוֹ: פתיחת סיפון המפקד Massacre des Maestros, הרחובות של קאפנה החדשה 2024, יולי
Anonim
Image
Image
ציוד
ציוד

יש לי שלט הרמוניה של Logitech ומריץ את עוזר הבית על פטל פטל.

רציתי להיות מסוגל להשהות Chromecast מהשלט שלי, אבל יש לי טלוויזיה ישנה שאינה תומכת בכך באמצעות hdmi. הרעיון שלי היה אז להשתמש ב- NodeMcu כדי לתפוס את האות ir ולהשהות.

אם אינך מצליח לגרום לזה לעבוד או שיש לך שאלות אנא הערה למטה

שלב 1: ציוד

ציוד
ציוד
ציוד
ציוד

ציוד דרוש:

Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…

מקלט Ir (למשל:

חוטי דופונט

כבל מיקרו USB (כוח nodemcu)

אני משתמש ב- Logitech Harmony -hub

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

אתה צריך להיות מסוגל להשתמש ב- Nodemcu ב- Arduino IDE מכיוון שאני לא אכנס לזה כאן

שלב 2: אות מרחוק

אות מרחוק
אות מרחוק
אות מרחוק
אות מרחוק
אות מרחוק
אות מרחוק
אות מרחוק
אות מרחוק

הדרך שעשיתי את זה הייתה להעתיק אות משלט שאני לא משתמש בו לשלט רחוק.

השתמשתי בשלט עבור טלוויזיה Panasonic TXL32C3E מכיוון שזה לא מפריע לציוד שלי בקומה הראשונה. זו טלוויזיה שיש לי למעלה.

אם אתה לא משתמש בהרמוניה אתה יכול לדלג על זה.

אז למציאת האות השתמשתי בסקצ 'הזה:

. * * זכויות יוצרים 2009 קן שירף, https://arcfn.com * זכויות יוצרים 2017 דיוויד קונראן * * תרשים מעגל לדוגמא: * https://arcfn.com * * שינויים: * גרסה 0.3 בנובמבר, 2017 * - תמיכה במזגן פענוח עבור כמה פרוטוקולים. * גרסה 0.2 באפריל, 2017 * - פענוח מתוך עותק של הנתונים כדי שנוכל להתחיל ללכוד מהר יותר ובכך * להפחית את הסבירות לטעות. * מבוסס על גירסת IrsendDemo של קן שירריף 0.1 יולי 2009, */

#ifndef UNIT_TEST

#כלול #כלול #הכללה #הכללה #הכללה #אם DECODE_AC #הכללה #הכללה #הכללה #הכללה #הכללה #ענדיף // DECODE_AC

// ===================== התחלת פרמטרים TUNEABLE =====================

// גלאי/מפענח IR מחובר לפין 14 של GPIO // // למשל D5 בלוח NodeMCU. #הגדר RECV_PIN 14

// קצב שידור השידור החיבורי.

// כלומר הודעת סטטוס תישלח למחשב בקצב שידור זה. // נסו להימנע ממהירויות איטיות כמו 9600, מכיוון שתפספסו הודעות ו// תגרום לבעיות אחרות. 115200 (או מהר יותר) מומלץ. // הערה: הקפד להגדיר את הצג הסידורי שלך למהירות זהה. #הגדר BAUD_RATE 115200

// מכיוון שתוכנית זו היא לכידה/מפענח למטרות מיוחדות, תן לנו להשתמש בגודל גדול יותר

// מאשר חיץ רגיל כדי שנוכל להתמודד עם קודים מרחוק של מזגן. #הגדר CAPTURE_BUFFER_SIZE 1024

// TIMEOUT הוא מספר. של מילי שניות של אין יותר נתונים לפני שנשקול א

// ההודעה הסתיימה. // פרמטר זה הוא פשרה מעניינת. ככל שהפסק זמן ארוך יותר כך הוא יכול ללכוד מסר // מורכב יותר. לְמָשָׁל חלק מפרוטוקולי המכשיר ישלחו // חבילות הודעות מרובות ברצף מהיר, כמו שלטי מזגן. // לפרוטוקולי מזגן אוויר יש לרוב פער ניכר (20-40+ms) בין // מנות. // החיסרון של ערך פסק זמן גדול הוא הרבה פרוטוקולים פחות מורכבים // שולחים מספר הודעות כאשר כפתור השלט רחוק. הפער ביניהם הוא לעתים קרובות גם סביב 20+אלפיות השנייה. זה יכול לגרום לכך שהנתונים הגולמיים יהיו גדולים פי 2-3+ // מהצורך מכיוון שהם קלטו 2-3+ הודעות ב // לכידה אחת. הגדרת ערך פסק זמן נמוך יכולה לפתור זאת. // אם כן, בחירת הערך הטוב ביותר של TIMEOUT במקרה הספציפי לשימוש שלך היא // די ניואנסים. בהצלחה וציד שמח. // הערה: אל תעלה על MAX_TIMEOUT_MS. בדרך כלל 130ms. #if DECODE_AC #define TIMEOUT 50U // לכמה יחידות מיזוג אוויר יש פערים בפרוטוקולים שלהן של ~ 40ms. // למשל Kelvinator // ערך גדול זה עלול לבלוע חזרה על כמה פרוטוקולים #else // DECODE_AC #define TIMEOUT 15U // מתאים לרוב ההודעות, תוך בליעת חזרות רבות. #endif // DECODE_AC // חלופות: // #define TIMEOUT 90U // מתאים למסרים עם פערים גדולים כמו XMP-1 וכמה מיזוג אוויר // יחידות, אך יכול לבלוע בטעות הודעות חוזרות // בפלט rawData . // #define TIMEOUT MAX_TIMEOUT_MS // זה יגדיר את המקסימום // המותר כרגע. ערכים גבוהים אלה בעייתיים // מכיוון שהם בערך הגבול הטיפוסי // שבו רוב ההודעות חוזרות על עצמן. // למשל הוא יפסיק לפענח הודעה ו // יתחיל לשלוח אותה לסדרתי בדיוק // בשעה שבה סביר להניח שההודעה הבאה // תועבר, ועלולה לפספס אותה.

// הגדר את חבילות ההודעות "הלא ידועות" בגודלן הקטן ביותר שאכפת לנו מהן.

// ערך זה מסייע בהפחתת קצב הגילוי החיובי-שווא של רקע IR // רעש כהודעות אמיתיות. הסיכויים לזיהוי רעשי IR ברקע // כאשר ההודעה עולה עם אורך ערך TIMEOUT. (ראה לעיל) // החיסרון בהגדרת ההודעה גדולה מדי הוא שאתה יכול לפספס כמה הודעות תקפות // קצרות לפרוטוקולים שספרייה זו עדיין לא מפענחת. // // הגדר גבוה יותר אם אתה מקבל הרבה הודעות לא ידועות וקצרות כאשר שום דבר // לא אמור לשלוח הודעה. // הגדר נמוך יותר אם אתה בטוח שההגדרה פועלת, אך הוא אינו רואה הודעות // מהמכשיר שלך. (למשל עבודות שלטי IR אחרים.) // הערה: הגדר ערך זה גבוה מאוד כדי לכבות ביעילות זיהוי לא ידוע. #define MIN_UNKNOWN_SIZE 12 // ==================== סוף פרמטרים TUNEABLE ====================

// השתמש בהפעלת תכונת החיץ שמור לכיסוי צילום מלא יותר.

IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, true);

תוצאות decode_results; // איפשהו לאחסן את התוצאות

// הצג את המצב הקריא האנושי של הודעת מיזוג אוויר אם נוכל.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (תוצאות-> מצב); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (תוצאות-> מצב, תוצאות-> סיביות / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (תוצאות-> מצב); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (תוצאות-> מצב); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (תוצאות-> ערך); // Midea משתמש בערך במקום במדינה. description = ac.toString (); } #endif // DECODE_MIDEA // אם קיבלנו תיאור קריא על ידי ההודעה, הצג אותו. if (description! = "") Serial.println ("מס 'תיאור:" + תיאור); }

// קטע הקוד מופעל פעם אחת בלבד בעת ההפעלה.

הגדרת void () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); עיכוב (500); // המתן מעט עד שהחיבור הטורי יוקם.

#אם DECODE_HASH

// התעלם מהודעות עם פחות מדופק הפעלה או כיבוי. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // הפעל את המקלט}

// החלק החוזר על הקוד

// void loop () {// בדוק אם קוד ה- IR התקבל. if (irrecv.decode (& תוצאות)) {// הצג חותמת זמן גסה. uint32_t עכשיו = מיליס (); Serial.printf ("חותמת זמן: %06u. %03u / n", כעת / 1000, כעת %1000); if (results.overflow) Serial.printf ("אזהרה: קוד IR גדול מדי למאגר (> = %d)." "אין לסמוך על תוצאה זו עד לפתרון הבעיה." "ערוך והגדיל CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // הצג את הפלט הבסיסי של מה שמצאנו. Serial.print (resultToHumanReadableBasic (& תוצאות)); dumpACInfo (& תוצאות); // הצג מידע נוסף על מיזוג אוויר אם יש לנו אותו. תְשׁוּאָה(); // הזן את ה- WDT מכיוון שפתיחת הטקסט עשויה לקחת זמן מה להדפסה.

// הצג את גרסת הספרייה שבה נלכדה ההודעה.

Serial.print ("ספרייה: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// פלט מידע על תזמון RAW של התוצאה.

Serial.println (resultToTimingInfo (& תוצאות)); תְשׁוּאָה(); // הזן את ה- WDT (שוב)

// פלט את התוצאות כקוד מקור

Serial.println (resultToSourceCode (& תוצאות)); Serial.println (""); // קו ריק בין תשואות הערכים (); // הזן את ה- WDT (שוב)}}

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

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

ערכתי את הכפתורים בפעילות שלי ב- Netflix כדי לשלוח אות הפסקה מהשלט של פנסוניק.. (ראה תמונה)

שלב 3: כתיבת הקוד לשליחה אל Nodered

כתיבת הקוד לשליחה אל Nodered
כתיבת הקוד לשליחה אל Nodered

#ifndef UNIT_TEST #כוללים #endif #include

#לִכלוֹל

#לִכלוֹל

#לִכלוֹל

#לִכלוֹל

#לִכלוֹל

const char* ssid = ""; // הזן SSID הרצויה char* password = ""; // הזן כאן סיסמה const char *host = ""; // כתובת IP #define USE_SERIAL סידורי ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); תוצאות decode_results; הגדרת void () {irrecv.enableIRIn (); // הפעל את המקלט USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

עבור (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); עיכוב (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, סיסמא); } לולאת void () {if (irrecv.decode (& תוצאות)) {

// שנה את ערך האות הזה עבור זה שקיבלת

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("השהה אות מתקבל"); wifisend (הפסקה); עיכוב (1000);

} if (results.value == 0x400401007273) {

USE_SERIAL.println ("הקודם");

wifisend ("prev"); עיכוב (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("הבא"); wifisend ("הבא"); עיכוב (1000); }

irrecv.resume (); // קבל את הערך הבא} עיכוב (100); } void wifisend (נתוני מחרוזת) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] מתחילים … / n"); // הגדר את השרת הטראגי ואת כתובת האתר http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET … / n"); // התחל חיבור ושלח כותרת HTTP int httpCode = http. GET (); // httpCode יהיה שלילי בשגיאה אם (httpCode> 0) {// כותרת HTTP נשלחה וכותרת תגובת השרת טופלה USE_SERIAL.printf ("[HTTP] GET … code: %d / n", // קובץ נמצא בשרת

if (httpCode == HTTP_CODE_OK) {Loadload String = http.getString (); USE_SERIAL.println (מטען); }} אחר {USE_SERIAL.printf ("[HTTP] GET … נכשל, שגיאה: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); עיכוב (100); }}

זהו הקוד שהשתמשתי בו ב- nodemcu שלי. יהיה עליך להתקין את הספריות האלה.

אתה יכול לבדוק באמצעות צג סדרתי וללחוץ על כפתורים מרוחקים שהוספת בקוד כדי לראות את התגובה.

בשורה:

http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + נתונים);

עליך לשנות [משתמש] למשתמש שלך וכן הלאה. ללא סוגריים. סוגריים נמצאים שם כדי להראות שדות מכשפות שיש לשנות.

הקו הזה גם לא יעבוד עד שנגדיר את הזרימה שלנו במסודרות.

שלב 4: יצירת זרימה ב- Nodered

יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered
יצירת זרימה ב- Nodered

כפי שצוין בהתחלה אני משתמש ב- hass.io עם nodered. אם אתה מפעיל התקנה אחרת תצטרך לעשות זאת אחרת! אתה יכול לראות בתמונה שכאשר לוחצים על כפתור זה מופיע בחלון באגים …

כנראה שהיה אפשר לדלג על צומת מטען השינוי אם הייתי בוחר במשהו אחר שהנתונים = בשלב הקודם. צומת המתגים שאני משתמש בה הוא הרבה יותר גדול מאשר רק להשהות אבל זה רק כדי שאוכל להוסיף עוד אותות IR לשימוש ב- Chromecast לתחנות רדיו וכו '.

להשהיית משחק בלבד תוכל להשתמש בזרימה בתמונה השנייה.

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "wires":

הסרתי מזה את שם המשתמש ואת כתובת האתר, כך שתצטרך לערוך את זה.

הוסף צומת מתג אם אתה רוצה להגיב ליותר מאשר רק להשהות (ראה תמונה למשל)

בצומת עוזר הבית לשימוש בהשהיה:

name: play pause chromecastdomain: media_player Service: media_play_pausedata: {"entity_id": "media_player. [chromecast שלך כאן]"}

לשיר הבא פשוט העתק את הצומת וערוך את השירות ל: media_next_track ושם ל-: chromecast הבא

שלב 5: אופציונלי Alexa השהה Chromecast

פקודת הוספת alexa אופציונלית להשהיית chromecast:

יש כאן אפשרויות.. אתה יכול ליצור צומת אלקסה אחת שנקראת pause chromecast להשהות שמשהה chromecast, או שאתה יכול ליצור אחד שנקרא pause TV שבודק את פעילות ההרמוניה הנוכחית ולהשהות בהתאם.

אוסיף את זה כאן מאוחר יותר..

מוּמלָץ: