Daftar Isi:

Jeda Chromcast Dengan Remote Control: 5 Langkah
Jeda Chromcast Dengan Remote Control: 5 Langkah

Video: Jeda Chromcast Dengan Remote Control: 5 Langkah

Video: Jeda Chromcast Dengan Remote Control: 5 Langkah
Video: Chromecast built in tv #shorts 2024, Juli
Anonim
Image
Image
peralatan
peralatan

Saya memiliki remote harmoni Logitech dan menjalankan asisten rumah di raspberry pi.

Saya ingin dapat menjeda chromecast dari remote saya, tetapi saya memiliki tv lama yang tidak mendukung ini melalui HDMI. Ide saya kemudian menggunakan NodeMcu untuk menangkap sinyal mereka dan berhenti.

Jika Anda tidak dapat membuatnya berfungsi atau memiliki pertanyaan, silakan komentar di bawah

Langkah 1: Peralatan

peralatan
peralatan
peralatan
peralatan

Peralatan yang dibutuhkan:

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

Ir reciver (seperti ex ini:

kabel dupont

Kabel micro usb (power nodemcu)

Saya menggunakan Logitech Harmony -hub

Untuk pendekatan saya, Anda Membutuhkan Raspberry pi dengan hass.io Terinstal dan Nodered. Saya tidak akan mengatur hal-hal asisten rumah tangga di sini. Jika Anda menggunakan sesuatu selain asisten rumah tangga, Anda perlu menyesuaikan sendiri.

Anda harus dapat menggunakan Nodemcu di Arduino IDE karena saya tidak akan membahasnya di sini

Langkah 2: Sinyal Jarak Jauh

Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh
Sinyal Jarak Jauh

Cara saya melakukannya adalah menyalin sinyal dari remote yang tidak saya gunakan ke remote harmoni.

Saya menggunakan remote untuk tv panasonic model TXL32C3E karena tidak mengganggu peralatan saya di lantai pertama. Itu tv yang saya punya di lantai atas.

Jika Anda tidak menggunakan harmoni, Anda dapat melewati ini.

Jadi untuk menemukan sinyal saya menggunakan sketsa ini:

/* * IRremoteESP8266: IRrecvDumpV2 - membuang detail kode IR dengan IRRecv * Detektor/demodulator IR harus terhubung ke input RECV_PIN. * * Hak Cipta 2009 Ken Shirriff, https://arcfn.com * Hak Cipta 2017 David Conran * * Contoh diagram rangkaian: * https://arcfn.com * * Perubahan: * Versi 0.3 November 2017 * - Dukungan untuk A/C decoding untuk beberapa protokol. * Versi 0.2 April 2017 * - Decode dari salinan data sehingga kami dapat mulai menangkap lebih cepat sehingga * mengurangi kemungkinan salah tangkap. * Berdasarkan Ken Shirriff's IrsendDemo Versi 0.1 Juli 2009, */

#ifndef UNIT_TEST

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

// ==================== mulai dari PARAMETER TUNEABLE ====================

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

// Kecepatan baud koneksi serial.

// yaitu Pesan status akan dikirim ke PC pada kecepatan baud ini. // Cobalah untuk menghindari kecepatan lambat seperti 9600, karena Anda akan melewatkan pesan dan // menyebabkan masalah lain. 115200 (atau lebih cepat) direkomendasikan. // CATATAN: Pastikan Anda mengatur Serial Monitor ke kecepatan yang sama. #tentukan BAUD_RATE 115200

// Karena program ini adalah capture/decoder tujuan khusus, mari kita gunakan yang lebih besar

// dari buffer normal sehingga kami dapat menangani kode remote AC. #tentukan CAPTURE_BUFFER_SIZE 1024

// TIMEOUT adalah Nr. mili-detik tanpa data lagi sebelum kami mempertimbangkan a

// pesan berakhir. // Parameter ini merupakan trade-off yang menarik. Semakin lama batas waktu, semakin // kompleks pesan yang dapat ditangkapnya. misalnya Beberapa protokol perangkat akan mengirim // beberapa paket pesan secara berurutan, seperti remote AC. // Protokol Air Coniditioner sering kali memiliki celah yang cukup besar (20-40+ms) antara // paket. // Kelemahan dari nilai batas waktu yang besar adalah banyak protokol yang kurang kompleks // mengirim banyak pesan saat tombol remote ditekan. Kesenjangan antara // mereka sering juga sekitar 20+ md. Hal ini dapat mengakibatkan data mentah menjadi 2-3+ // kali lebih besar dari yang dibutuhkan karena telah menangkap 2-3+ pesan dalam satu // penangkapan. Menetapkan nilai batas waktu yang rendah dapat mengatasi ini. // Jadi, memilih nilai TIMEOUT terbaik untuk kasus penggunaan tertentu adalah // cukup bernuansa. Semoga beruntung dan selamat berburu. // CATATAN: Jangan melebihi MAX_TIMEOUT_MS. Biasanya 130ms. #if DECODE_AC #define TIMEOUT 50U // Beberapa unit A/C memiliki celah dalam protokolnya ~40ms. // misalnya Kelvinator // Nilai sebesar ini dapat menelan pengulangan beberapa protokol #else // DECODE_AC #define TIMEOUT 15U // Sesuai dengan sebagian besar pesan, sementara tidak menelan banyak pengulangan. #endif // DECODE_AC // Alternatif: // #define TIMEOUT 90U // Sesuaikan pesan dengan celah besar seperti XMP-1 & beberapa unit AC //, tetapi dapat secara tidak sengaja menelan pesan berulang // dalam output rawData. // #define TIMEOUT MAX_TIMEOUT_MS // Ini akan menyetelnya ke maksimum // yang saat ini diizinkan. Nilai setinggi ini bermasalah // karena kira-kira merupakan batas khas // tempat sebagian besar pesan berulang. // misalnya Ini akan berhenti mendekode pesan dan // mulai mengirimnya ke serial tepat // saat pesan berikutnya kemungkinan // akan dikirim, dan mungkin melewatkannya.

// Tetapkan paket pesan "UNKNOWN" berukuran terkecil yang benar-benar kita pedulikan.

// Nilai ini membantu mengurangi tingkat deteksi positif palsu dari latar belakang IR // kebisingan sebagai pesan nyata. Kemungkinan kebisingan IR latar belakang terdeteksi // saat pesan meningkat seiring dengan panjang nilai TIMEOUT. (Lihat di atas) // Kelemahan dari menyetel pesan ini terlalu besar adalah Anda dapat melewatkan beberapa // pesan singkat yang valid untuk protokol yang belum didekode oleh perpustakaan ini. // // Tetapkan lebih tinggi jika Anda mendapatkan banyak pesan singkat yang tidak diketahui secara acak ketika tidak ada // yang seharusnya mengirim pesan. // Setel lebih rendah jika Anda yakin pengaturan Anda berfungsi, tetapi tidak melihat pesan // dari perangkat Anda. (mis. Remote IR lain berfungsi.) // CATATAN: Tetapkan nilai ini sangat tinggi untuk mematikan deteksi UNKNOWN secara efektif. #define MIN_UNKNOWN_SIZE 12 // ==================== akhir PARAMETER TUNEABLE ====================

// Gunakan fitur turn on save buffer untuk cakupan capture yang lebih lengkap.

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

hasil decode_results; // Tempat untuk menyimpan hasil

// Menampilkan status pesan A/C yang dapat dibaca manusia jika kita bisa.

void dumpACInfo(decode_results *results) { Deskripsi string = ""; #if DECODE_DAIKIN if (hasil->decode_type == DAIKIN) { IRDakinESP ac(0); ac.setRaw(hasil->status); deskripsi = ac.toString(); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (hasil->decode_type == FUJITSU_AC) { IRFujitsuAC ac(0); ac.setRaw(hasil->status, hasil->bit / 8); deskripsi = ac.toString(); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (hasil->decode_type == KELVINATOR) { IRKelvinatorAC ac(0); ac.setRaw(hasil->status); deskripsi = ac.toString(); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (hasil->decode_type == TOSHIBA_AC) { IRToshibaAC ac(0); ac.setRaw(hasil->status); deskripsi = ac.toString(); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (hasil->decode_type == MIDEA) { IRMideaAC ac(0); ac.setRaw(hasil->nilai); // Midea menggunakan nilai alih-alih status. deskripsi = ac.toString(); } #endif // DECODE_MIDEA // Jika kita mendapatkan deskripsi pesan yang dapat dibaca manusia, tampilkan. if (deskripsi != "") Serial.println("Deskripsi Pesan: " + deskripsi); }

// Bagian kode hanya dijalankan sekali saat start-up.

void setup() { Serial.begin(BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); penundaan (500); // Tunggu sebentar hingga koneksi serial dibuat.

#jika DECODE_HASH

// Abaikan pesan dengan pulsa aktif atau nonaktif kurang dari minimum. irrecv.setUnknownThreshold(MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn(); // Mulai penerima }

// Bagian kode yang berulang

// void loop() { // Periksa apakah kode IR telah diterima. if (irrecv.decode(&results)) { // Menampilkan stempel waktu mentah. uint32_t sekarang = milis(); Serial.printf("Stempel waktu: %06u.%03u\n", sekarang / 1000, sekarang % 1000); if (results.overflow) Serial.printf("PERINGATAN: Kode IR terlalu besar untuk buffer (>= %d). " "Hasil ini tidak boleh dipercaya sampai ini diselesaikan." "Edit & tingkatkan CAPTURE_BUFFER_SIZE.\n ", CAPTURE_BUFFER_SIZE); // Menampilkan output dasar dari apa yang kita temukan. Serial.print(resultToHumanReadableBasic(&hasil)); dumpACInfo(&hasil); // Menampilkan info A/C tambahan jika kita memilikinya. menghasilkan(); // Umpankan WDT karena output teks membutuhkan waktu untuk dicetak.

// Menampilkan versi library yang digunakan untuk menangkap pesan.

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

// Keluarkan info waktu RAW dari hasil.

Serial.println(resultToTimingInfo(&hasil)); menghasilkan(); // Beri makan WDT (lagi)

// Keluarkan hasilnya sebagai kode sumber

Serial.println(resultToSourceCode(&hasil)); Serial.println(""); // Baris kosong di antara entri hasil(); // Beri makan WDT (lagi) } }

Ketika sketsa ini diunggah dan dijalankan dengan monitor serial terbuka, maka akan keluar kode untuk tekan tombol (lihat gambar)

Tuliskan kode yang ingin Anda gunakan untuk digunakan nanti. Saya menggunakan excel untuk mencatat apa yang saya dapatkan untuk tombol yang ingin saya gunakan (lihat gambar)

Saya Mengedit tombol di aktivitas Netflix saya untuk Mengirim sinyal jeda dari jarak jauh panasonic.. (lihat gambar)

Langkah 3: Menulis Kode untuk Mengirim ke Nodered

Menulis Kode untuk Mengirim ke Nodered
Menulis Kode untuk Mengirim ke Nodered

#ifndef UNIT_TEST#include #endif #include

#termasuk

#termasuk

#termasuk

#termasuk

#termasuk

const char*ssid = ""; // Masukkan SSID disini char* password = ""; //Masukkan Password disini const char *host = ""; //alamat ip #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irecv(RECV_PIN); hasil decode_results; void setup() { irrecv.enableIRIn(); // Mulai 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(); penundaan (1000); } WiFi.mode(WIFI_STA); WiFiMulti.addAP(ssid, kata sandi); } void loop() { jika (irrecv.decode(&hasil)) {

// Ubah nilai sinyal ini untuk yang Anda dapatkan

if (hasil.nilai == 0x40040D00606D){ USE_SERIAL.println("jeda Sinyal diterima"); wifisend(jeda); penundaan (1000);

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

USE_SERIAL.println("sebelumnya");

wifisend("sebelumnya"); penundaan (1000); } if (hasil.nilai == 0x40040100F2F3){ USE_SERIAL.println("berikutnya"); wifisend("selanjutnya"); penundaan (1000); }

irrecv.resume(); // Terima nilai berikutnya } delay(100); } void wifisend(Data string){ if((WiFiMulti.run() == WL_CONNECTED)) { HTTPClient http; USE_SERIAL.print("[HTTP] mulai…\n"); // mengonfigurasi server dan url yang terkena musibah http.begin("https://[user]:[pass]@[ip]:[port]/chromecastpause?data=" + data); USE_SERIAL.print("[HTTP] DAPATKAN…\n"); // mulai koneksi dan kirim header HTTP int httpCode = http. GET(); // httpCode akan menjadi negatif pada error if(httpCode > 0) { // HTTP header telah terkirim dan Server response header telah ditangani USE_SERIAL.printf("[HTTP] GET… code: %d\n", // file ditemukan di server

if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); USE_SERIAL.println(payload); } } else { USE_SERIAL.printf("[HTTP] GET… gagal, kesalahan: %s\n", http.errorToString(httpCode).c_str()); } http.akhir(); penundaan(100); } }

Ini adalah kode yang saya gunakan pada nodemcu saya. Anda harus menginstal pustaka tersebut.

Anda dapat menguji menggunakan monitor serial dan menekan tombol jarak jauh yang Anda tambahkan dalam kode untuk melihat responsnya..

Di baris:

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

Anda perlu mengubah [pengguna] menjadi pengguna Anda dan seterusnya. TANPA tanda kurung. tanda kurung ada untuk menunjukkan bidang penyihir untuk diubah.

Baris itu juga tidak akan berfungsi sampai kita mengatur aliran kita di nodered.

Langkah 4: Membuat Aliran di Nodered

Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered
Membuat Aliran di Nodered

Seperti yang disebutkan di awal saya menggunakan hass.io dengan nodered. Jika Anda menjalankan penyiapan yang berbeda, Anda harus membuatnya berbeda! Anda dapat melihat pada gambar bahwa ketika sebuah tombol ditekan, itu muncul di jendela debug…

Perubahan payload node mungkin bisa dilewati jika saya memilih sesuatu yang berbeda dengan data= pada langkah sebelumnya. Node sakelar yang saya gunakan jauh lebih besar daripada hanya berhenti sebentar tetapi itu hanya agar saya dapat menambahkan lebih banyak sinyal ir untuk menggunakan chromecast untuk stasiun radio dll.

Untuk sekedar play pause anda bisa menggunakan alur pada gambar yang lain.

[{"id":"e6440c30.4a35a", "type":"http in", "z":"869ceb74.0275c8", "name":"", "url":"chromecastpause", "metode": "dapatkan", "unggah":false, "swaggerDoc":"", "x":133, "y":98, "kabel":

Saya menghapus nama userpass dan url dari ini sehingga Anda mungkin perlu mengeditnya.

tambahkan simpul sakelar jika Anda ingin bereaksi lebih dari sekadar jeda (lihat gambar misalnya)

Di node asisten rumah untuk penggunaan jeda:

nama: putar jeda chromecastdomain: media_playerLayanan: media_play_pausedata: { "entity_id": "media_player.[chromecast Anda di sini]" }

untuk trek berikutnya cukup salin simpul itu dan edit layanan ke: media_next_track dan beri nama ke: chromecast berikutnya

Langkah 5: Opsional Alexa Pause Chromecast

Opsional tambahkan perintah alexa untuk jeda chromecast:

Ada opsi di sini.. Anda dapat membuat satu alexa nnode yang disebut pause chromecast yang menjeda chromecast, atau Anda dapat membuat satu yang disebut jeda tv yang memeriksa aktivitas harmoni saat ini dan jeda tergantung pada itu.

nanti saya tambahin disini..

Direkomendasikan: