Բովանդակություն:

Դադարեցնել Chromcast- ը հեռակառավարմամբ `5 քայլ
Դադարեցնել Chromcast- ը հեռակառավարմամբ `5 քայլ

Video: Դադարեցնել Chromcast- ը հեռակառավարմամբ `5 քայլ

Video: Դադարեցնել Chromcast- ը հեռակառավարմամբ `5 քայլ
Video: Google STADIA alternativas sin su mando 2024, Նոյեմբեր
Anonim
Image
Image
Սարքավորում
Սարքավորում

Ես ունեմ Logitech ներդաշնակության հեռակառավարիչ և գործարկում եմ Home օգնականը ազնվամորու pi- ով:

Ես ուզում էի կարողանալ դադարեցնել chromecast- ը իմ հեռակառավարման վահանակից, բայց ես ունեմ հին հեռուստացույց, որը դա չի աջակցում hdmi- ի միջոցով: Իմ Գաղափարն այն էր `օգտագործել NodeMcu- ն` ir ազդանշանը բռնելու և դադար տալու համար:

Եթե չեք կարողանում այն գործի դնել կամ հարցեր ունեք, մեկնաբանեք ստորև

Քայլ 1: Սարքավորում

Սարքավորում
Սարքավորում
Սարքավորում
Սարքավորում

Անհրաժեշտ սարքավորումներ.

Նոդեմկու (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…

Առանց ընդունիչ (օրինակ ՝ սա ՝

dupont լարերը

Միկրո USB մալուխ (հոսանքի նոդեմկու)

Ես օգտագործում եմ Logitech Harmony -հանգույց

Իմ մոտեցման համար ձեզ պետք է ազնվամորի պի hass.io- ով տեղադրված և Nodered: Ես չեմ գնա այստեղ homeassistant իրեր ստեղծելու: Եթե դուք օգտագործում եք այլ բան, քան տնային օգնականը, ինքներդ պետք է հարմարեցնեք իրերը:

Դուք պետք է կարողանաք օգտագործել Nodemcu- ն Arduino IDE- ում, քանի որ ես դրան չեմ անդրադառնա այստեղ

Քայլ 2: Հեռակառավարման ազդանշան

Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան
Հեռակա ազդանշան

Ինչպես ես դա արեցի, դա հեռակառավարման ազդանշանի պատճենումն էր, որը ես չեմ օգտագործում ներդաշնակության մեջ:

Ես օգտագործել եմ Panasonic հեռուստատեսության TXL32C3E մոդելի հեռակառավարման վահանակը, քանի որ դա չի խանգարում իմ առաջին հարկի իմ սարքավորումներին: Դա այն հեռուստացույցն է, որը ես ունեմ վերևում:

Եթե ներդաշնակություն չեք օգտագործում, կարող եք բաց թողնել սա:

Այսպիսով, ազդանշանը գտնելու համար ես օգտագործեցի այս ուրվագիծը.

/ * * IRremoteESP8266: IRrecvDumpV2 - IR կոդերի հետ IR կոդերի մանրամասների * IR IR դետեկտոր/դեմոդուլատոր պետք է միացված լինի մուտքային RECV_PIN- ին: * * Հեղինակային իրավունք 2009 Քեն Շիրիֆ, https://arcfn.com * Հեղինակային իրավունք 2017 Դեյվիդ Կոնրան * * Շրջանային սխեմայի օրինակ ՝ * https://arcfn.com * * Փոփոխություններ. * Տարբերակ 0.3 Նոյեմբեր, 2017 * - Աջակցություն օդորակման համար որոշ պրոտոկոլների վերծանում: * Տարբերակ 0.2, 2017 թ. Ապրիլ * - Վերծանեք տվյալների պատճենից, որպեսզի մենք կարողանանք ավելի արագ գրավել ՝ դրանով իսկ նվազեցնելով սխալների հավանականությունը: * Հիմնված է Քեն Շիրիֆի IrsendDemo տարբերակի վրա, 0.1 հուլիսի, 2009 թ., */

#ifndef UNIT_TEST

#ներառել #ավարտել #ներառել #ներառել #ներառել #եթե ՏԵECԵԿԱԴՐԵԼ_ԱՀ #ներառել #ներառել #ներառել #ներառել #ներառել #ավարտել // ՏԵԽԱՆԱԴՐԵԼ_ՀԱԿ

// ==================== սկիզբը TUNEABLE PARAMETERS =====================

// IR դետեկտոր/դեմոդուլատոր միացված է GPIO կապին 14 // օրինակ. D5 NodeMCU տախտակի վրա: #սահմանեք RECV_PIN 14

// Սերիական կապի բաուդ փոխարժեքը:

// այսինքն, կարգավիճակի հաղորդագրությունը կուղարկվի համակարգչին այս արագությամբ: // Փորձեք խուսափել 9600 -ի նման դանդաղ արագություններից, քանի որ բաց կթողնեք հաղորդագրությունները և // այլ խնդիրներ կառաջացնեք: Խորհուրդ է տրվում 115200 (կամ ավելի արագ): // EԱՆՈԹՈԹՅՈՆ. Համոզվեք, որ ձեր սերիական մոնիտորը նույն արագության վրա եք դրել: #սահմանեք BAUD_RATE 115200

// Քանի որ այս ծրագիրը հատուկ նշանակության գրավում/ապակոդավորում է, եկեք օգտագործենք ավելի մեծ

// քան սովորական բուֆերը, որպեսզի մենք կարողանանք կարգավորել օդորակիչի հեռակառավարման կոդերը: #սահմանել CAPTURE_BUFFER_SIZE 1024

// TIMEOUT- ը թիվն է միլիարդ վայրկյան ոչ ավել տվյալների նախքան հաշվի առնենք ա

// հաղորդագրությունն ավարտվեց: // Այս պարամետրը հետաքրքիր փոխզիջում է: Որքան երկար է ընդմիջումը, այնքան // բարդ հաղորդագրություն կարող է այն գրավել: օրինակ Սարքի որոշ արձանագրություններ արագորեն հաջորդաբար կուղարկեն // բազմաթիվ հաղորդագրությունների փաթեթներ, օրինակ ՝ օդորակիչի հեռակառավարման վահանակը: // Air Coniditioner արձանագրությունները հաճախ ունենում են զգալի բաց (20-40+ms) // փաթեթների միջև: // Մեծ ընդմիջման արժեքի բացասական կողմը շատ ավելի քիչ բարդ արձանագրություններ են // ուղարկել բազմաթիվ հաղորդագրություններ, երբ հեռակառավարման կոճակը պահված է: // դրանց միջև եղած բացը հաճախ նաև 20+ms է: Սա կարող է հանգեցնել նրան, որ հում տվյալները 2-3+ // անգամ ավելի մեծ լինեն, քան անհրաժեշտ է, քանի որ այն գրավել է 2-3+ հաղորդագրություն մեկ // գրավման մեջ: Timeամկետի ցածր արժեք սահմանելը կարող է լուծել դա: // Այսպիսով, ձեր օգտագործման կոնկրետ գործի համար TIMEOUT- ի լավագույն արժեքը // բավականին նրբերանգ է: Հաջողություն և երջանիկ որս: // ՆՇՈՄ. Մի գերազանցեք MAX_TIMEOUT_MS- ը: Սովորաբար 130 մմ #if DECODE_AC #սահմանել IMEԱՄԱՆԱԿԸ 50U // Որոշ օդորակման համակարգեր ունեն 40 մլն ֆունտ ստեռլինգ իրենց արձանագրությունների բացեր: // օրինակ Kelvinator // Այս մեծ արժեքը կարող է կուլ տալ որոշ արձանագրությունների կրկնություններ #endif // DECODE_AC // այլընտրանքներ. // #սահմանել TIMEOUT MAX_TIMEOUT_MS // Սա այն կդարձնի մեր ներկայումս թույլատրված // առավելագույնը: Այս բարձր արժեքները խնդրահարույց են // որովհետև դա մոտավորապես բնորոշ սահման է // որտեղ կրկնվում են հաղորդագրությունների մեծ մասը: // օրինակ Այն կդադարեցնի հաղորդագրության վերծանումը և // կսկսի այն ուղարկել սերիալ ճշգրիտ // այն ժամանակ, երբ հավանական է, որ հաջորդ հաղորդագրությունը // կփոխանցվի և կարող է բաց թողնել այն:

// Սահմանեք ամենափոքր չափի «ԱՆKԱՆՈԹ» հաղորդագրությունների փաթեթները, որոնք մենք իրականում մտածում ենք:

// Այս արժեքը օգնում է նվազեցնել IR ֆոնի կեղծ-դրական հայտնաբերման արագությունը // աղմուկը որպես իրական հաղորդագրություններ: Ֆոնային IR աղմուկի հայտնաբերման հավանականությունը // որպես հաղորդագրություն մեծանում է TIMEOUT արժեքի երկարությամբ: (Տես վերը) // Այս հաղորդագրությունը չափազանց մեծ դնելու բացասական կողմն այն է, որ կարող եք բաց թողնել որոշ վավեր // կարճ հաղորդագրություններ այն արձանագրությունների համար, որոնք այս գրադարանը դեռ չի վերծանում: // // Ավելի բարձր դարձրեք, եթե ստանաք բազմաթիվ պատահական կարճ ԱՆՀԱՅՏ հաղորդագրություններ, երբ ոչինչ // չպետք է ուղարկի հաղորդագրություն: // Տեղադրեք ավելի ցածր, եթե վստահ եք, որ ձեր կարգավորումը աշխատում է, բայց այն չի տեսնում հաղորդագրություններ // ձեր սարքից: (օրինակ ՝ IR այլ հեռակառավարման վահանակներ են աշխատում): // EԱՆՈԹՈ:ԹՅՈՆ. Նշեք այս արժեքը շատ բարձր `արդյունավետորեն ԱՆՀԱՅՏ հայտնաբերումը անջատելու համար: #սահմանել MIN_UNKNOWN_SIZE 12 // =========================

// Օգտագործեք միացրեք պահելու բուֆերային հնարավորությունը ՝ գրավման ավելի ամբողջական ծածկույթի համար:

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

decode_results results; // Արդյունքները պահելու տեղ

// Displayույց տվեք օդորակման հաղորդագրության մարդկային ընթերցվող վիճակը, եթե կարող ենք:

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (արդյունքներ-> վիճակ); նկարագրություն = ac.toString (); } #endif // DECODE_DAIKIN #եթե DECODE_FUJITSU_AC եթե (արդյունքներ-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (արդյունքներ-> վիճակ, արդյունքներ-> բիթեր / 8); նկարագրություն = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (արդյունքներ-> վիճակ); նկարագրություն = ac.toString (); } #endif // DECODE_KELVINATOR #եթե DECODE_TOSHIBA_AC եթե (արդյունքներ-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (արդյունքներ-> վիճակ); նկարագրություն = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (արդյունքներ-> արժեք); // Midea- ն պետության փոխարեն օգտագործում է արժեք: նկարագրություն = ac.toString (); } #endif // DECODE_MIDEA // Եթե մենք ստացել ենք մարդու համար ընթերցվող հաղորդագրության նկարագրություն, ցուցադրեք այն: եթե (նկարագրություն! = "") Serial.println ("Mesg Desc.:" + նկարագրություն); }

// Կոդի հատվածը գործարկվում է միայն մեկ անգամ գործարկման ժամանակ:

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); ուշացում (500); // Մի փոքր սպասեք, մինչև սերիական կապը հաստատվի:

#եթե ՏԵ DԱԴՐԵԼ_ՀԱՇ

// Անտեսել հաղորդագրությունները նվազագույնից ցածր կամ միացված իմպուլսներով: irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #ավարտի // Սկսեք ընդունիչը}

// Կոդի կրկնվող բաժինը

// void loop () {// Ստուգեք, արդյոք IR կոդը ստացվել է: if (irrecv.decode (& results))) {// Displayուցադրել կոպիտ ժամանակային նշան: uint32_t այժմ = millis (); Serial.printf ("estամկետային նշան ՝ %06u. %03u / n", այժմ / 1000, այժմ %1000); if (results.overflow) Serial.printf ("ARԳՈՇԱՈՄ. IR կոդը չափազանց մեծ է բուֆերի համար (> = %d)." "Այս արդյունքին չպետք է վստահել, մինչև այն չլուծվի:" "Խմբագրել և մեծացնել CAPTURE_BUFFER_SIZE- ը: / n ", CAPTURE_BUFFER_SIZE); // Displayուցադրել մեր գտածի հիմնական ելքը: Serial.print (resultToHumanReadableBasic (& արդյունքներ)); dumpACInfo (& արդյունքներ); // Displayուցադրել ցանկացած լրացուցիչ օդորակման տեղեկատվություն, եթե այն ունենք: եկամտաբերություն (); // Կերակրեք WDT- ն, քանի որ տեքստի ելքը կարող է տևել որոշ ժամանակ:

// Displayուցադրել գրադարանի տարբերակը, որի հետ հաղորդագրությունը գրված է:

Serial.print («Գրադարան. V»); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// Արդյունքի RAW ժամանակային տեղեկատվության ելք:

Serial.println (resultToTimingInfo (& արդյունքներ)); եկամտաբերություն (); // Կերակրեք WDT (կրկին)

// Արդյունքները թողնել որպես սկզբնական կոդ

Serial.println (resultToSourceCode (& արդյունքներ)); Serial.println (""); // Գրառումների եկամտաբերության միջև դատարկ գիծ (); // Կերակրեք WDT (կրկին)}}

Երբ այս էսքիզը վերբեռնվի և աշխատի սերիական մոնիտորով, այն դուրս կբերի կոճակի սեղմման ծածկագիրը (տես նկարը)

Գրեք այն ծածկագրերը, որոնք ցանկանում եք օգտագործել հետագայում օգտագործելու համար: Excel- ի միջոցով նշեցի, թե ինչ եմ ստացել կոճակների համար, որոնք ցանկանում էի օգտագործել (տես նկարը)

Ես խմբագրեցի իմ Netflix գործունեության կոճակները ՝ Panasonic հեռակառավարման վահանակից դադար ուղարկելու համար: (տես նկարը)

Քայլ 3. Nodered- ին ուղարկելու կոդը գրելը

Nodered- ին ուղարկելու կոդը գրելը
Nodered- ին ուղարկելու կոդը գրելը

#ifndef UNIT_TEST #include #endif #include

#ներառում

#ներառում

#ներառում

#ներառում

#ներառում

const char* ssid = ""; // Մուտքագրեք SSID այստեղ char* գաղտնաբառ = ""; // Մուտքագրեք գաղտնաբառ այստեղ const char *host = ""; // IP հասցե #սահմանել ՕԳՏԱԳՈՐՄԱՆ ՍԵՐԻԱ ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results results; void setup () {irrecv.enableIRIn (); // Գործարկեք ընդունիչը USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (ճշմարիտ); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

համար (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] ՍՊԱՍԵԼ %d… / n", t); USE_SERIAL.fush (); ուշացում (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, գաղտնաբառ); } void loop () {if (irrecv.decode (& results))) {

// Փոխեք այս ազդանշանի արժեքը ձեր ստացածի համար

if (results.value == 0x40040D00606D) {USE_SERIAL.println («դադար ազդանշանը ստացվել է»); wifisend (դադար); ուշացում (1000);

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

USE_SERIAL.println («նախորդ»);

wifisend («նախորդ»); ուշացում (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"); // կարգավորել ողբերգության սերվերը և URL- ը http.begin ("https:// [օգտվող]: [pass]@[ip]: [port]/chromecastpause? data =" + տվյալներ); USE_SERIAL.print ("[HTTP] GET… / n"); // սկսել կապը և ուղարկել HTTP վերնագիր int httpCode = http. GET (); // httpCode- ը բացասական կլինի սխալի դեպքում, եթե (httpCode> 0) {// HTTP վերնագիրն ուղարկվել է, իսկ Server- ի պատասխանի վերնագիրը մշակվել է USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // ֆայլը գտնվել է սերվերում

եթե (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (բեռնվածություն); }} else {USE_SERIAL.printf ("[HTTP] GET… ձախողվեց, սխալ ՝ %s / n", http.errorToString (httpCode).c_str ()); } http.end (); ուշացում (100); }}

Սա այն կոդն է, որն օգտագործել եմ իմ nodemcu- ում: Ձեզ հարկավոր է տեղադրել այդ գրադարանները:

Դուք կարող եք փորձարկել սերիական մոնիտորի միջոցով և սեղմել կոդի մեջ ավելացված հեռակա կոճակները ՝ պատասխանը տեսնելու համար:

Տողում `

http.begin ("https:// [օգտվող]: [pass]@[ip]: [port]/chromecastpause? data =" + տվյալներ);

Դուք պետք է փոխեք [օգտվողին] ձեր օգտվողին և այլն: ԱՌԱՆ փակագծերի: փակագծերն այնտեղ են `ցույց տալու, թե ինչպես կարելի է փոխել կախարդի դաշտերը:

Այդ գիծը նույնպես չի աշխատի, քանի դեռ մենք մեր հոսքը կարգաբերել ենք nodered- ով:

Քայլ 4: Ստեղծեք հոսք Nodered- ում

Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում
Ստեղծելով հոսք Nodered- ում

Ինչպես նշվեց սկզբում, ես օգտագործում եմ hass.io նոդերով: Եթե այլ կարգավորում եք գործարկում, ապա ձեզ հարկավոր է այն տարբերել: Պատկերում կարող եք տեսնել, որ կոճակը սեղմելիս այն ցուցադրվում է վրիպազերծման պատուհանում…

Փոփոխության բեռնվածքի հանգույցը, հավանաբար, կարող էր բաց թողնվել, եթե ես այլ տվյալներ ընտրեի = նախորդ քայլին: Անջատիչ հանգույցը, որն ես օգտագործում եմ, շատ ավելի մեծ է, քան ընդմիջումը, բայց դա հենց այնպես է, որ ես կարողանամ ավելի շատ ազդանշաններ ավելացնել ՝ ռադիոկայանների համար chromecast օգտագործելու համար և այլն:

Պարզապես խաղալու դադար տալու համար կարող եք օգտագործել մյուս նկարի հոսքը:

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": «ստանալ», «վերբեռնել» ՝ կեղծ, «swaggerDoc» ՝ «», «x» ՝ 133, «y» ՝ 98, «լարեր» ՝

Ես հեռացրի անունից userpass և url հասցեից, որպեսզի կարողանաք դրանք խմբագրել:

ավելացնել անջատիչ հանգույց, եթե ցանկանում եք արձագանքել ոչ միայն դադարին (տե՛ս նկարը, օրինակ)

Դադարի օգտագործման տնային օգնականի հանգույցում.

անուն: խաղալ դադար chromecastdomain: media_player erառայություն: media_play_pausedata: {"unit_id": "media_player. [Ձեր chromecast այստեղ]"}

հաջորդ ուղու համար պարզապես պատճենեք այդ հանգույցը և խմբագրեք ծառայությունը ՝ media_next_track և անունը ՝ next chromecast

Քայլ 5. Ընտրովի Alexa- ն դադարեցրեք Chromecast- ը

Լրացուցիչ ավելացնել alexa հրաման chromecast- ի դադարեցման համար.

Այստեղ կան տարբերակներ: Դուք կարող եք կատարել մեկ Alexa հանգույց, որը կոչվում է դադար chromecast, որը դադարեցնում է chromecast- ը, կամ կարող եք սարքել մեկը, որը կոչվում է pause tv, որը ստուգում է ներդաշնակության ընթացիկ գործունեությունը և դադար `կախված դրանից:

Սա ավելի ուշ կավելացնեմ այստեղ..

Խորհուրդ ենք տալիս: