Turinys:

Pristabdykite „Chromcast“naudodami nuotolinio valdymo pultą: 5 žingsniai
Pristabdykite „Chromcast“naudodami nuotolinio valdymo pultą: 5 žingsniai

Video: Pristabdykite „Chromcast“naudodami nuotolinio valdymo pultą: 5 žingsniai

Video: Pristabdykite „Chromcast“naudodami nuotolinio valdymo pultą: 5 žingsniai
Video: Kaip perduoti „YouTube“ turinį į išmanųjį TV ar srautinį įrenginį 2024, Liepa
Anonim
Image
Image
Įrengimas
Įrengimas

Turiu „Logitech“harmonijos nuotolinio valdymo pultą ir paleidžiu namų asistentą su aviečių pi.

Norėjau, kad galėčiau pristabdyti „Chromecast“iš savo nuotolinio valdymo pulto, bet turiu seną televizorių, kuris to nepalaiko per hdmi. Tada mano idėja buvo naudoti „NodeMcu“, kad sugautų ir signalą ir pristabdytų.

Jei jums nepavyksta to padaryti arba turite klausimų, pakomentuokite žemiau

1 žingsnis: įrengimas

Įrengimas
Įrengimas
Įrengimas
Įrengimas

Reikalinga įranga:

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

Ir imtuvas (pvz., Tai:

dupontiniai laidai

Mikro USB kabelis (maitinimo nodemcu)

Aš naudoju „Logitech Harmony -hub“

Mano požiūriu, jums reikia Raspberry pi su hass.io įdiegta ir modifikuota. Aš čia nesiruošiu kurti namų pagalbos. Jei naudojate ką nors kitą nei namų asistentas, turite patys pritaikyti daiktus.

Turite mokėti naudoti „Nodemcu“„Arduino IDE“, nes čia aš to nesileisiu

2 žingsnis: nuotolinis signalas

Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas
Nuotolinis signalas

Aš tai padariau kopijuodamas signalą iš nuotolinio valdymo pulto, kurio nenaudoju, į nuotolinio valdymo pultą.

„Panasonic“televizoriaus modeliui TXL32C3E naudojau nuotolinio valdymo pultą, nes tai netrukdo mano pirmame aukšte esančiai įrangai. Tai televizorius, kurį turiu viršuje.

Jei nenaudojate harmonijos, galite tai praleisti.

Taigi, norėdamas rasti signalą, naudoju šį eskizą:

/ * * IRremoteESP8266: IRrecvDumpV2 - išsami informacija apie IR kodus su IRrecv * Prie įvesties RECV_PIN turi būti prijungtas IR detektorius/demoduliatorius. * * Autorių teisės 2009 Ken Shirriff, https://arcfn.com * Autorių teisės 2017 David Conran * * Pavyzdinė schema: * https://arcfn.com * * Pakeitimai: * 2017 m. Lapkričio 3 d. Versija * - A/C palaikymas kai kurių protokolų dekodavimas. * 2017 m. Balandžio mėn. 0.2 versija * - iššifruokite iš duomenų kopijos, kad galėtume greičiau užfiksuoti, taip * sumažindami klaidingų gaudymų tikimybę. * Remiantis Ken Shirriff „IrsendDemo“versija, 2009 m. Liepos 0,1 d., */

#ifndef UNIT_TEST

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

// ==================== TUNEABLE PARAMETRŲ pradžia ====================

// Prie GPIO kištuko 14 prijungtas IR detektorius/demoduliatorius // pvz. D5 „NodeMCU“plokštėje. #define RECV_PIN 14

// Serijinio ryšio perdavimo sparta.

// t.y. būsenos pranešimas bus siunčiamas į kompiuterį tokiu perdavimo greičiu. // Stenkitės vengti lėto greičio, pavyzdžiui, 9600, nes praleisite pranešimus ir // sukelsite kitų problemų. Rekomenduojama 115200 (arba greitesnė). // PASTABA: įsitikinkite, kad serijinį monitorių nustatėte tokiu pačiu greičiu. #define BAUD_RATE 115200

// Kadangi ši programa yra specialios paskirties fiksavimo/dekodavimo priemonė, naudokime didesnę

// nei įprastas buferis, kad galėtume tvarkyti oro kondicionieriaus nuotolinius kodus. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT yra Nr. milisekundžių be duomenų, prieš svarstydami a

// pranešimas baigtas. // Šis parametras yra įdomus kompromisas. Kuo ilgesnis laikas, tuo // sudėtingesnis pranešimas, kurį jis gali užfiksuoti. pvz. Kai kurie įrenginių protokolai, pvz., Oro kondicionieriaus nuotolinio valdymo pultai, greitai išsiųs // kelis pranešimų paketus. // „Air Coniditioner“protokolai dažnai turi didelį tarpą (20–40+ms) tarp paketų. // Didelės skirtojo laiko vertės minusas yra daug mažiau sudėtingų protokolų // siunčia kelis pranešimus, kai nuotolinio valdymo pulto mygtukas yra nuspaustas. Tarpas tarp // dažnai taip pat yra apie 20+ms. Dėl to neapdoroti duomenys gali būti 2–3+ // kartus didesni nei reikia, nes jie užfiksavo 2–3+ pranešimus vienu // fiksavimu. Nustačius mažą skirtojo laiko reikšmę, tai gali būti išspręsta. // Taigi, pasirinkti tinkamiausią TIMEOUT vertę konkrečiam atvejui yra // gana niuansuota. Sėkmės ir laimingos medžioklės. // PASTABA: neviršykite MAX_TIMEOUT_MS. Paprastai 130 ms. #if DECODE_AC #define TIMEOUT 50U // Kai kurių oro kondicionavimo įrenginių protokoluose yra ~ 40 ms spragų. // pvz. Kelvinator // Tokia didelė vertė gali praryti kai kurių protokolų kartojimus #else // DECODE_AC #define TIMEOUT 15U // Tinka daugumai pranešimų, tačiau nepraryja daug kartojimų. #endif // DECODE_AC // Alternatyvos: // #define TIMEOUT 90U // Tinka žinutėms su didelėmis spragomis, tokiomis kaip XMP-1 ir kai kurie oro kondicionieriai //, tačiau gali netyčia nuryti pasikartojančius pranešimus // į rawData išvestį. // #define TIMEOUT MAX_TIMEOUT_MS // Tai nustatys didžiausią šiuo metu leidžiamą //. Tokios didelės vertės yra problematiškos // nes tai yra maždaug tipinė riba //, kur kartojasi dauguma pranešimų. // pvz. Jis nustos iššifruoti pranešimą ir // pradės jį siųsti į serijinį tiksliai // tuo metu, kai greičiausiai // bus perduotas kitas pranešimas, ir gali jo nepastebėti.

// Nustatykite mažiausio dydžio „UNKNOWN“pranešimų paketus, kurie mums iš tikrųjų rūpi.

// Ši vertė padeda sumažinti klaidingai teigiamą IR fono aptikimo dažnį // triukšmą kaip tikrus pranešimus. Fono IR triukšmo aptikimo tikimybė // kaip pranešimas didėja ilgėjant TIMEOUT reikšmei. (Žr. Aukščiau) // Šio pranešimo nustatymo per didelis trūkumas yra tai, kad galite praleisti keletą galiojančių // trumpųjų pranešimų protokolams, kurių ši biblioteka dar neiššifruoja. // // Nustatykite aukščiau, jei gausite daug atsitiktinių trumpų nežinomų pranešimų, kai niekas // neturėtų siųsti pranešimo. // Nustatykite žemesnę, jei esate tikri, kad jūsų sąranka veikia, bet ji nemato pranešimų // iš jūsų įrenginio. (pvz., veikia kiti IR nuotolinio valdymo pulteliai.) // PASTABA: nustatykite šią vertę labai didelę, kad veiksmingai išjungtumėte NEPATIKTĄ aptikimą. #define MIN_UNKNOWN_SIZE 12 // ==================== Derinamųjų parametrų pabaiga ====================

// Norėdami įjungti išsamesnę fiksavimo aprėptį, naudokite įjungimo buferio funkciją.

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

decode_results rezultatai; // Kažkur išsaugoti rezultatus

// Jei galime, parodykite žmonėms skaitomą oro kondicionavimo pranešimo būseną.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultatai-> būsena, rezultatai-> bitai / 8); aprašymas = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultatai-> būsena); aprašymas = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultatai-> vertė); // „Midea“vietoj būsenos naudoja vertę. aprašymas = ac.toString (); } #endif // DECODE_MIDEA // Jei gavome žmonėms suprantamą pranešimo aprašymą, parodykite jį. if (description! = "") Serial.println ("Mesg Desc.:" + aprašymas); }

// Kodo dalis paleidžiama tik vieną kartą paleidžiant.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); vėlavimas (500); // Šiek tiek palaukite, kol bus sukurtas nuoseklusis ryšys.

#jei DECODE_HASH

// Ignoruoti pranešimus, kurių įjungimo arba išjungimo impulsai yra mažesni nei minimalūs. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Paleiskite imtuvą}

// Pasikartojantis kodo skyrius

// void loop () {// Patikrinkite, ar gautas IR kodas. if (irrecv.decode (& rezultatai)) {// Rodyti neapdorotą laiko žymą. uint32_t dabar = milis (); Serial.printf ("Laiko žyma: %06u. %03u / n", dabar / 1000, dabar %1000); if (results.overflow) Serial.printf ("ĮSPĖJIMAS: IR kodas per didelis buferiui (> = %d)." "Šis rezultatas neturėtų būti patikimas, kol tai nebus išspręsta." "Redaguoti ir padidinti CAPTURE_BUFFER_SIZE. / n “, CAPTURE_BUFFER_SIZE); // Rodyti pagrindinius rezultatus, kuriuos radome. Serial.print (resultToHumanReadableBasic (& rezultatai)); dumpACInfo (& rezultatai); // Rodyti bet kokią papildomą oro kondicionavimo informaciją, jei ją turime. išeiga (); // Pateikite WDT, nes teksto išvestis gali užtrukti.

// Rodyti bibliotekos versiją, su kuria buvo užfiksuotas pranešimas.

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

// Išveskite rezultato RAW laiko informaciją.

Serial.println (resultToTimingInfo (& rezultatai)); išeiga (); // Pateikite WDT (dar kartą)

// Išveskite rezultatus kaip šaltinio kodą

Serial.println (resultToSourceCode (& rezultatai)); Serial.println (""); // Tuščia eilutė tarp įrašų return (); // Pateikite WDT (dar kartą)}}

Kai šis eskizas bus įkeltas ir paleistas atidarius serijinį monitorių, jis išves mygtuko paspaudimo kodą (žr. Paveikslėlį)

Užsirašykite kodus, kuriuos norite naudoti vėliau. Aš naudoju „Excel“, kad užrašyčiau, ką gavau už mygtukus, kuriuos norėjau naudoti (žr. Paveikslėlį)

Redagavau „Netflix“veiklos mygtukus, kad galėčiau siųsti pauzės signalą iš „Panasonic“nuotolinio valdymo pulto. (Žr. Paveikslėlį)

3 veiksmas: siuntimo į „Nodered“kodo rašymas

Siuntimo į „Nodered“kodo rašymas
Siuntimo į „Nodered“kodo rašymas

#ifndef UNIT_TEST #include #endif #include

#įtraukti

#įtraukti

#įtraukti

#įtraukti

#įtraukti

const char* ssid = ""; // Čia įveskite SSID char* password = ""; // Čia įveskite slaptažodį const char *host = ""; // IP adresas #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results rezultatai; void setup () {irrecv.enableIRIn (); // Paleiskite imtuvą USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (tiesa); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

už (uint8_t t = 4; t> 0; t--) {

USE_SERIAL.printf ("[SETUP] PALAUKITE %d… / n", t); USE_SERIAL.flush (); vėlavimas (1000); } „WiFi.mode“(WIFI_STA); WiFiMulti.addAP (ssid, slaptažodis); } void loop () {if (irrecv.decode (ir rezultatai)) {

// Pakeiskite šią signalo vertę tam, kurį gavote

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pauzė signalas gautas"); wifisend (pauzė); vėlavimas (1000);

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

USE_SERIAL.println ("ankstesnis");

wifisend („ankstesnis“); vėlavimas (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("kitas"); wifisend („kitas“); vėlavimas (1000); }

irrecv.resume (); // Kitos vertės gavimas} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print („[HTTP] prasideda… / n“); // sukonfigūruoti tragedijos serverį ir URL http.begin ("https:// [vartotojas]: [leidimas]@[ip]: [prievadas]/chromecastpause? data =" + duomenys); USE_SERIAL.print („[HTTP] GET… / n“); // pradėti ryšį ir siųsti HTTP antraštę int httpCode = http. GET (); // httpCode bus neigiamas klaidos atveju, jei (httpCode> 0) {// HTTP antraštė buvo išsiųsta ir serverio atsakymo antraštė buvo apdorota USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // failas rastas serveryje

if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (naudingoji apkrova); }} else {USE_SERIAL.printf ("[HTTP] GET … nepavyko, klaida: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); vėlavimas (100); }}

Tai kodas, kurį naudoju savo „nodemcu“. Jums reikės įdiegti šias bibliotekas.

Galite išbandyti naudodami nuoseklųjį monitorių ir paspausdami nuotolinius mygtukus, kuriuos pridėjote kodu, kad pamatytumėte atsakymą.

Eilutėje:

http.begin ("https:// [vartotojas]: [leidimas]@[ip]: [prievadas]/chromecastpause? data =" + duomenys);

Turite pakeisti [user] į savo vartotoją ir pan. BE skliaustų. skliausteliuose yra raganų laukai, kuriuos reikia keisti.

Ši linija taip pat neveiks, kol nenustatysime savo srauto.

4 žingsnis: sukurkite srautą „Nodered“

Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“
Srauto kūrimas „Nodered“

Kaip minėta pradžioje, aš naudoju hass.io su nodered. Jei vykdysite kitą sąranką, turėsite tai padaryti kitaip! Paveikslėlyje galite pamatyti, kad paspaudus mygtuką, jis rodomas derinimo lange …

Pakeisti naudingosios apkrovos mazgą tikriausiai būtų buvę galima praleisti, jei ankstesniame žingsnyje būčiau pasirinkęs kažką kitokio, nei tie duomenys =. Mano naudojamas jungiklio mazgas yra daug didesnis, o tik pertrauka, bet tai tik tam, kad galėčiau pridėti daugiau signalų, kad galėčiau naudoti „Chromecast“radijo stotims ir pan.

Norėdami paleisti žaidimą, galite naudoti kitame paveikslėlyje pateiktą srautą.

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

Aš pašalinau vardą userpass ir url iš to, todėl gali tekti jį redaguoti.

pridėkite jungiklio mazgą, jei norite reaguoti ne tik į pristabdymą (žr., pavyzdžiui, paveikslėlį)

Namų asistento mazge, skirtame pristabdyti:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [jūsų chromecast čia]"}

kitam takeliui tiesiog nukopijuokite tą mazgą ir redaguokite paslaugą į: media_next_track ir pavadinkite: next chromecast

5 veiksmas: pasirinktinai „Alexa“pristabdykite „Chromecast“

Neprivaloma pridėti komandą „alexa“pristabdyti „Chromecast“:

Čia yra parinkčių.. Galite sukurti vieną alexa nnode, pavadintą pause chromecast, kuri pristabdo chromecast, arba galite sukurti pauzės televizorių, kuris patikrins dabartinę harmonijos veiklą ir pristabdys, priklausomai nuo to.

Tai vėliau pridėsiu čia..

Rekomenduojamas: