Kazalo:

Zaustavite Chromcast z daljinskim upravljalnikom: 5 korakov
Zaustavite Chromcast z daljinskim upravljalnikom: 5 korakov

Video: Zaustavite Chromcast z daljinskim upravljalnikom: 5 korakov

Video: Zaustavite Chromcast z daljinskim upravljalnikom: 5 korakov
Video: ТЕПЕРЬ НЕ ПРОПАДУ 10-ть самоделок ВЫРУЧАТ ГДЕ УГОДНО! 2024, Julij
Anonim
Image
Image
Oprema
Oprema

Imam Logitechov daljinski upravljalnik harmonije in tečem domačega pomočnika na malini pi.

Želel sem začasno ustaviti chromecast z daljinskega upravljalnika, vendar imam star televizor, ki tega ne podpira prek HDMI -ja. Moja ideja je bila potem uporabiti NodeMcu za ulov ir signala in premor.

Če ne morete delovati ali imate vprašanja, komentirajte spodaj

1. korak: Oprema

Oprema
Oprema
Oprema
Oprema

Potrebna oprema:

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

Ir sprejemnik (na primer:

dupont žice

Micro USB kabel (napajalni nodemcu)

Uporabljam Logitech Harmony -hub

Za moj pristop potrebujete Raspberry pi z nameščenim in noderedenim hass.io. Ne bom se spuščal v nastavitev domačih pomočnikov. Če uporabljate kaj drugega kot pomočnika za dom, morate stvari prilagoditi sami.

Nodemcu morate uporabljati v Arduino IDE, ker se tukaj ne bom spuščal v to

Korak: Oddaljeni signal

Signal na daljavo
Signal na daljavo
Signal na daljavo
Signal na daljavo
Signal na daljavo
Signal na daljavo
Signal na daljavo
Signal na daljavo

To sem naredil tako, da sem kopiral signal z daljinskega upravljalnika, ki ga ne uporabljam, v daljinski upravljalnik harmonije.

Za televizor Panasonic TXL32C3E sem uporabil daljinski upravljalnik, ki ne moti moje opreme v prvem nadstropju. To je tv, ki ga imam zgoraj.

Če ne uporabljate harmonije, lahko to preskočite.

Torej, za iskanje signala sem uporabil ta scenarij:

/ * * IRremoteESP8266: IRrecvDumpV2 - izpis podatkov o kodah IR z IRrecv * IR detektor/demodulator mora biti priključen na vhod RECV_PIN. * * Avtorska pravica 2009 Ken Shirriff, https://arcfn.com * Avtorska pravica 2017 David Conran * * Primer sheme vezja: * https://arcfn.com * * Spremembe: * Različica 0.3 november 2017 * - Podpora za klimatsko napravo dekodiranje za nekatere protokole. * Različica 0.2 april, 2017 * - Dešifrirajte iz kopije podatkov, da lahko začnemo hitreje zajemati in tako * zmanjšamo verjetnost napačnih zajemov. * Na podlagi različice IrsendDemo Kena Shirriffa od 0.1 julija 2009, */

#ifndef UNIT_TEST

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

// ==================== Začetek NASTAVLJIVIH PARAMETROV ====================

// IR detektor/demodulator je priključen na pin 14 GPIO // npr. D5 na plošči NodeMCU. #define RECV_PIN 14

// Stopnja prenosa serijske povezave.

// to pomeni, da bo sporočilo o stanju poslano v računalnik s to hitrostjo prenosa. // Poskusite se izogniti počasnim hitrostim, kot je 9600, saj boste zamudili sporočila in // povzročali druge težave. Priporoča se 115200 (ali hitreje). // OPOMBA: Serijski monitor nastavite na enako hitrost. #define BAUD_RATE 115200

// Ker je ta program zajem/dekoder za posebne namene, uporabimo večji

// kot običajni vmesni pomnilnik, tako da lahko upravljamo kode za daljinsko upravljanje klimatske naprave. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT je št. mili-sekund nič več podatkov, preden upoštevamo a

// sporočilo se je končalo. // Ta parameter je zanimiv kompromis. Daljša je časovna omejitev, bolj zapleteno sporočilo lahko zajame. npr. Nekateri protokoli naprav bodo hitro pošiljali // več paketov sporočil, na primer daljine za klimatsko napravo. // Air Coniditioner protokoli imajo pogosto precejšnjo vrzel (20-40+ms) med // paketi. // Slaba stran velike vrednosti časovne omejitve je veliko manj zapletenih protokolov // pošiljanje več sporočil, ko pritisnete gumb na daljinskem upravljalniku. Vrzel med // njima je pogosto tudi okoli 20+ms. To lahko povzroči, da so neobdelani podatki 2-3 krat večji, kot je potrebno, saj so zajeli 2-3 sporočila v enem samem zajemu. Nastavitev nizke vrednosti časovne omejitve lahko to reši. // Torej je izbira najboljše vrednosti TIMEOUT za vašo uporabo // precej niansirana. Vso srečo in srečen lov. // OPOMBA: Ne prekoračite MAX_TIMEOUT_MS. Običajno 130 ms. #if DECODE_AC #define TIMEOUT 50U // Nekatere klimatske naprave imajo v svojih protokolih vrzeli ~ 40 ms. // npr. Kelvinator // Tako velika vrednost lahko pogoltne ponovitve nekaterih protokolov #else // DECODE_AC #define TIMEOUT 15U // ustreza večini sporočil, hkrati pa ne pogoltne veliko ponovitev. #endif // DECODE_AC // Alternative: // #define TIMEOUT 90U // Ustreza sporočilom z velikimi vrzeli, kot sta XMP-1 in nekatere klimatske naprave //, vendar lahko pomotoma pogoltne večkratna sporočila // v izhodu rawData . // #define TIMEOUT MAX_TIMEOUT_MS // S tem bomo nastavili // trenutno največjo dovoljeno vrednost. Tako visoke vrednosti so problematične // ker je to približno tipična meja // kjer se večina sporočil ponovi. // npr. Prenehalo bo dekodiranje sporočila in // ga začelo pošiljati v serijo natančno // v času, ko bo verjetno // poslano naslednje sporočilo, in ga morda zamudi.

// Nastavimo najmanjše pakete sporočil "NEPOZNATO", ki jih dejansko zanimamo.

// Ta vrednost pomaga zmanjšati število lažno pozitivnih detekcij šuma IR ozadja // kot resničnih sporočil. Možnosti, da se v ozadju zazna IR šum //, ko se sporočilo poveča z dolžino vrednosti TIMEOUT. (Glejte zgoraj) // Slaba stran nastavitve tega sporočila na preveliko je, da lahko zamudite nekaj veljavnih // kratkih sporočil za protokole, ki jih ta knjižnica še ne dekodira. // // Nastavite višje, če dobite veliko naključnih kratkih sporočil UNKNOWN, ko nič ne bi smelo pošiljati sporočila. // Nastavite nižje, če ste prepričani, da nastavitev deluje, vendar ne vidi sporočil // iz vaše naprave. (npr. Delujejo drugi daljinski upravljalniki IR.) // OPOMBA: To vrednost nastavite zelo visoko, da učinkovito izklopite odkrivanje NEPOZNATEGA. #define MIN_UNKNOWN_SIZE 12 // ==================== konec TUNEABLE PARAMETERS ====================

// Uporabite vklop funkcije shranjevanja vmesnega pomnilnika za popolnejšo pokritost zajema.

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

decode_results rezultati; // Nekje za shranjevanje rezultatov

// Če je mogoče, prikažemo človeško berljivo stanje A/C sporočila.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (rezultati-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultati-> stanje, rezultati-> bitovi / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultati-> stanje); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultati-> vrednost); // Midea namesto stanja uporablja vrednost. description = ac.toString (); } #endif // DECODE_MIDEA // Če imamo razumljiv opis sporočila, ga prikažemo. if (description! = "") Serial.println ("Opis sporočila.:" + opis); }

// Del kode se zažene le enkrat ob zagonu.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); zamuda (500); // Počakajte malo, da se vzpostavi serijska povezava.

#če DECODE_HASH

// Prezrite sporočila z manj kot minimalnimi impulzi vklopa ali izklopa. unrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unrecv.enableIRIn (); // zaženite sprejemnik}

// Ponavljajoči se del kode

// void loop () {// Preverite, ali je bila sprejeta koda IR. if (unrecv.decode (& results)) {// Prikaz surovega časovnega žiga. uint32_t zdaj = millis (); Serial.printf ("Časovni žig: %06u. %03u / n", zdaj / 1000, zdaj %1000); if (results.overflow) Serial.printf ("OPOZORILO: IR koda je prevelika za vmesni pomnilnik (> = %d)." "Temu rezultatu ne bi smeli zaupati, dokler tega ne odpravite." "Uredite in povečajte CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Prikaz osnovnih rezultatov tega, kar smo našli. Serial.print (resultToHumanReadableBasic (& rezultati)); dumpACInfo (& rezultati); // Prikažemo dodatne podatke o klimatizaciji, če jih imamo. donos (); // Vnesite WDT, saj lahko tiskanje besedila traja nekaj časa.

// Prikaz različice knjižnice, s katero je bilo posneto sporočilo.

Serial.print ("Knjižnica: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// Izhodne informacije o času RAW rezultata.

Serial.println (resultToTimingInfo (& rezultati)); donos (); // Hranite WDT (spet)

// Rezultate iznesite kot izvorno kodo

Serial.println (resultToSourceCode (& rezultati)); Serial.println (""); // prazna vrstica med vnosi yield (); // Nahranite WDT (znova)}}

Ko je ta skica naložena in teče z odprtim serijskim monitorjem, bo prikazala kodo za pritisk na gumb (glej sliko)

Zapišite kode, ki jih želite uporabiti za kasnejšo uporabo. Z Excelom sem zapisal, kaj sem dobil za gumbe, ki sem jih želel uporabiti (glej sliko)

V svoji dejavnosti Netflix sem uredil gumbe za pošiljanje signala premora iz daljinskega upravljalnika Panasonic.. (glej sliko)

3. korak: Pisanje kode za pošiljanje v Nodered

Pisanje kode za pošiljanje v Nodered
Pisanje kode za pošiljanje v Nodered

#ifndef UNIT_TEST #include #endif #include

#vključi

#vključi

#vključi

#vključi

#vključi

const char* ssid = ""; // tukaj vnesite SSID concon char* password = ""; // Vnesite geslo tukaj const char *host = ""; // IP naslov #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unrecv (RECV_PIN); decode_results rezultati; void setup () {unrecv.enableIRIn (); // zaženite sprejemnik USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); zamuda (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, geslo); } void loop () {if (unrecv.decode (& results)) {

// Spremenite vrednost tega signala za tistega, ki ga imate

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("signal za premor prejet"); wifisend (premor); zamuda (1000);

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

USE_SERIAL.println ("prejšnji");

wifisend ("prejšnji"); zamuda (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("naslednji"); wifisend ("naslednji"); zamuda (1000); }

unrecv.resume (); // Prejemanje naslednje vrednosti} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] začetek … / n"); // konfiguriramo strežnik traged in url http.begin ("https:// [uporabnik]: [pass]@[ip]: [port]/chromecastpause? data =" + podatki); USE_SERIAL.print ("[HTTP] DOBI… / n"); // vzpostavimo povezavo in pošljemo glavo HTTP int httpCode = http. GET (); // httpCode bo pri napaki negativen, če je bila (httpCode> 0) {// poslana glava HTTP in je bila odzivna glava strežnika obdelana USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // datoteka najdena na strežniku

if (httpCode == HTTP_CODE_OK) {Niz nizov = http.getString (); USE_SERIAL.println (koristna obremenitev); }} else {USE_SERIAL.printf ("[HTTP] GET… failed, error: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); zamuda (100); }}

To je koda, ki sem jo uporabil na svojem nodemcu. Te knjižnice morate imeti nameščene.

Preizkusite lahko s serijskim monitorjem in pritisnete gumbe na daljinskem upravljalniku, ki ste jih dodali v kodo, da vidite odziv.

V vrstici:

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

Spremeniti morate [uporabnika] v svojega uporabnika itd. BREZ oklepajev. oklepaji so za prikaz čarovniških polj za spreminjanje.

Ta vrstica prav tako ne bo delovala, dokler ne nastavimo pretoka v vozlišču.

4. korak: Ustvarjanje toka v Nodered

Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu
Ustvarjanje toka v Noderedu

Kot je bilo omenjeno na začetku, uporabljam hass.io z nodered. Če zaženete drugo nastavitev, boste morali to narediti drugače! Na sliki lahko vidite, da se ob pritisku na gumb prikaže v oknu za odpravljanje napak …

Vozlišče spremembe koristnega tovora bi verjetno lahko preskočili, če bi v prejšnjem koraku izbral kaj drugega, kot so podatki =. Stikalo, ki ga uporabljam, je veliko večje, le začasno ustavim, toda samo zato, da bi lahko dodal več ir signalov za uporabo chromecasta za radijske postaje itd.

Za pavzo samo predvajanja lahko uporabite tok na drugi sliki.

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

Iz tega sem odstranil ime userpass in url, zato ga boste morda morali urediti.

dodajte stikalo, če želite reagirati na več kot le premor (glejte sliko na primer)

V vozlišču domačega pomočnika za začasno uporabo:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [vaš chromecast tukaj]"}

za naslednjo skladbo samo kopirajte to vozlišče in uredite storitev v: media_next_track in ime v: next chromecast

5. korak: Izbirni Alexa Pause Chromecast

Izbirno dodajte ukaz alexa za premor chromecast:

Tu so možnosti. Lahko naredite eno vozlišče alexa, imenovano pause chromecast, ki zaustavi chromecast, ali pa naredite enega, ki se imenuje pause tv, ki preveri trenutno harmonično dejavnost in začasno ustavi, odvisno od tega.

Tole bom dodal kasneje..

Priporočena: