Përmbajtje:

Ndalo Chromcast me një telekomandë: 5 hapa
Ndalo Chromcast me një telekomandë: 5 hapa

Video: Ndalo Chromcast me një telekomandë: 5 hapa

Video: Ndalo Chromcast me një telekomandë: 5 hapa
Video: МОИ РОДИТЕЛИ РАЗВЕЛИСЬ! МОЯ МАЧЕХА СТЕРВЕЛЛА против МОЕЙ МАМЫ! 2024, Shtator
Anonim
Image
Image
Pajisja
Pajisja

Unë kam një telekomandë të harmonisë Logitech dhe drejtoj Home asistent në një pi mjedër.

Doja të isha në gjendje të ndaloja chromecast nga telekomanda ime, por kam një televizor të vjetër që nuk e mbështet këtë përmes HDMI. Ideja ime ishte atëherë të përdorja një NodeMcu për të kapur sinjalin ir dhe pauzën.

Nëse nuk mund ta përdorni ose keni pyetje, ju lutemi komentoni më poshtë

Hapi 1: Pajisja

Pajisja
Pajisja
Pajisja
Pajisja

Pajisjet e nevojshme:

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

Marrës Ir (si ky:

telat dupont

Kabllo mikro usb (nodemcu e energjisë)

Unë përdor Logitech Harmony -hub

Për qasjen time Ju keni nevojë për një Raspberry pi me hass.io të instaluar dhe të koduar. Unë nuk do të hyj në vendosjen e gjërave ndihmëse këtu. Nëse përdorni diçka tjetër përveç ndihmësit të shtëpisë, duhet t'i përshtatni gjërat vetë.

Ju duhet të jeni në gjendje të përdorni Nodemcu në Arduino IDE pasi nuk do të hyj në këtë këtu

Hapi 2: Sinjali në distancë

Sinjal në distancë
Sinjal në distancë
Sinjal në distancë
Sinjal në distancë
Sinjal në distancë
Sinjal në distancë
Sinjal në distancë
Sinjal në distancë

Mënyra se si e bëra ishte të kopjoja një sinjal nga një telekomandë që nuk e përdor në harmoni me telekomandën.

Kam përdorur një telekomandë për modelin televizor panasonic TXL32C3E pasi nuk ndërhyn me pajisjet e mia në katin tim të parë. Ky është një televizor që kam lart.

Nëse nuk përdorni harmoninë, mund ta kaloni këtë.

Pra, për të gjetur sinjalin, unë përdor këtë skicë:

/ * * IRremoteESP8266: IRrecvDumpV2 - detajet e hedhjes së kodeve IR me IRrecv * Një detektor/demodulator IR duhet të jetë i lidhur me hyrjen RECV_PIN. * * E drejta e autorit 2009 Ken Shirriff, https://arcfn.com * E drejta e autorit 2017 David Conran * * Shembull diagrami i qarkut: * https://arcfn.com * * Ndryshimet: * Versioni 0.3 Nëntor, 2017 * - Mbështetje për A/C deshifrim për disa protokolle. * Versioni 0.2 Prill, 2017 * - Dekodoni nga një kopje e të dhënave në mënyrë që të fillojmë të kapim më shpejt kështu * zvogëloni gjasat e keqpërdorimeve. * Bazuar në Versionin IrsendDemo të Ken Shirriff 0.1 Korrik, 2009, */

#ifndef UNIT_TEST

#përfshi #ndif #përfshi #përfshi #përfshi #nëse DEKODO_AC #përfshi #përfshi #përfshi #përfshi #përfshi #endif // DEKODO_AC

// ==================== Fillimi i Parametrave TUNEABLE =====================

// Një detektor IR/demodulator është i lidhur me pin GPIO 14 // p.sh. D5 në një bord NodeMCU. #përcaktoni RECV_PIN 14

// Shkalla e baudit të lidhjes serike.

// dmth. Mesazhi i statusit do t'i dërgohet kompjuterit me këtë ritëm të mirë. // Mundohuni të shmangni shpejtësitë e ngadalta si 9600, pasi do të humbisni mesazhet dhe // do të shkaktoni probleme të tjera. Rekomandohet 115200 (ose më shpejt). // SHENIM: Sigurohuni që e keni vendosur Monitorin tuaj Serial në të njëjtën shpejtësi. #përcaktoni BAUD_RATE 115200

// Meqenëse ky program është një kapje/dekodues me qëllim të veçantë, le të përdorim një më të madh

// sesa tampon normal, kështu që ne mund të trajtojmë kodet e largëta të Kondicionerit. #përcakto CAPTURE_BUFFER_SIZE 1024

// TIMEOUT është Nr. prej mili-sekondash të të dhënave jo më shumë para se të shqyrtojmë a

// mesazhi mbaroi. // Ky parametër është një kompromis interesant. Sa më i gjatë të jetë koha, aq më // komplekse mund të kapë një mesazh. p.sh. Disa protokolle të pajisjes do të dërgojnë // pako mesazhesh të shumëfishta njëra pas tjetrës, si telekomandat e kondicionerit. // Protokollet e Air Coniditioner shpesh kanë një hendek të konsiderueshëm (20-40+ms) midis // paketave. // Ana negative e një vlere të madhe të afatit është shumë protokolle më pak komplekse // dërgoni mesazhe të shumta kur butoni i telekomandës mbahet i shtypur. Hendeku midis // tyre shpesh është gjithashtu rreth 20+ms. Kjo mund të rezultojë që të dhënat e papërpunuara të jenë 2-3+ // herë më të mëdha se sa nevojiten pasi ka kapur 2-3+ mesazhe në një // kapje të vetme. Vendosja e një vlere të ulët të afatit mund ta zgjidhë këtë. // Pra, zgjedhja e vlerës më të mirë TIMEOUT për rastin tuaj të veçantë është // mjaft e nuancuar. Fat i mirë dhe gjueti e lumtur. // SHENIM: Mos e kaloni MAX_TIMEOUT_MS. Zakonisht 130ms. #nëse DEKODO_AC #përcaktoni KOHN 50U // Disa njësi të A/C kanë boshllëqe në protokollet e tyre prej 40ms. // p.sh. Kelvinator // Një vlerë kaq e madhe mund të gëlltisë përsëritjet e disa protokolleve #të tjera // DECODE_AC #përcakto TIMEOUT 15U // I përshtatet shumicës së mesazheve, duke mos gëlltitur shumë përsëritje. #endif // DECODE_AC // Alternativat: // #define TIMEOUT 90U // Përshtaten mesazhe me boshllëqe të mëdha si XMP-1 dhe disa njësi ajri //, por aksidentalisht mund të gëlltisin mesazhe të përsëritura // në daljen e rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Kjo do ta vendosë atë në maksimumin tonë të lejuar aktualisht //. Vlerat kaq të larta janë problematike // sepse është afërsisht kufiri tipik // ku shumica e mesazheve përsëriten. // p.sh. Ai do të ndalojë deshifrimin e një mesazhi dhe // do të fillojë ta dërgojë atë në serial pikërisht // në kohën kur mesazhi tjetër ka të ngjarë të transmetohet // dhe mund ta humbasë atë.

// Vendosni paketat më të vogla të mesazheve "PANJOHUR" për të cilat ne në të vërtetë kujdesemi.

// Kjo vlerë ndihmon në zvogëlimin e shkallës së zbulimit pozitiv të rremë të sfondit IR // zhurmës si mesazhe reale. Shanset që zhurma IR e sfondit të zbulohet // si mesazh rritet me gjatësinë e vlerës TIMEOUT. (Shih më lart) // Ana negative e vendosjes së këtij mesazhi shumë të madh është se mund të humbasësh disa mesazhe të vlefshme // të shkurtra për protokollet që kjo bibliotekë ende nuk i deshifron. // // Vendoseni më lart nëse merrni shumë mesazhe të shkurtra të panjohura të rastit kur asgjë // nuk duhet të dërgojë një mesazh. // Vendoseni më poshtë nëse jeni të sigurt që konfigurimi juaj po funksionon, por nuk sheh mesazhe // nga pajisja juaj. (p.sh. telekomandat e tjera IR.) // SHENIM: Vendoseni këtë vlerë shumë të lartë për të fikur në mënyrë efektive zbulimin e PANJOHUR. #përcakto MIN_UNKNOWN_SIZE 12 // ==================== fundi i PARAMETRAVE TUNEABLE =====================

// Përdorni aktivizimin e veçorisë ruajtëse të ruajtjes për mbulim më të plotë të kapjes.

IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, KOHA, e vërtetë);

rezultatet e deshifrimit të rezultateve; // Diku për të ruajtur rezultatet

// Shfaqni gjendjen e lexueshme nga njeriu të një mesazhi A/C nëse mundemi.

void dumpACInfo (deshifro_rezultatet *rezultatet) {Përshkrimi i vargut = ""; #nëse DEKODO_DAIKIN nëse (rezultate-> lloji i deshifrimit == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_DAIKIN #nëse DECODE_FUJITSU_AC nëse (rezultate-> lloji i dekodimit == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultatet-> gjendja, rezultatet-> bit / 8); përshkrim = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR nëse (rezultate-> lloji i dekodimit == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_KELVINATOR #nëse DECODE_TOSHIBA_AC nëse (rezultate-> lloji i deshifrimit == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultatet-> gjendja); përshkrim = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA nëse (rezultate-> lloji i dekodimit == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultatet-> vlera); // Midea përdor vlerën në vend të gjendjes. përshkrim = ac.toString (); } #endif // DECODE_MIDEA // Nëse kemi një përshkrim të lexueshëm nga njeriu të mesazhit, shfaqeni atë. nëse (përshkrimi! = "") Serial.println ("Mesg Desc.:" + përshkrim); }

// Seksioni i kodit ekzekutohet vetëm një herë gjatë fillimit.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); vonesë (500); // Prisni pak që lidhja serike të vendoset.

#nëse DEKODO_HASH

// Injoroni mesazhet me më pak se minimum impulse ndezëse ose fikëse. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DEKODO_HASH irrecv.enableIRIn (); // Nis marrësin}

// Seksioni i përsëritur i kodit

// void loop () {// Kontrolloni nëse kodi IR është marrë. if (irrecv.decode (& results)) {// Shfaq një afat kohor të papërpunuar. uint32_t tani = millis (); Serial.printf ("Vula kohore: %06u. %03u / n", tani / 1000, tani %1000); if (results.overflow) Serial.printf ("PARALAJMRIM: Kodi IR është shumë i madh për tampon (> = %d)." "Ky rezultat nuk duhet besuar derisa të zgjidhet kjo." "Redakto dhe rris CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Shfaq daljen bazë të asaj që gjetëm. Serial.print (resultToHumanReadableBasic (& rezultatet)); dumpACInfo (& rezultatet); // Shfaqni çdo informacion shtesë të A/C nëse e kemi. rendimenti (); // Ushqeni WDT pasi dalja e tekstit mund të marrë pak kohë për t'u printuar.

// Shfaq versionin e bibliotekës me të cilin u kap mesazhi.

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

// Dalja e informacionit të kohës RAW të rezultatit.

Serial.println (resultToTimingInfo (& rezultatet)); rendimenti (); // Ushqeni WDT (përsëri)

// Nxjerr rezultatet si kod burimi

Serial.println (resultToSourceCode (& rezultatet)); Serial.println (""); // Linja bosh midis rendimentit të shënimeve (); // Ushqeni WDT (përsëri)}}

Kur kjo skedë të ngarkohet dhe të funksionojë me monitor serial të hapur, do të dalë kodi për shtypjen e butonit (shiko figurën)

Shkruani kodet që dëshironi të përdorni për përdorim të mëvonshëm. Kam përdorur excel për të shënuar atë që kam për butonat që doja të përdorja (shiko foton)

Kam redaktuar butonat në aktivitetin tim Netflix për të dërguar sinjal pauzë nga telekomanda panasonic.. (shiko foton)

Hapi 3: Shkrimi i Kodit për Dërgimin në Nodered

Shkrimi i Kodit për Dërgimin në Nodered
Shkrimi i Kodit për Dërgimin në Nodered

#ifndef UNIT_TEST #përfshijnë #endif #include

#përfshi

#përfshi

#përfshi

#përfshi

#përfshi

const char* ssid = ""; // Fut SSID këtu char* password = ""; // Fut fjalëkalimin këtu const char *host = ""; // Ip adresa #përcaktoni USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); rezultatet e deshifrimit të rezultateve; void setup () {irrecv.enableIRIn (); // Filloni marrësin USE_SERIAL.filloni (115200); // USE_SERIAL.setDebugOutput (e vërtetë); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

për (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] PRIT %d… / n", t); USE_SERIAL.flush (); vonesa (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, fjalëkalim); } void loop () {if (irrecv.decode (& results)) {

// Ndryshoni këtë vlerë sinjali për atë që keni marrë

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pauzë Sinjali i marrë"); wifisend (pauzë); vonesa (1000);

} nëse (results.value == 0x400401007273) {

USE_SERIAL.println ("e mëparshme");

wifisend ("më parë"); vonesa (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("tjetër"); wifisend ("tjetër"); vonesa (1000); }

irrecv.resume (); // Merr vlerën tjetër} vonesë (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] fillon… / n"); // konfiguroni serverin e tragjedisë dhe url -në http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + të dhëna); USE_SERIAL.print ("[HTTP] MERR… / n"); // filloni lidhjen dhe dërgoni kokën HTTP int httpCode = http. GET (); // httpCode do të jetë negativ në gabim nëse (httpCode> 0) {// Koka e HTTP është dërguar dhe titulli i përgjigjes së serverit është trajtuar USE_SERIAL.printf ("[HTTP] GET… kodi: %d / n", // skedari i gjetur në server

nëse (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (ngarkesë); }} else {USE_SERIAL.printf ("[HTTP] GET … dështoi, gabim: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); vonesë (100); }}

Ky është kodi që kam përdorur në nodemcu tim. Ju do të keni nevojë të keni ato biblioteka të instaluara.

Ju mund të testoni duke përdorur monitor serik dhe shtypni butonat e telekomandës që keni shtuar në kod për të parë përgjigjen..

Në rresht:

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

Ju duhet të ndryshoni [përdoruesin] në përdoruesin tuaj dhe kështu me radhë. PA kllapa. kllapat janë atje për të treguar ndryshimin e fushave të shtrigave.

Ajo linjë gjithashtu nuk do të funksionojë derisa të konfigurojmë rrjedhën tonë në nyje.

Hapi 4: Krijimi i një Rrjedhe në Nodered

Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered
Krijimi i një Rrjedhe në Nodered

Siç u përmend në fillim unë përdor hass.io me nodered. Nëse drejtoni një konfigurim tjetër, do t'ju duhet ta bëni këtë ndryshe! Ju mund të shihni në imazh që kur të shtypni një buton shfaqet në dritaren e korrigjimit …

Nyja e ngarkesës së ndryshimit ndoshta do të ishte anashkaluar nëse do të kisha zgjedhur diçka të ndryshme nga ato të dhëna = në hapin e mëparshëm. Nyja ndërruese që përdor është shumë më e madhe se sa vetëm një pauzë, por vetëm kështu mund të shtoj më shumë sinjale ir për të përdorur chromecast për stacionet radio etj.

Për të luajtur pauzë, mund të përdorni rrjedhën në figurën tjetër.

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "metodë": "merrni", "ngarkoni": false, "swaggerDoc": "", "x": 133, "y": 98, "tela":

Unë hoqa emrin e përdoruesit dhe url -në nga kjo, kështu që ju mund të keni nevojë ta modifikoni atë.

shtoni një nyje ndërprerëse nëse doni të reagoni në më shumë se vetëm një pauzë (shiko foton për shembull)

Në nyjen e ndihmësit në shtëpi për përdorim pauzë:

emri: luaj pauzë chromecastdomain: media_playerShërbimi: media_play_pausedata: {"unit_id": "media_player. [chromecast juaj këtu]"}

për pjesën tjetër thjesht kopjoni atë nyje dhe modifikoni shërbimin në: media_next_track dhe emrin në: chromecast tjetër

Hapi 5: Alexa Opsionale Ndaloni Chromecast

Komanda opsionale shtoni alexa për pauzën e chromecast:

Këtu ka opsione.. Ju mund të bëni një nyje alexa të quajtur pause chromecast që ndalon chromecast, ose mund të bëni një të quajtur pause tv që kontrollon aktivitetin aktual të harmonisë dhe bëni pauzë në varësi të kësaj.

Do ta shtoj këtu më vonë..

Recommended: