Mundarija:

Chromcast -ni masofadan boshqarish pauzasi: 5 qadam
Chromcast -ni masofadan boshqarish pauzasi: 5 qadam

Video: Chromcast -ni masofadan boshqarish pauzasi: 5 qadam

Video: Chromcast -ni masofadan boshqarish pauzasi: 5 qadam
Video: Kompyuterni internet orqali boshqarish / Chrome Remote Desktop haqida 2024, Iyul
Anonim
Image
Image
Ta'minot
Ta'minot

Menda Logitech uyg'unlik pulti bor va malina pi ustida Home yordamchisini ishga tushiraman.

Men masofadan boshqarish pultidan xromecastni to'xtatib turishni xohlardim, lekin menda hdmi orqali qo'llab -quvvatlanmaydigan eski televizor bor. Mening fikrim, NodeMcu yordamida signalni ushlab turish va pauza qilish edi.

Agar siz uni ishga kirita olmasangiz yoki savollaringiz bo'lsa, quyida izoh qoldiring

1 -qadam: uskunalar bilan jihozlash

Ta'minot
Ta'minot
Ta'minot
Ta'minot

Kerakli uskunalar:

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

Qabul qilgich (masalan:

dupont simlari

Mikro usb kabeli (quvvat tugmasi)

Men Logitech Harmony -hub -dan foydalanaman

Mening yondashuvim uchun sizga hass.io O'rnatilgan va Noderlangan Raspberry Pi kerak. Men bu erda uyga yordamchi narsalarni o'rnatmayman. Agar siz uy yordamchisidan boshqa narsadan foydalansangiz, narsalarni o'zingiz moslashtirishingiz kerak.

Siz Nodemcu -ni Arduino IDE -da ishlatishingiz kerak, chunki men bu erga bormayman

2 -qadam: masofaviy signal

Masofaviy signal
Masofaviy signal
Masofaviy signal
Masofaviy signal
Masofaviy signal
Masofaviy signal
Masofaviy signal
Masofaviy signal

Men qilgan usul - masofadan boshqarish pultidan signalni nusxalash, men uni harmoniya pultiga ishlatmaganman.

Men panasonic TXL32C3E modeli uchun masofadan boshqarish pultidan foydalanardim, chunki bu mening birinchi qavatdagi uskunamga xalaqit bermaydi. Bu mening yuqori qavatdagi televizorim.

Agar siz uyg'unlikni ishlatmasangiz, buni o'tkazib yuborishingiz mumkin.

Shunday qilib, signalni topish uchun men ushbu eskizdan foydalandim:

/ * * IRremoteESP8266: IRrecvDumpV2 - IRrecv bilan IR kodlarining tafsilotlarini yig'ish * RECV_PIN kirishiga IQ detektori/demodulyatori ulangan bo'lishi kerak. * * Mualliflik huquqi 2009 Ken Shirriff, https://arcfn.com * Mualliflik huquqi 2017 Devid Konran * * Misol sxemasi: * https://arcfn.com * * O'zgarishlar: * Versiya 0.3 noyabr, 2017 * - Konditsionerni qo'llab -quvvatlash ba'zi protokollar uchun dekodlash. * 0,2 -aprel, 2017 -yil versiya * - Ma'lumotlar nusxasini dekodlang, shunda biz tezroq yozib olishni boshlashimiz mumkin * noto'g'ri tutilish ehtimolini kamaytiradi. * Ken Shirriffning IrsendDemo versiyasi, 2009 yil 0.1 iyul, */ asosida

#ifndef UNIT_TEST

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

// ==================== TUNEABLE PARAMETRALARINING boshlanishi ===================

// IR detektori/demodulator GPIO pin 14 ga ulangan // masalan. D5 NodeMCU kartasida. #RECV_PIN 14 ni aniqlang

// Seriyali ulanish tezligi.

// ya'ni Status xabari kompyuterga shu tezlikda yuboriladi. // 9600 kabi sekin tezliklardan qochishga harakat qiling, chunki siz xabarlarni o'tkazib yuborasiz va // boshqa muammolarni keltirib chiqarasiz. 115200 (yoki tezroq) tavsiya etiladi. // QAYD: Serial monitoringizni bir xil tezlikka o'rnatganingizga ishonch hosil qiling. #ta'riflang BAUD_RATE 115200

// Bu dastur maxsus maqsadli yozish/dekoder bo'lgani uchun kattaroqidan foydalanaylik

// oddiy buferdan ko'ra, biz konditsionerning masofaviy kodlarini boshqarishimiz mumkin. #ta'rif CAPTURE_BUFFER_SIZE 1024

// TIMEOUT - bu Nr. a-ni ko'rib chiqishdan oldin ma'lumotlarning milli-sekundlari yo'q

// xabar tugadi. // Bu parametr qiziqarli savdo-sotiqdir. Vaqt qancha uzoq bo'lsa, u shunchalik // murakkab xabarni olishi mumkin. masalan Ba'zi qurilmalar protokollari konditsionerning masofadan boshqarish pultlari kabi ketma -ket // bir nechta xabarlar paketini yuboradi. // Air Coniditioner protokollarida ko'pincha // paketlar o'rtasida katta bo'shliq (20-40+ms) mavjud. // Katta tanaffus qiymatining salbiy tomoni - bu murakkab protokollarning ko'pligi. // orasidagi farq ko'pincha 20+ms atrofida bo'ladi. Natijada, ma'lumotlarning kerak bo'lgandan 2-3+ // kattaroq bo'lishiga olib kelishi mumkin, chunki u bitta // ta'qibda 2-3 ta+ xabarni olgan. Kechikish vaqtining past qiymatini o'rnatish bu muammoni hal qilishi mumkin. // Shunday qilib, sizning holatingiz uchun eng yaxshi TIMEOUT qiymatini tanlash // juda nozik. Omad va baxtli ov. // QAYD: MAX_TIMEOUT_MS dan oshmasligi kerak. Odatda 130 ms. #if DECODE_AC #deutine TIMEOUT 50U // Ba'zi konditsionerlar protokollarida ~ 40ms bo'shliqlar mavjud. // masalan Kelvinator // Bu qiymat ba'zi protokollarning takrorlanishini yutib yuborishi mumkin #boshqa // DECODE_AC #define TIMEOUT 15U // Ko'p xabarlarga mos keladi, lekin ko'p takrorlanishni yutmaydi. #endif // DECODE_AC // Variantlar: // #define TIMEOUT 90U // XMP-1 va ba'zi konditsioner // birliklari kabi katta bo'shliqlarga ega bo'lgan xabarlarga mos keladi, lekin tasodifan rawData chiqishida takrorlangan xabarlarni // yutib yuborishi mumkin. // #define TIMEOUT MAX_TIMEOUT_MS // Bu uni hozirda ruxsat etilgan // maksimal darajaga o'rnatadi. Bu yuqori qiymatlar muammoli // chunki bu odatda odatiy chegaradir // bu erda ko'p xabarlar takrorlanadi. // masalan U xabarni dekodlashni to'xtatadi va // uni ketma -ket jo'natishni aniq // keyingi xabar yuborilishi mumkin bo'lgan vaqtda // boshlaydi va o'tkazib yuborishi mumkin.

// Biz qiziqayotgan eng kichik o'lchamdagi "Bilmaydigan" xabarlar paketini o'rnating.

// Bu qiymat haqiqiy fon sifatida IQ fonining noto'g'ri-musbat aniqlanish tezligini kamaytirishga yordam beradi //. Vaqt o'tishi bilan, vaqt o'tishi bilan xabarning fonida IR fon shovqinini aniqlash imkoniyati oshadi. (Yuqoriga qarang) // Bu xabarni juda katta o'rnatishning salbiy tomoni shundaki, siz kutubxona hali hal qilmagan protokollar uchun haqiqiy // qisqa xabarlarni o'tkazib yuborishingiz mumkin. // // Agar siz hech qanday xabar yubormasligingiz kerak bo'lsa, tasodifiy qisqa noma'lum xabarlar ko'p bo'lsa, balandroq qilib qo'ying. // Agar sozlamangiz ishlayotganiga ishonchingiz komil bo'lsa, lekin qurilmangizdan kelgan xabarlar ko'rinmasa // pastga qo'ying. (masalan, boshqa IR masofadan boshqarish pultlari ishlaydi.) // QAYD: Noma'lum aniqlashni samarali o'chirish uchun bu qiymatni juda yuqori qilib qo'ying. #define MIN_UNKNOWN_SIZE 12 // ==================== TUNEABLE PARAMETRALARining oxiri ====================

// Qo'lga olishni to'liq qamrab olish uchun saqlash bufer xususiyatini yoqish -dan foydalaning.

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

decode_results natijalari; // Natijalarni saqlash uchun biror joy

// Iloji bo'lsa, konditsioner xabarining odam o'qiy oladigan holatini ko'rsatish.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (natijalar-> holat); tavsif = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (natijalar-> holat, natijalar-> bitlar / 8); tavsif = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (natijalar-> holat); tavsif = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (natijalar-> holat); tavsif = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (natijalar-> qiymat); // Midea shtat o'rniga qiymatdan foydalanadi. tavsif = ac.toString (); } #endif // DECODE_MIDEA // Agar biz xabarni odamlar o'qiy oladigan tavsifga ega bo'lsak, uni ko'rsating. if (tavsif! = "") Serial.println ("Mesg Desc.:" + tavsif); }

// Kod bo'limi ishga tushganda faqat bir marta ishlaydi.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); kechikish (500); // Ketma -ket ulanish o'rnatilishini biroz kuting.

#DECODE_HASH bo'lsa

// Pulsatsiyani yoqish yoki o'chirishdan kam bo'lgan xabarlarga e'tibor bermang. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Qabul qilgichni ishga tushiring}

// Kodning takrorlanadigan qismi

// void loop () {// IR kodi qabul qilinganligini tekshiring. if (irrecv.decode (& natijalar)) {// Xom vaqt tamg'asini ko'rsatish. uint32_t hozir = millis (); Serial.printf ("Vaqt tamg'asi: %06u. %03u / n", hozir / 1000, hozir %1000); if (results.overflow) Serial.printf ("OGOHLANTIRISH: infraqizil kod bufer uchun juda katta (> = %d)" ", CAPTURE_BUFFER_SIZE); // Biz topgan narsalarning asosiy chiqishini ko'rsatish. Serial.print (resultToHumanReadableBasic (& natijalar)); dumpACInfo (va natijalar); // Qo'shimcha konditsioner ma'lumotlarini ko'rsatish. Yo'l bering(); // WDT -ni yuboring, chunki matn chiqishi biroz vaqt talab etadi.

// Xabar yozib olingan kutubxona versiyasini ko'rsatish.

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

// Natijaning RAW vaqti haqidagi ma'lumotlarni chiqarish.

Serial.println (resultToTimingInfo (& natijalar)); Yo'l bering(); // WDT -ni yuboring (yana)

// Natijalarni manba kodi sifatida chiqaring

Serial.println (resultToSourceCode (& natijalar)); Serial.println (""); // yozuvlar orasidagi bo'sh chiziq hosil (); // WDT -ni yuboring (yana)}}

Bu eskiz yuklansa va ketma -ket monitor ochilsa, u tugmani bosish kodini chiqaradi (rasmga qarang)

Keyinchalik foydalanish uchun ishlatmoqchi bo'lgan kodlarni yozing. Men foydalanmoqchi bo'lgan tugmalar uchun nima kerakligini yozish uchun excel ishlatardim (rasmga qarang)

Panasonic pultidan pauza signalini yuborish uchun Netflix faoliyatimdagi tugmalarni tahrir qildim. (Rasmga qarang)

3 -qadam: Noderlarga yuborish kodini yozish

Noderga yuborish uchun kod yozish
Noderga yuborish uchun kod yozish

#ifndef UNIT_TEST #o'z ichiga #endif #include

#qo'shing

#qo'shing

#qo'shing

#qo'shing

#qo'shing

const char* ssid = ""; // SSID -ni kiriting char* password = ""; // Parolni bu erga kiriting const char *host = ""; // IP manzil #define USE_SERIAL seriyali ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results natijalari; void setup () {irrecv.enableIRIn (); // USE_SERIAL.begin qabul qilgichini ishga tushiring (115200); // USE_SERIAL.setDebugOutput (haqiqiy); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[SETUP] %d… / n", t) kuting; USE_SERIAL.flush (); kechikish (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, parol); } void loop () {if (irrecv.decode (& natijalar)) {

// Siz olgan signal uchun bu signal qiymatini o'zgartiring

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("Signal pauza olindi"); turmush o'rtog'i (pauza); kechikish (1000);

} agar (natijalar.value == 0x400401007273) {

USE_SERIAL.println ("oldingi");

turmush o'rtog'i ("oldingi"); kechikish (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("keyingi"); wifisend ("keyingi"); kechikish (1000); }

irrecv.resume (); // Keyingi qiymatni oling} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] boshlanadi… / n"); // fojeali server va urlni sozlash http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET… / n"); // ulanishni boshlash va HTTP sarlavhasini yuborish int httpCode = http. GET (); // (httpCode> 0) {// HTTP sarlavhasi yuborilgan bo'lsa va Server javob sarlavhasi USE_SERIAL.printf ("[HTTP] GET… kod: %d / n", httpCode) ishlatilsa, httpCode xato bo'ladi.

// fayl serverda topilgan

if (httpCode == HTTP_CODE_OK) {String yuk yuki = http.getString (); USE_SERIAL.println (yuk yuki); }} boshqa {USE_SERIAL.printf ("[HTTP] GET… bo'lmadi, xato: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); kechikish (100); }}

Bu mening nodemcu -da ishlatilgan kod. Siz kutubxonalarni o'rnatishingiz kerak.

Siz ketma -ket monitor yordamida sinab ko'rishingiz va javobni ko'rish uchun kodga qo'shgan masofadan boshqarish tugmalarini bosishingiz mumkin.

Qatorda:

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

Siz [user] ni foydalanuvchiingizga o'zgartirishingiz kerak va hokazo. Qavslarsiz. jodugar maydonlarini o'zgartirish uchun qavslar mavjud.

Biz o'z oqimimizni tugunli qilib o'rnatmagunimizcha, bu chiziq ham ishlamaydi.

4 -qadam: Noderlangan oqim yaratish

Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish
Noderatsiyalangan oqim yaratish

Boshida aytib o'tilganidek, men hass.io ni tugun bilan ishlataman. Agar siz boshqa sozlamani ishlatsangiz, uni boshqacha qilishingiz kerak bo'ladi! Rasmda ko'rishingiz mumkinki, tugma bosilganda disk raskadrovka oynasida ko'rsatiladi …

Agar oldingi qadamda ma'lumotlar = boshqa ma'lumotni tanlagan bo'lsam, yukning yuklanish tugunini o'tkazib yuborish mumkin edi. Men foydalanadigan kalit tugunlari pauzada ancha katta, lekin shuning uchun men radiostansiyalar va boshqalar uchun chromecast -dan foydalanish uchun ko'proq IR signallarini qo'shishim mumkin edi.

Faqat pauza qilish uchun siz boshqa rasmdagi oqimdan foydalanishingiz mumkin.

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "olish", "yuklash": noto'g'ri, "swaggerDoc": "", "x": 133, "y": 98, "simlar":

Men foydalanuvchi nomini va url -ni o'chirib tashladim, shuning uchun uni tahrir qilishingiz kerak bo'ladi.

Agar siz pauza qilishdan ko'ra ko'proq harakat qilmoqchi bo'lsangiz, kalit tugunini qo'shing (masalan, rasmga qarang)

To'xtatish uchun uy yordamchisining tugunida:

ism: pauza chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [sizning chromecast bu yerda]"}

Keyingi trek uchun bu tugunni ko'chiring va xizmatni media_next_track ga o'zgartiring va keyingi chromecastga nom bering.

5 -qadam: ixtiyoriy Alexa Pause Chromecast

Chromecast -ni to'xtatib turish uchun ixtiyoriy ravishda alexa buyrug'ini qo'shing:

Bu erda variantlar bor.. Siz chromecast -ni to'xtatib turuvchi pauza chromecast deb nomlangan bitta alexa tugunini qilishingiz mumkin.

yoki siz hozirgi uyg'unlik faoliyatini tekshiradigan pauza deb nomlangan televizor qilishingiz mumkin va bunga qarab pauza qilishingiz mumkin.

Buni keyinroq shu erga qo'shaman..

Tavsiya: