Mündəricat:

Uzaqdan idarəetmə ilə Chromcast -ı dayandırın: 5 addım
Uzaqdan idarəetmə ilə Chromcast -ı dayandırın: 5 addım

Video: Uzaqdan idarəetmə ilə Chromcast -ı dayandırın: 5 addım

Video: Uzaqdan idarəetmə ilə Chromcast -ı dayandırın: 5 addım
Video: 40 полезных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #7 2024, Iyul
Anonim
Image
Image
Təchizat
Təchizat

Məndə Logitech harmoniya pultu var və moruq pi üzərində Home köməkçisini işə salıram.

Pultumdan chromecast -ı durdurmaq istəyirdim, amma bunu hdmi vasitəsilə dəstəkləməyən köhnə bir televizorum var. Fikrim o zaman ir siqnalını tutmaq və fasilə vermək üçün NodeMcu istifadə etmək idi.

İşə götürə bilmirsinizsə və ya suallarınız varsa, aşağıda şərh yazın

Addım 1: təchizat

Təchizat
Təchizat
Təchizat
Təchizat

Lazım olan avadanlıqlar:

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

İr qəbuledicisi (məsələn:

dupont telləri

Mikro usb kabeli (güc nodemcu)

Logitech Harmony -hub istifadə edirəm

Mənim yanaşmam üçün hass.io quraşdırılmış və nömrələnmiş bir moruq pi ehtiyacınız var. Ev köməkçisindən başqa bir şey istifadə edirsinizsə, əşyaları özünüz uyğunlaşdırmalısınız.

Bura girməyəcəyim üçün Arduino IDE -də Nodemcu istifadə etməyi bacarmalısan

Addım 2: Uzaqdan Siqnal

Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal
Uzaqdan Siqnal

Etdiyim yol, istifadə etmədiyim uzaqdan bir siqnalın harmoniya pultuna kopyalanması idi.

Panasonic TV modeli TXL32C3E üçün pultdan istifadə etdim, çünki birinci mərtəbədəki avadanlıqlarıma mane olmur. Yuxarıda olduğum bir televizor.

Uyğunluqdan istifadə etmirsinizsə, bunu atlaya bilərsiniz.

Siqnal tapmaq üçün bu eskizdən istifadə etdim:

/ * * IRremoteESP8266: IRrecvDumpV2 - IRrecv ilə IR kodlarının tullantı detalları * IR detektoru/demodulyatoru RECV_PIN girişinə qoşulmalıdır. * * Müəlliflik hüququ 2009 Ken Shirriff, https://arcfn.com * Müəlliflik hüququ 2017 David Conran * * Nümunə dövrə diaqramı: * https://arcfn.com * * Dəyişikliklər: * Versiya 0.3 Noyabr 2017 * - A/C dəstəyi bəzi protokollar üçün deşifr. * Versiya 0.2 Aprel, 2017 * - Məlumatların bir nüsxəsini deşifrə edin, beləliklə daha sürətli çəkməyə başlaya bilərik * səhv tutma ehtimalını azaldır. * Ken Shirriff'in IrsendDemo Versiyası 0.1 İyul 2009, */ əsasında

#ifndef UNIT_TEST

#Daxil edin #endif #daxil edin #daxil edin #daxil edin #DECODE_AC #include #include #include #include #include #endif // DECODE_AC

// ==================== TUNEABLE PARAMETRALARININ başlaması ===================

// IR detektoru/demodulyatoru GPIO pin 14 -ə qoşulur // məs. D5 NodeMCU lövhəsində. #RECV_PIN 14 təyin edin

// Serial əlaqə baud dərəcəsi.

// yəni Status mesajı bu baud sürətində PC -yə göndəriləcək. // Mesajları qaçıracağınız və // digər problemlərə səbəb olacağınız üçün 9600 kimi yavaş sürətlərdən qaçmağa çalışın. 115200 (və ya daha sürətli) tövsiyə olunur. // QEYD: Serial Monitorunuzu eyni sürətə qoyduğunuzdan əmin olun. #BAUD_RATE 115200 təyin edin

// Bu proqram xüsusi məqsədli bir ələ keçirmə/dekoder olduğundan daha böyük birindən istifadə edək

// normal tampondan daha çox Kondisionerin uzaq kodlarını idarə edə bilərik. #CAPTURE_BUFFER_SIZE 1024 təyin edin

// TIMEOUT Nr. milli-Saniyədən artıq olmayan məlumatların nəzərdən keçirilməsi a

// mesaj bitdi. // Bu parametr maraqlı bir alverdir. Zaman aşımı nə qədər uzun olarsa, ələ ala biləcəyi bir mesaj daha mürəkkəbdir. məs. Bəzi cihaz protokolları Kondisionerin pultları kimi bir -birinin ardınca // birdən çox mesaj paketi göndərəcək. // Kondisioner protokollarında // paketlər arasında çox vaxt xeyli boşluq (20-40+ms) olur. // Böyük bir zaman aşımı dəyərinin mənfi tərəfi daha az mürəkkəb protokollardır // uzaqdan idarəetmə düyməsini basıldıqda birdən çox mesaj göndərin. // aralarındakı boşluq çox vaxt 20+ms civarındadır. Bu, xam məlumatların 2-3+ // birdən çox tutulduğu üçün lazım olduğundan 2-3 dəfə çox olması ilə nəticələnə bilər. Aşağı bir zaman aşımı dəyərinin təyin edilməsi bunu həll edə bilər. // Beləliklə, istifadə etdiyiniz vəziyyət üçün ən yaxşı TIMEOUT dəyərini seçmək // olduqca nüanslıdır. Uğurlar və xoşbəxt ov. // QEYD: MAX_TIMEOUT_MS -dən çox olmamalıdır. Tipik olaraq 130 ms. #DECODE_AC #deutine TIMEOUT 50U // Bəzi A/C cihazlarının protokollarında ~ 40ms boşluqlar var. // məs. Kelvinator // Bu böyük dəyər bəzi protokolların təkrarlarını uda bilər #başqa // DECODE_AC #define TIMEOUT 15U // Bir çox təkrarları udmaqla yanaşı əksər mesajlara uyğundur. #endif // DECODE_AC // Alternativlər: // #define TIMEOUT 90U // XMP-1 və bəzi aircon // vahidləri kimi böyük boşluqları olan mesajlara uyğundur, lakin səhvən təkrarlanan mesajları // rawData çıxışında uda bilər. // #define TIMEOUT MAX_TIMEOUT_MS // Bu, hal -hazırda icazə verilən // maksimumu təyin edəcək. Bu yüksək dəyərlər problemlidir // çünki əksər mesajların təkrarlandığı tipik sərhəddir //. // məs. Bir mesajın deşifrini dayandıracaq və // onu dəqiq olaraq // növbəti mesajın ötürülmə ehtimalının // vaxtında seriala göndərməyə başlayacaq və əldən verə bilər.

// Əslində maraqlandığımız ən kiçik ölçülü "BİLİNMƏZ" mesaj paketlərini təyin edin.

// Bu dəyər, IR mesajı // səs-küyünün əsl mesaj olaraq yanlış pozitiv aşkarlanma nisbətini azaltmağa kömək edir. Zaman aşımı dəyərinin artması ilə bir mesaj olaraq arxa planda İR səs -küyünün aşkarlanma şansı // artır. (Yuxarıya baxın) // Bu mesajı çox böyük qoymağın dezavantajı, bu kitabxananın hələ də deşifr etmədiyi protokollar üçün bəzi etibarlı // qısa mesajları əldən verməyinizdir. // // Heç bir şey göndərməməli olduğunda təsadüfi qısa BİLİNMƏZ mesajlar çox alsanız daha yüksək təyin edin //. // Quruluşunuzun işlədiyinə əmin olsanız aşağı salın, ancaq cihazınızdan mesajlar görünmür //. (məsələn, digər IR uzaqdan idarəetmə cihazları işləyir.) // DİQQƏT: BİLİNMƏYƏN aşkarlanmanı effektiv şəkildə söndürmək üçün bu dəyəri çox yüksək olaraq təyin edin. #define MIN_UNKNOWN_SIZE 12 // ===================== TUNEABLE PARAMETRELERİN sonu ====================

// Daha tam tutma əhatə dairəsi üçün qənaət bufer xüsusiyyətini yandırın.

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

decode_results nəticələri; // Nəticələri saxlamaq üçün bir yerdə

// Mümkünsə A/C mesajının insan tərəfindən oxunan vəziyyətini göstərin.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (nəticələr-> vəziyyət); təsvir = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (nəticələr-> vəziyyət, nəticələr-> bitlər / 8); təsvir = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (nəticələr-> vəziyyət); təsvir = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (nəticələr-> vəziyyət); təsvir = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (nəticələr-> dəyər); // Midea dövlət əvəzinə dəyərdən istifadə edir. təsvir = ac.toString (); } #endif // DECODE_MIDEA // Mesajın insan tərəfindən oxunan bir təsviri varsa, göstərin. if (description! = "") Serial.println ("Mesg Desc.:" + description); }

// Kod bölməsi işə salındıqda yalnız bir dəfə işləyir.

boş quraşdırma () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); gecikmə (500); // Serial bağlantının qurulmasını bir az gözləyin.

#DECODE_HASH

// Minimumdan az olan açma və ya söndürmə mesajlarına məhəl qoymayın. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Alıcını işə salın}

// Kodun təkrarlanan bölməsi

// void loop () {// IR kodunun alındığını yoxlayın. if (irrecv.decode (& nəticələr)) {// Xam bir zaman damgası göstərin. uint32_t indi = milis (); Serial.printf ("Zaman damgası: %06u. %03u / n", indi / 1000, indi %1000); if (results.overflow) Serial.printf ("XƏBƏRDARLIQ: IR kodu tampon üçün çox böyükdür (> = %d)" ", CAPTURE_BUFFER_SIZE); // Tapdıqlarımızın əsas çıxışını göstərin. Serial.print (resultToHumanReadableBasic (& nəticələr)); dumpACInfo (və nəticələr); // Əlavə Kondisioner məlumatımız varsa göstərin. gəlir (); // WDT -ni göndərin, çünki mətn çıxışı bir müddət çəkə bilər.

// Mesajın çəkildiyi kitabxana versiyasını göstərin.

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

// Nəticənin RAW vaxtı məlumatını çıxarın.

Serial.println (resultToTimingInfo (& nəticələr)); gəlir (); // WDT -ni qidalandırın (yenidən)

// Nəticələri mənbə kodu kimi çıxarın

Serial.println (resultToSourceCode (& nəticələr)); Serial.println (""); // Girişlər arasındakı boş xətt (); // WDT -ni yayımlayın (yenidən)}}

Bu eskiz yükləndikdə və serial monitor açılarkən işlədildikdə düyməni basmaq üçün kod çıxacaq (şəkilə bax)

Daha sonra istifadə etmək üçün istifadə etmək istədiyiniz kodları yazın. İstifadə etmək istədiyim düymələr üçün əldə etdiyimi qeyd etmək üçün excel istifadə etdim (şəklə bax)

Panasonic pultundan fasilə siqnalı göndərmək üçün Netflix fəaliyyətimdəki düymələri düzəltdim.. (şəklə bax)

Addım 3: Noderedə göndərmək üçün Kod yazmaq

Noderedə göndərmək üçün Kod yazmaq
Noderedə göndərmək üçün Kod yazmaq

#ifndef UNIT_TEST #daxildir #endif #include

#daxil edin

#daxil edin

#daxil edin

#daxil edin

#daxil edin

const char* ssid = ""; // SSID -ni daxil edin char* password = ""; // Şifrəni bura daxil edin const char *host = ""; // IP ünvanı #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results nəticələri; void setup () {irrecv.enableIRIn (); // Alıcını işə salın USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (doğru); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

üçün (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] %D… / n", t) gözləyin; USE_SERIAL.flush (); gecikmə (1000); } WiFi rejimi (WIFI_STA); WiFiMulti.addAP (ssid, parol); } void loop () {if (irrecv.decode (& results)) {

// Bu siqnal dəyərini aldığınız üçün dəyişdirin

əgər (results.value == 0x40040D00606D) {USE_SERIAL.println ("fasilə siqnalı alındı"); arvad (fasilə); gecikmə (1000);

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

USE_SERIAL.println ("əvvəlki");

həyat yoldaşı ("əvvəlki"); gecikmə (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); həyat yoldaşı ("sonrakı"); gecikmə (1000); }

irrecv. resume (); // Növbəti dəyəri qəbul edin} gecikmə (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] başlayır… / n"); // faciə serverini və urlini konfiqurasiya edin http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET… / n"); // əlaqəyə başlayın və HTTP başlığını göndərin int httpCode = http. GET (); // (httpCode> 0) {// HTTP başlığı göndərildikdə və Server cavab başlığı USE_SERIAL.printf ("[HTTP] GET… kodu: %d / n", httpCode) işlədildikdə // httpCode səhv olarsa mənfi olar;

// fayl serverdə tapıldı

if (httpCode == HTTP_CODE_OK) {String yükü = http.getString (); USE_SERIAL.println (faydalı yük); }} başqa {USE_SERIAL.printf ("[HTTP] GET… alınmadı, səhv: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); gecikmə (100); }}

Bu mənim nodemcu -da istifadə etdiyim koddur. Bu kitabxanaları quraşdırmalısınız.

Serial monitordan istifadə edərək test edə bilərsiniz və cavabı görmək üçün koda əlavə etdiyiniz uzaqdan düymələri basa bilərsiniz.

Satırda:

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

[İstifadəçini] istifadəçinizə dəyişdirməlisiniz və s. Mötərizəsiz. Mötərizədə cadı sahələrini dəyişdirmək göstərilir.

Hərəkətimizi düyməli şəkildə qurana qədər bu xətt də işləməyəcək.

Addım 4: Nodered bir axın yaratmaq

Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq
Nodered bir axın yaratmaq

Başlanğıcda qeyd edildiyi kimi, hass.io nodered ilə istifadə edirəm. Fərqli bir quraşdırma qurarsanız, bunu fərqli etməlisiniz! Şəkildə görə bilərsiniz ki, bir düyməyə basıldıqda onun ayıklama pəncərəsində göstərilir …

Dəyişiklik yükü qovşağı, ehtimal ki, əvvəlki addımdakı məlumatlardan fərqli bir şey seçsəydim, atlana bilərdi. İstifadə etdiyim keçid qovşağı fasilədə daha böyükdür, ancaq radio stansiyaları üçün chromecast istifadə etmək üçün daha çox ir siqnalı əlavə edə bilərəm.

Yalnız fasilə vermək üçün digər şəkildəki axını istifadə edə bilərsiniz.

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

İstifadəçi adı və url -i buradan sildim, buna görə onu redaktə etməyiniz lazım ola bilər.

fasilə verməkdən daha çox şeyə reaksiya vermək istəyirsinizsə, keçid düyünü əlavə edin (məsələn, şəkilə baxın)

Fasilə üçün ev köməkçisi qovşağında:

ad: pauza chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [chromecast'ınızı burda]"}

Növbəti mahnı üçün bu qovluğu kopyalayın və xidməti redaktə edin: media_next_track və adını: next chromecast

Addım 5: İsteğe bağlı Alexa Pause Chromecast

Chromecast -ı dayandırmaq üçün isteğe bağlı alexa əmri əlavə edin:

Burada seçimlər var.. Chromecast -ı durduran pause chromecast adlı bir alexa nodu edə bilərsiniz.

ya da cari harmoniya fəaliyyətini yoxlayan və buna bağlı olaraq fasilə verən bir duraklama tv edə bilərsiniz.

Bunu bura daha sonra əlavə edəcəm..

Tövsiyə: