Isi kandungan:

Jeda Chromcast Dengan Alat Jauh: 5 Langkah
Jeda Chromcast Dengan Alat Jauh: 5 Langkah

Video: Jeda Chromcast Dengan Alat Jauh: 5 Langkah

Video: Jeda Chromcast Dengan Alat Jauh: 5 Langkah
Video: Chromecast with Google TV Indonesia (FULL WALKTHROUGH) 2024, Julai
Anonim
Image
Image
Perolehan
Perolehan

Saya mempunyai alat kawalan jauh Logitech harm dan menjalankan pembantu rumah pada pi raspberry.

Saya mahu menjeda Chromecast dari alat kawalan jauh saya, tetapi saya mempunyai tv lama yang tidak menyokongnya melalui HDMI. Idea saya ketika itu menggunakan NodeMcu untuk menangkap isyarat ir dan berhenti.

Sekiranya anda tidak dapat membuatnya berfungsi atau ada pertanyaan, sila komen di bawah

Langkah 1: Persediaan

Perolehan
Perolehan
Perolehan
Perolehan

Peralatan yang diperlukan:

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

Penerima saya (seperti ini:

wayar dupont

Kabel usb mikro (nodemcu kuasa)

Saya menggunakan Logitech Harmony -hub

Untuk pendekatan saya, Anda Memerlukan Raspberry pi dengan hass.io Dipasang dan Nodered. Saya tidak akan menyiapkan barang-barang rumah di sini. Sekiranya anda menggunakan sesuatu selain dari rumah, anda perlu menyesuaikan barang-barang anda sendiri.

Anda perlu dapat menggunakan Nodemcu di Arduino IDE kerana saya tidak akan menerimanya di sini

Langkah 2: Isyarat Jauh

Isyarat Jauh
Isyarat Jauh
Isyarat Jauh
Isyarat Jauh
Isyarat Jauh
Isyarat Jauh
Isyarat Jauh
Isyarat Jauh

Cara saya melakukannya adalah dengan menyalin isyarat dari alat kawalan jauh yang tidak saya gunakan menjadi alat kawalan jauh harmoni.

Saya menggunakan alat kawalan jauh untuk model tv panasonic TXL32C3E kerana tidak mengganggu peralatan saya di tingkat pertama saya. Itu tv yang saya ada di tingkat atas.

Sekiranya anda tidak menggunakan keharmonian, anda boleh melangkau ini.

Oleh itu, untuk mencari isyarat saya menggunakan sketsa ini:

/ * * IRremoteESP8266: IRrecvDumpV2 - membuang butiran kod IR dengan IRrecv * Pengesan / demodulator IR mesti disambungkan ke input RECV_PIN. * * Hak Cipta 2009 Ken Shirriff, https://arcfn.com * Hak Cipta 2017 David Conran * * Contoh rajah litar: * https://arcfn.com * * Perubahan: * Versi 0.3 November, 2017 * - Sokongan untuk A / C penyahkodan untuk beberapa protcols. * Versi 0.2 April 2017 * - Menyahkod dari salinan data sehingga kita dapat mulai menangkap lebih cepat sehingga * mengurangkan kemungkinan salah rakapan. * Berdasarkan Ken Shirriff's IrsendDemo Versi 0.1 Julai 2009, * /

#ifndef UNIT_TEST

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

// ==================== permulaan PARAMETER TUNEABLE ====================

// Pengesan / demodulator IR disambungkan ke GPIO pin 14 // mis. D5 pada papan NodeMCU. #tentukan RECV_PIN 14

// Kadar baud sambungan bersiri.

// iaitu mesej Status akan dihantar ke PC dengan kadar baud ini. // Cuba elakkan kelajuan perlahan seperti 9600, kerana anda akan terlepas mesej dan // menyebabkan masalah lain. 115200 (atau lebih pantas) disyorkan. // CATATAN: Pastikan anda menetapkan Monitor Serial anda pada kelajuan yang sama. #tentukan BAUD_RATE 115200

// Oleh kerana program ini adalah penangkapan / penyahkod tujuan khas, mari kita gunakan yang lebih besar

// daripada penyangga biasa sehingga kita dapat menangani kod jauh Penyaman Udara. #tentukan CAPTURE_BUFFER_SIZE 1024

// TIMEOUT adalah Nr. mili-Detik tidak ada lagi data sebelum kita mempertimbangkan a

// mesej berakhir. // Parameter ini adalah pertukaran yang menarik. Semakin lama masa tamat, semakin kompleks mesej yang dapat ditangkapnya. cth. Beberapa protokol peranti akan menghantar // banyak paket mesej berturut-turut, seperti alat kawalan jauh Air Conditioner. // Protokol Air Coniditioner sering mempunyai jurang yang cukup besar (20-40 + ms) antara // paket. // Kelemahan nilai timeout yang besar adalah banyak protokol yang kurang rumit // menghantar banyak mesej apabila butang alat kawalan jauh ditahan. Jurang antara // mereka sering juga sekitar 20 + ms. Ini dapat mengakibatkan data mentah menjadi 2-3 + // kali lebih besar dari yang diperlukan kerana telah menangkap 2-3 + pesan dalam satu // tangkapan. Menetapkan nilai masa tamat yang rendah dapat menyelesaikannya. // Oleh itu, memilih nilai TIMEOUT yang terbaik untuk penggunaan kes tertentu // cukup bernuansa. Semoga berjaya dan selamat memburu. // CATATAN: Jangan melebihi MAX_TIMEOUT_MS. Lazimnya 130ms. #jika DECODE_AC # tentukan TIMEOUT 50U // Beberapa unit A / C mempunyai jurang dalam protokolnya ~ 40ms. // cth. Kelvinator // Nilai sebesar ini dapat menelan berulang beberapa protokol #else // DECODE_AC #define TIMEOUT 15U // Sesuai dengan kebanyakan mesej, sementara tidak menelan banyak berulang. #endif // DECODE_AC // Alternatif: // # tentukan TIMEOUT 90U // Sesuai dengan mesej dengan jurang besar seperti XMP-1 & beberapa unit udara // unit, tetapi secara tidak sengaja dapat menelan mesej berulang // dalam output rawData . // # tentukan TIMEOUT MAX_TIMEOUT_MS // Ini akan menetapkannya kepada // maksimum kami yang dibenarkan sekarang. Nilai yang tinggi ini bermasalah // kerana ia adalah sempadan biasa // di mana kebanyakan mesej berulang. // cth. Ia akan menghentikan penyahkodan mesej dan // mula menghantarnya ke siri tepat // pada waktu mesej seterusnya kemungkinan // akan dihantar, dan mungkin terlewatkan.

// Tetapkan paket mesej "TIDAK DIKETAHUI" bersaiz terkecil yang sebenarnya kita sayangi.

// Nilai ini membantu mengurangkan kadar pengesanan positif palsu dari latar belakang // kebisingan sebagai mesej sebenar. Kemungkinan bunyi IR latar belakang dikesan // sebagai mesej meningkat dengan panjang nilai TIMEOUT. (Lihat di atas) // Kelemahan menetapkan pesan ini terlalu besar adalah anda boleh melewatkan beberapa // pesanan ringkas yang sah untuk protokol yang belum disahkodkan oleh pustaka ini. // // Tetapkan lebih tinggi jika anda mendapat banyak pesanan yang TIDAK DIKETAHUI pendek apabila tiada apa-apa // yang seharusnya menghantar mesej. // Tetapkan lebih rendah jika anda yakin penyediaan anda berfungsi, tetapi tidak melihat mesej // dari peranti anda. (cth: Alat kawalan jauh IR yang lain.) // CATATAN: Tetapkan nilai ini sangat tinggi untuk mematikan pengesanan yang TIDAK DIKETAHUI. #tentukan MIN_UNKNOWN_SIZE 12 // ==================== akhir PARAMETER TUNEABLE ====================

// Gunakan hidupkan fitur penyangga simpan untuk liputan tangkapan yang lebih lengkap.

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

keputusan decode_results; // Di suatu tempat untuk menyimpan hasilnya

// Paparkan keadaan mesej A / C yang dapat dibaca oleh manusia sekiranya kita boleh.

batal dumpACInfo (keputusan decode_results *) {String description = ""; #if DECODE_DAIKIN jika (hasil-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (hasil-> keadaan); keterangan = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC jika (hasil-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (hasil-> keadaan, hasil-> bit / 8); keterangan = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR jika (hasil-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (hasil-> keadaan); keterangan = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC jika (hasil-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (hasil-> keadaan); keterangan = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA jika (hasil-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (hasil-> nilai); // Midea menggunakan nilai dan bukannya keadaan. keterangan = ac.toString (); } #endif // DECODE_MIDEA // Sekiranya kami mendapat keterangan yang boleh dibaca oleh manusia, tunjukkanlah. if (keterangan! = "") Serial.println ("Mesg Desc.:" + keterangan); }

// Bahagian kod hanya dijalankan sekali pada permulaan.

batal persediaan () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); kelewatan (500); // Tunggu sebentar untuk sambungan bersambung.

#jika DECODE_HASH

// Abaikan mesej dengan denyutan hidup atau mati kurang daripada minimum. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Mulakan penerima}

// Bahagian kod yang berulang

// void loop () {// Periksa sama ada kod IR telah diterima. if (irrecv.decode (& results)) {// Paparkan cap waktu kasar. uint32_t sekarang = milis (); Serial.printf ("Cap Waktu:% 06u.% 03u / n", sekarang / 1000, sekarang% 1000); if (results.overflow) Serial.printf ("PERINGATAN: Kod IR terlalu besar untuk penyangga (> =% d)." "Hasil ini tidak boleh dipercayai sehingga ini dapat diselesaikan." "Edit & tingkatkan CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Paparkan output asas dari apa yang kami dapati. Serial.print (resultToHumanReadableBasic (& hasil)); dumpACInfo (& hasil); // Paparkan sebarang maklumat A / C tambahan jika kita memilikinya. hasil (); // Umpan WDT kerana output teks memerlukan sedikit masa untuk mencetak.

// Paparkan versi perpustakaan yang ditangkap oleh mesej.

Serial.print ("Perpustakaan: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Bersiri.println ();

// Output maklumat masa RAW hasilnya.

Serial.println (resultToTimingInfo (& hasil)); hasil (); // Umpan WDT (sekali lagi)

// Keluarkan hasilnya sebagai kod sumber

Serial.println (resultToSourceCode (& hasil)); Serial.println (""); // Garis kosong antara hasil penyertaan (); // Umpan WDT (sekali lagi)}}

Apabila sketsa ini dimuat dan dijalankan dengan monitor bersiri terbuka, ia akan mengeluarkan kod untuk menekan butang (lihat gambar)

Tuliskan kod yang ingin anda gunakan untuk penggunaan kemudian. Saya menggunakan excel untuk mencatat apa yang saya dapat untuk butang yang ingin saya gunakan (lihat gambar)

Saya Menyunting butang dalam aktiviti Netflix saya untuk Menghantar isyarat jeda dari jarak jauh panasonic.. (lihat gambar)

Langkah 3: Menulis Kod untuk Menghantar ke Nodered

Menulis Kod untuk Menghantar ke Nodered
Menulis Kod untuk Menghantar ke Nodered

#ifndef UNIT_TEST # include #endif #include

#sertakan

#sertakan

#sertakan

#sertakan

#sertakan

const char * ssid = ""; // Masukkan SSID di sini char * password = ""; // Masukkan Kata Laluan di sini const char * host = ""; // Ip addresse #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); keputusan decode_results; batal persediaan () {irrecv.enableIRIn (); // Mulakan penerima USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (benar); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

untuk (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] TUNGGU% d… / n", t); USE_SERIAL.flush (); kelewatan (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, kata laluan); } gelung void () {if (irrecv.decode (& hasil)) {

// Tukar nilai isyarat ini untuk nilai yang anda dapat

jika (hasil.value == 0x40040D00606D) {USE_SERIAL.println ("jeda Isyarat diterima"); wifisend (jeda); kelewatan (1000);

} jika (hasil.value == 0x400401007273) {

USE_SERIAL.println ("sebelumnya");

wifisend ("prev"); kelewatan (1000); } jika (hasil.value == 0x40040100F2F3) {USE_SERIAL.println ("seterusnya"); wifisend ("seterusnya"); kelewatan (1000); }

irrecv.resume (); // Terima nilai seterusnya} kelewatan (100); } batal wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] bermula… / n"); // konfigurasikan tragedi pelayan dan url http.begin ("https:// [pengguna]: [lulus] @ [ip]: [port] / chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] DAPATKAN … / n"); // mulakan sambungan dan hantar HTTP header int httpCode = http. GET (); // httpCode akan menjadi negatif pada ralat jika (httpCode> 0) {// HTTP header telah dihantar dan Header respons server telah ditangani USE_SERIAL.printf ("[HTTP] GET… code:% d / n", // fail dijumpai di pelayan

jika (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (muatan); }} lain {USE_SERIAL.printf ("[HTTP] DAPATKAN … gagal, ralat:% s / n", http.errorToString (httpCode).c_str ()); } http.end (); kelewatan (100); }}

Ini adalah kod yang saya gunakan pada nodemcu saya. Anda perlu memasang perpustakaan tersebut.

Anda boleh menguji menggunakan monitor bersiri dan tekan butang jarak jauh yang anda tambahkan dalam kod untuk melihat tindak balas..

Sebaris:

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

Anda perlu menukar [pengguna] kepada pengguna anda dan sebagainya. TANPA kurungan. tanda kurung ada untuk menunjukkan bidang penyihir berubah.

Garis itu juga tidak akan berfungsi sehingga kita mengatur aliran kita dengan mengangguk.

Langkah 4: Membuat Aliran di Nodered

Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered
Membuat Aliran dalam Nodered

Seperti yang disebutkan pada awalnya saya menggunakan hass.io dengan mengangguk. Sekiranya anda menjalankan persediaan yang berbeza, anda perlu membuat ini berbeza! Anda dapat melihat dalam gambar bahawa apabila butang ditekan, ia akan muncul di tetingkap debug…

Node muatan perubahan mungkin boleh dilangkau jika saya memilih sesuatu yang berbeza daripada data = pada langkah sebelumnya. Node suis yang saya gunakan jauh lebih besar daripada hanya berhenti sebentar tetapi begitu sahaja saya dapat menambahkan lebih banyak isyarat untuk menggunakan Chromecast untuk stesen radio dll.

Untuk hanya bermain jeda, anda boleh menggunakan aliran pada gambar lain.

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

Saya membuang nama pengguna dan url dari ini supaya anda mungkin perlu mengeditnya.

tambahkan simpul suis jika anda ingin bertindak balas terhadap lebih daripada sekadar berhenti sebentar (lihat gambar misalnya)

Dalam nod pembantu rumah untuk penggunaan jeda:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [kromecast anda di sini]"}

untuk trek seterusnya, salin simpul itu dan edit perkhidmatan ke: media_next_track dan beri nama ke: Chromecast seterusnya

Langkah 5: Alexa Jeda Chromecast Pilihan

Pilihan tambah alexa untuk menjeda kromecast:

Terdapat pilihan di sini.. Anda boleh membuat satu node alexa yang disebut pause chromecast yang menjeda chromecast, atau anda boleh membuat yang dipanggil pause tv yang memeriksa aktiviti harmoni semasa dan berhenti bergantung pada itu.

Saya akan menambahkannya di sini kemudian..

Disyorkan: