Talaan ng mga Nilalaman:

I-pause ang Chromcast Gamit ang isang Remote Control: 5 Hakbang
I-pause ang Chromcast Gamit ang isang Remote Control: 5 Hakbang

Video: I-pause ang Chromcast Gamit ang isang Remote Control: 5 Hakbang

Video: I-pause ang Chromcast Gamit ang isang Remote Control: 5 Hakbang
Video: Use your phone as your Google TV remote | Google TV 2024, Nobyembre
Anonim
Image
Image
Equiptment
Equiptment

Mayroon akong isang remote na pagkakaayos ng Logitech at patakbuhin ang Katulong sa bahay sa isang raspberry pi.

Nais kong ma-pause ang chromecast mula sa aking remote, ngunit mayroon akong isang lumang tv na hindi sinusuportahan ito sa pamamagitan ng HDMI. Ang Aking Idea noon ay gagamit ng isang NodeMcu upang mahuli ang ir signal at i-pause.

Kung hindi mo ito magawang magtrabaho o may mga katanungan mangyaring magkomento sa ibaba

Hakbang 1: Equiptment

Equiptment
Equiptment
Equiptment
Equiptment

Kailangan ng kagamitan:

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

Ir reciver (tulad ng ex na ito:

mga dupont wire

Micro usb cable (power nodemcu)

Gumagamit ako ng Logitech Harmony -hub

Para sa aking diskarte Kailangan mo ng isang Raspberry pi na may hass.io Naka-install at Nodered. Hindi ako pupunta sa pagse-set up ng mga bagay na homeassistant dito. Kung gumamit ka ng ibang bagay kaysa sa homeassistant kailangan mong iakma ang iyong sarili sa iyong bagay.

Kailangan mong magamit ang Nodemcu sa Arduino IDE tulad ng hindi ko napupunta dito

Hakbang 2: Remote Signal

Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal

Ang paraan na ginawa ko ito ay upang makopya ang isang senyas mula sa isang remote na hindi ko ginagamit sa remote na pagkakaisa.

Gumamit ako ng isang remote para sa modelo ng panasonic tv TXL32C3E na hindi makagambala sa aking kagamitan sa aking unang palapag. Iyon ang isang tv mayroon ako sa itaas.

Kung hindi mo gagamitin ang pagkakaisa maaari mo itong laktawan.

Kaya para sa paghahanap ng signal ginamit ko ang scetch na ito:

/ * * IRremoteESP8266: IRrecvDumpV2 - mga detalye ng pagtapon ng mga IR code na may IRrecv * Ang isang IR detector / demodulator ay dapat na konektado sa input na RecV_PIN. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Halimbawa ng diagram ng circuit: * https://arcfn.com * * Mga Pagbabago: * Bersyon 0.3 Nobyembre, 2017 * - Suporta para sa A / C pag-decode para sa ilang mga protokol. * Bersyon 0.2 Abril, 2017 * - Mag-decode mula sa isang kopya ng data upang masimulan namin ang pagkuha ng mas mabilis sa gayon * mabawasan ang posibilidad ng mga maling pagkakamali. * Batay sa IrsendDemo Bersyon ni Ken Shirriff 0.1 Hulyo, 2009, * /

#ifndef UNIT_TEST

#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC

// =================== panimula ng TUNEABLE PARAMETERS ====================

// Ang isang IR detector / demodulator ay konektado sa GPIO pin 14 // hal. D5 sa isang board ng NodeMCU. # tukuyin ang RECV_PIN 14

// Ang Serial connection baud rate.

// ibig sabihin, ipapadala ang mensahe sa katayuan sa PC sa rate ng baud na ito. // Subukang iwasan ang mabagal na bilis tulad ng 9600, dahil makaligtaan mo ang mga mensahe at // maging sanhi ng iba pang mga problema. Inirerekumenda ang 115200 (o mas mabilis). // TANDAAN: Tiyaking itinakda mo ang iyong Serial Monitor sa parehong bilis. # tukuyin ang BAUD_RATE 115200

// Dahil ang program na ito ay isang espesyal na layunin ng pagkuha / decoder, gamitin natin ang isang mas malaki

// kaysa sa normal na buffer upang mahawakan namin ang mga remote code ng Air Conditioner. # tukuyin ang CAPTURE_BUFFER_SIZE 1024

// TIMEOUT ay ang Nr. ng milli-Seconds ng wala nang data bago isaalang-alang namin ang a

// message natapos. // Ang parameter na ito ay isang nakawiwiling trade-off. Kung mas matagal ang timeout, mas // kumplikado ang isang mensahe na maaari nitong makuha. hal. Ang ilang mga protokol ng aparato ay magpapadala ng // maraming mga packet ng mensahe nang mabilis, tulad ng mga remote na Air Conditioner. // Ang mga Air Coniditioner protocol ay madalas na may isang malaki na puwang (20-40 + ms) sa pagitan ng // packet. // Ang downside ng isang malaking halaga ng pag-timeout ay maraming hindi gaanong kumplikadong mga protocol // magpadala ng maraming mga mensahe kapag ang pindutan ng remote ay pinigilan. Ang agwat sa pagitan ng // ang mga ito ay madalas na humigit-kumulang 20 + ms. Maaari itong magresulta sa hilaw na data na 2-3 + // beses na mas malaki kaysa kinakailangan dahil nakakuha ito ng 2-3 + mensahe sa isang // capture. Ang paglalagay ng isang mababang halaga ng pag-timeout ay maaaring lutasin ito. // Kaya, ang pagpili ng pinakamahusay na halaga ng TIMEOUT para sa iyong partikular na kaso ay ginagamit // ay nuanced. Good luck at masaya pangangaso. // TANDAAN: Huwag lumampas sa MAX_TIMEOUT_MS. Karaniwan 130ms. #kung DECODE_AC # tukuyin TIMEOUT 50U // Ang ilang mga unit ng A / C ay may mga puwang sa kanilang mga protokol na ~ 40ms. // hal. Kelvinator // Isang halagang maaaring malunok ng malalaking ito ang mga paulit-ulit na ilang mga protocol #else // DECODE_AC #define TIMEOUT 15U // Suits most message, habang hindi nilulunok ang maraming inuulit. #endif // DECODE_AC // Mga kahalili: // #define TIMEOUT 90U // Nag-aakma ng mga mensahe na may malaking puwang tulad ng XMP-1 at ilang mga yunit ng aircon //, ngunit maaaring aksidenteng lunukin ang paulit-ulit na mga mensahe // sa rawData na output. // #define TIMEOUT MAX_TIMEOUT_MS // Itatakda ito sa aming kasalukuyang pinapayagan // maximum. Ang mga halagang ito ay may problemang // dahil ito ay halos ang tipikal na hangganan // kung saan inuulit ang karamihan sa mga mensahe. // hal. Ititigil nito ang pag-decode ng isang mensahe at // simulang ipadala ito sa serial nang eksakto // ang oras kung kailan ang susunod na mensahe ay malamang // na mailipat, at maaaring makaligtaan ito.

// Itakda ang pinakamaliit na laki ng "UNKNOWN" na mga packet ng mensahe na talagang pinapahalagahan namin.

// Ang halagang ito ay tumutulong na mabawasan ang maling positibong rate ng pagtuklas ng IR background // ingay bilang mga tunay na mensahe. Ang mga pagkakataon ng pag-ingay sa background ng IR na napansin // bilang isang mensahe ay nagdaragdag sa haba ng halaga ng TIMEOUT. (Tingnan sa itaas) // Ang kabiguan ng pagtatakda ng labis na mensahe na ito ay maaari mong makaligtaan ang ilang wastong // maikling mensahe para sa mga protokol na hindi pa nai-decode ng library na ito. // // Itakda ang mas mataas kung nakakakuha ka ng maraming mga random na maikling hindi NILALAMAN na mensahe kung wala // dapat magpadala ng isang mensahe. // Itakda ang mas mababa kung sigurado kang gumagana ang iyong pag-set up, ngunit hindi ito nakakakita ng mga mensahe // mula sa iyong aparato. (hal. Iba pang gumagana ang IR remotes.) // TANDAAN: Itakda ang halagang ito nang napakataas upang mabisang ma-off ang hindi kilalang pagtuklas. #define MIN_UNKNOWN_SIZE 12 // =================== end of TUNEABLE PARAMETERS ====================

// Use i-on ang tampok na i-save ang buffer para sa mas kumpletong saklaw ng pagkuha.

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

mga resulta sa pag-decode_resulta; // Saanman upang maiimbak ang mga resulta

// Ipakita ang nabasang kalagayan ng tao ng isang mensahe na A / C kung maaari namin.

void dumpACInfo (decode_results * mga resulta) {String description = ""; #kung DECODE_DAIKIN kung (mga resulta-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (mga resulta-> estado); paglalarawan = ac.toString (); } #endif // DECODE_DAIKIN #kung DECODE_FUJITSU_AC kung (mga resulta-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (resulta-> estado, resulta-> bits / 8); paglalarawan = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR kung (mga resulta-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (mga resulta-> estado); paglalarawan = ac.toString (); } #endif // DECODE_KELVINATOR #kung DECODE_TOSHIBA_AC kung (mga resulta-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (mga resulta-> estado); paglalarawan = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA kung (mga resulta-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (mga resulta-> halaga); // Midea ay gumagamit ng halaga sa halip na estado. paglalarawan = ac.toString (); } #endif // DECODE_MIDEA // Kung nakakuha kami ng isang nababasa ng tao na paglalarawan ng mensahe, ipakita ito. kung (paglalarawan! = "") Serial.println ("Mesg Desc.:" + paglalarawan); }

// Ang seksyon ng code ay tumatakbo nang isang beses lamang sa pagsisimula.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); pagkaantala (500); // Maghintay ng kaunti para maitaguyod ang koneksyon sa serial.

#kung DECODE_HASH

// Huwag pansinin ang mga mensahe na may mas mababa sa minimum sa o off na mga pulso. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Start the receiver}

// Ang paulit-ulit na seksyon ng code

// void loop () {// Suriin kung natanggap ang IR code. kung (irrecv.decode (& mga resulta)) {// Magpakita ng isang crude timestamp. uint32_t ngayon = millis (); Serial.printf ("Timestamp:% 06u.% 03u / n", ngayon / 1000, ngayon% 1000); kung (results.overflow) Serial.printf ("WARNING: Ang IR code ay masyadong malaki para sa buffer (> =% d)." "Ang resulta na ito ay hindi dapat pagkatiwalaan hanggang malutas ito." "I-edit at dagdagan ang CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Ipakita ang pangunahing output ng nakita namin. Serial.print (resultaToHumanReadableBasic (& mga resulta)); dumpACInfo (& mga resulta); // Ipakita ang anumang karagdagang impormasyon ng A / C kung mayroon kami nito. ani (); // Pakainin ang WDT dahil ang output ng teksto ay maaaring magtagal upang mai-print.

// Ipakita ang bersyon ng library na nakuha ang mensahe.

Serial.print ("Library: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// Output RAW na impormasyon sa tiyempo ng resulta.

Serial.println (resultaToTimingInfo (& mga resulta)); ani (); // Pakainin ang WDT (muli)

// Output ang mga resulta bilang source code

Serial.println (resultaToSourceCode (& mga resulta)); Serial.println (""); // Blangko na linya sa pagitan ng mga ani ng ani (); // Pakainin ang WDT (muli)}}

Kapag ang scetch na ito ay na-upload at tumatakbo sa serial monitor buksan ito ay maglalabas ng code para sa pindutan ng pindutan (tingnan ang larawan)

Isulat ang mga code na nais mong gamitin para magamit sa paglaon. Gumamit ako ng excel upang tandaan kung ano ang nakuha ko para sa mga pindutan na nais kong gamitin (tingnan ang larawan)

Na-edit ko ang mga pindutan sa aking aktibidad sa Netflix upang Magpadala ng signal ng pag-pause mula sa remote ng panasonic.. (tingnan ang larawan)

Hakbang 3: Pagsulat ng Code para sa Pagpapadala sa Nodered

Pagsulat ng Code para sa Pagpapadala sa Nodered
Pagsulat ng Code para sa Pagpapadala sa Nodered

#ifndef UNIT_TEST # isama ang #endif #include

# isama

# isama

# isama

# isama

# isama

const char * ssid = ""; // Enter SSID hereconst char * password = ""; // Enter Password here const char * host = ""; // Ip addresse #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); mga resulta sa pag-decode_resulta; void setup () {irrecv.enableIRIn (); // Start the receiver USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (totoo); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

para sa (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] WAIT% d… / n", t); USE_SERIAL.flush (); pagkaantala (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, password); } void loop () {if (irrecv.decode (& mga resulta)) {

// Baguhin ang halagang ito ng signal para sa isang nakuha mo

kung (results.value == 0x40040D00606D) {USE_SERIAL.println ("pause Signal recieved"); wifisend (i-pause); pagkaantala (1000);

} kung (mga resulta.value == 0x400401007273) {

USE_SERIAL.println ("nakaraang");

wifisend ("prev"); pagkaantala (1000); } kung (results.value == 0x40040100F2F3) {USE_SERIAL.println ("susunod"); wifisend ("susunod"); pagkaantala (1000); }

irrecv.resume (); // Natanggap ang susunod na halaga} pagkaantala (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNected)) {HTTPClient http; USE_SERIAL.print ("[HTTP] magsimula… / n"); // configure ang server ng trahedya at url http.begin ("https:// [user]: [pass] @ [ip]: [port] / chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET… / n"); // start connection and send HTTP header int httpCode = http. GET (); // httpCode ay magiging negatibo sa error kung (httpCode> 0) {// HTTP header ay naipadala at ang header ng tugon ng server ay hinawakan ang USE_SERIAL.printf ("[HTTP] GET… code:% d / n", // file na natagpuan sa server

kung (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (payload); }} iba pa {USE_SERIAL.printf ("[HTTP] GET… failed, error:% s / n", http.errorToString (httpCode).c_str ()); } http.end (); pagkaantala (100); }}

Ito ang ginamit kong code sa aking nodemcu. Kailangan mong mai-install ang mga aklatan na iyon.

Maaari mong subukan ang paggamit ng serial monitor at pindutin ang mga remote na pindutan na idinagdag mo sa code upang makita ang tugon..

Sa linya:

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

Kailangan mong palitan ang [gumagamit] sa iyong gumagamit at iba pa. WALANG mga braket. naroroon ang mga braket upang ipakita ang mga patlang ng bruha upang mabago.

Ang linya na iyon ay hindi rin gagana hanggang sa ma-set up namin ang aming daloy sa nodered.

Hakbang 4: Lumilikha ng isang Daloy sa Nodered

Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered
Lumilikha ng Daloy sa Nodered

Tulad ng nabanggit sa simula ay gumagamit ako ng hass.io na may nodered. Kung nagpapatakbo ka ng ibang pag-setup kakailanganin mong gawin ito naiiba! Maaari mong makita sa imahe na kapag pinindot ang isang pindutan ay ipinapakita sa window ng pag-debug …

Ang node ng pagbabago ng payload ay maaaring nalaktawan kung pumili ako ng ibang bagay sa data na iyon = sa nakaraang hakbang. Ang switch node na ginagamit ko ay mas malaki kaysa sa pag-pause lamang ngunit iyan upang makapagdagdag ako ng mas maraming signal upang magamit ang chromecast para sa mga istasyon ng radyo atbp.

Para lamang sa pag-play ng pause maaari mong gamitin ang daloy sa iba pang larawan.

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

Inalis ko ang namepass ng user at url mula rito kaya maaaring kailanganin mong i-edit iyon.

magdagdag ng isang switch node kung nais mong tumugon sa higit pa sa pag-pause (tingnan ang larawan halimbawa)

Sa node ng katulong sa bahay para sa paggamit ng pag-pause:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [your chromecast here]"}

para sa susunod na track kopyahin lamang ang node at i-edit ang serbisyo sa: media_next_track at pangalanan sa: susunod na chromecast

Hakbang 5: Opsyonal na Alexa I-pause ang Chromecast

Opsyonal na magdagdag ng Alexa utos para sa pag-pause chromecast:

Mayroong mga pagpipilian dito.. Maaari kang gumawa ng isang Alexa nnode na tinatawag na pause chromecast na nag-pause sa chromecast, o maaari kang gumawa ng tinatawag na pause tv na sumusuri sa kasalukuyang aktibidad ng pagkakaisa at pag-pause depende sa na.

Idadagdag ko ito dito mamaya..

Inirerekumendang: