Sadržaj:

Pauzirajte Chromcast s daljinskim upravljačem: 5 koraka
Pauzirajte Chromcast s daljinskim upravljačem: 5 koraka

Video: Pauzirajte Chromcast s daljinskim upravljačem: 5 koraka

Video: Pauzirajte Chromcast s daljinskim upravljačem: 5 koraka
Video: ТЕПЕРЬ НЕ ПРОПАДУ 10-ть самоделок ВЫРУЧАТ ГДЕ УГОДНО! 2024, Srpanj
Anonim
Image
Image
Oprema
Oprema

Imam Logitech daljinski upravljač harmonije i pokrećem kućnog pomoćnika na malini pi.

Htio sam moći pauzirati chromecast s daljinskog upravljača, ali imam stari televizor koji to ne podržava putem hdmija. Moja ideja je tada bila koristiti NodeMcu za hvatanje ir signala i pauzu.

Ako ga ne možete natjerati na rad ili imate pitanja, komentirajte u nastavku

Korak 1: Opremanje

Oprema
Oprema
Oprema
Oprema

Potrebna oprema:

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

Ir prijemnik (primjerice ovo:

dupont žice

Micro usb kabel (power nodemcu)

Ja koristim Logitech Harmony -hub

Za moj pristup trebate Raspberry pi s instaliranim i noderedanim hass.io. Neću ulaziti u postavljanje kućnih pomoćnika ovdje. Ako koristite nešto drugo osim kućnog pomoćnika, morate sami prilagoditi stvari.

Morate biti u mogućnosti koristiti Nodemcu na Arduino IDE -u jer ovdje neću ulaziti u to

Korak 2: Daljinski signal

Signal na daljinu
Signal na daljinu
Signal na daljinu
Signal na daljinu
Signal na daljinu
Signal na daljinu
Signal na daljinu
Signal na daljinu

Način na koji sam to učinio bio je kopiranje signala s daljinskog upravljača koji ne koristim u daljinski upravljač.

Koristio sam daljinski za televizor Panasonic TXL32C3E jer to ne ometa moju opremu na prvom katu. To je televizor koji imam gore.

Ako ne koristite sklad, ovo možete preskočiti.

Dakle, za pronalaženje signala upotrijebio sam ovaj nacrt:

/ * * IRremoteESP8266: IRrecvDumpV2 - iscrtavanje detalja IR kodova s IRrecv * IR detektor/demodulator mora biti spojen na ulaz RECV_PIN. * * Autorsko pravo 2009. Ken Shirriff, https://arcfn.com * Autorsko pravo 2017. David Conran * * Primjer dijagrama: * https://arcfn.com * * Promjene: * Verzija 0.3, studeni 2017. * - Podrška za A/C dekodiranje za neke protokole. * Verzija 0.2. Travnja 2017. * - Dekodirajte iz kopije podataka kako bismo mogli početi snimati brže, čime se smanjuje vjerojatnost pogrešnog hvatanja. * Na temelju IrsendDemo verzije Kena Shirriffa od 0.1 srpnja 2009, */

#ifndef UNIT_TEST

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

// ==================== početak TUNEABLE PARAMETERS ====================

// IC detektor/demodulator spojen je na GPIO pin 14 // npr. D5 na ploči NodeMCU. #define RECV_PIN 14

// Brzina prijenosa serijske veze.

// tj. Poruka o statusu bit će poslana na računalo ovom brzinom prijenosa. // Pokušajte izbjeći male brzine poput 9600 jer ćete propustiti poruke i // uzrokovati druge probleme. Preporučuje se 115200 (ili brže). // NAPOMENA: Svakako postavite serijski monitor na istu brzinu. #define BAUD_RATE 115200

// Budući da je ovaj program hvatanje/dekodiranje posebne namjene, upotrijebimo veći

// od normalnog međuspremnika pa možemo rukovati kodovima za daljinski upravljač klima uređaja. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT je br. mili-sekundi bez više podataka prije nego razmotrimo a

// poruka je završila. // Ovaj parametar je zanimljiv kompromis. Što je dulje vrijeme, poruka može biti složenija // složenija. npr. Neki protokoli uređaja brzo će slati // više paketa poruka, poput daljinskih upravljača za klima uređaj. // Air Coniditioner protokoli često imaju značajan jaz (20-40+ms) između // paketa. // Nedostatak velike vrijednosti timeout -a je mnogo manje složenih protokola // šalje više poruka kada se pritisne gumb na daljinskom upravljaču. Jaz između // njih često je također oko 20+ms. To može dovesti do toga da sirovi podaci budu 2-3+ // puta veći nego što je potrebno jer su snimili 2-3+ poruke u jednom // hvatanju. Postavljanje niske vrijednosti vremena čekanja može to riješiti. // Dakle, odabir najbolje vrijednosti TIMEOUT -a za vaš slučaj korištenja je // prilično nijansiran. Sretno i sretan lov. // NAPOMENA: Nemojte prekoračiti MAX_TIMEOUT_MS. Obično 130 ms. #iko DECODE_AC #define TIMEOUT 50U // Neke klima -jedinice imaju praznine u protokolima od ~ 40 ms. // npr. Kelvinator // Ovako velika vrijednost može progutati ponavljanja nekih protokola #else // DECODE_AC #define TIMEOUT 15U // Odgovara većini poruka, a ne guta mnogo ponavljanja. #endif // DECODE_AC // Alternative: // #define TIMEOUT 90U // Odgovara porukama s velikim prazninama poput XMP-1 i nekim klima uređajima //, ali može slučajno progutati ponovljene poruke // u izlaz rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Ovo će postaviti naš trenutno // maksimalni maksimum. Ovako visoke vrijednosti su problematične // jer je to otprilike tipična granica // gdje se većina poruka ponavlja. // npr. Prestat će dekodirati poruku i // početi je slati u serijski broj točno // u vrijeme kada će sljedeća poruka vjerojatno biti // prenesena, a može je i propustiti.

// Postavljamo pakete poruka "UNKNOWN" najmanje veličine do kojih nam je zapravo stalo.

// Ova vrijednost pomaže u smanjenju lažno pozitivne stope detekcije IR pozadinske // buke kao stvarnih poruka. Šanse da se pozadinski IC šum otkrije // kako se poruka povećava s duljinom vrijednosti TIMEOUT. (Vidi gore) // Nedostatak postavljanja ove poruke prevelikom je to što možete propustiti neke valjane // kratke poruke za protokole koje ova knjižnica još ne dekodira. // // Postavite više ako dobijete puno nasumičnih kratkih NEPOZNATIH poruka kada ništa // ne bi trebalo slati poruku. // Postavite niže ako ste sigurni da vaše postavljanje radi, ali ne vidi poruke // s vašeg uređaja. (npr. Ostali IC daljinski upravljači rade.) // NAPOMENA: Postavite ovu vrijednost na vrlo visoku vrijednost kako biste učinkovito isključili NEPOZNATO otkrivanje. #define MIN_UNKNOWN_SIZE 12 // ==================== kraj TUNEABLE PARAMETERS ====================

// Upotrijebite uključivanje značajke spremišta međuspremnika za potpunije pokrivanje snimanja.

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

decode_results rezultate; // Negdje za spremanje rezultata

// Prikažimo stanje čitanja A/C poruke ako možemo.

void dumpACInfo (decode_results *results) {String description = ""; #iko 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-> vrijednost); // Midea koristi vrijednost umjesto stanja. description = ac.toString (); } #endif // DECODE_MIDEA // Ako imamo opis poruke koji je čitljiv ljudima, prikažite ga. if (description! = "") Serial.println ("Opis poruke.:" + opis); }

// Dio koda se pokreće samo jednom pri pokretanju.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); kašnjenje (500); // Pričekajte malo da se serijska veza uspostavi.

#ako DECODE_HASH

// Zanemarite poruke s impulsima uključivanja ili isključivanja manjim od minimalnog. unrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unrecv.enableIRIn (); // Pokreni prijemnik}

// Ponavljajući dio koda

// void loop () {// Provjerite je li primljen IR kod. if (unrecv.decode (& results)) {// Prikaz grube vremenske oznake. uint32_t sada = millis (); Serial.printf ("Vremenska oznaka: %06u. %03u / n", sada / 1000, sada %1000); if (results.overflow) Serial.printf ("UPOZORENJE: IR kod je prevelik za međuspremnik (> = %d)." "Ovom rezultatu ne treba vjerovati dok se to ne riješi." "Uredi i povećaj CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Prikaz osnovnog rezultata onoga što smo pronašli. Serial.print (resultToHumanReadableBasic (& rezultati)); dumpACInfo (& rezultati); // Prikazujemo dodatne podatke o klima uređaju ako ih imamo. prinos(); // Ulažite WDT jer ispis teksta može potrajati.

// Prikaz verzije knjižnice s kojom je poruka snimljena.

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

// Izlaženje RAW vremenskih podataka o rezultatu.

Serial.println (resultToTimingInfo (& rezultati)); prinos(); // Hranite WDT (ponovno)

// Rezultate ispišite kao izvorni kod

Serial.println (resultToSourceCode (& rezultati)); Serial.println (""); // Prazan redak između unosa yield (); // Nahranite WDT (ponovno)}}

Kada se ovaj crtež učita i radi s otvorenim serijskim monitorom, on će ispisati kôd za pritiskanje gumba (vidi sliku)

Zapišite kodove koje želite koristiti za kasniju upotrebu. Koristio sam Excel da zabilježim što sam dobio za gumbe koje sam želio koristiti (vidi sliku)

Uredio sam gumbe u svojoj aktivnosti na Netflixu za slanje signala pauze s daljinskog upravljača Panasonic.. (vidi sliku)

Korak 3: Pisanje koda za slanje na Nodered

Pisanje koda za slanje na Nodered
Pisanje koda za slanje na Nodered

#ifndef UNIT_TEST #include #endif #include

#uključi

#uključi

#uključi

#uključi

#uključi

const char* ssid = ""; // Ovdje unesite SSID concon char* password = ""; // Ovdje unesite lozinku const char *host = ""; // IP adresa #define USE_SERIAL Serijski ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unrecv (RECV_PIN); decode_results rezultate; void setup () {unrecv.enableIRIn (); // Pokretanje prijemnika 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 (); kašnjenje (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, lozinka); } void loop () {if (unrecv.decode (& results)) {{100} {101}

// Promijenite vrijednost ovog signala za onu koju imate

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("signal pauze primljen"); wifisend (stanka); kašnjenje (1000);

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

USE_SERIAL.println ("prethodni");

wifisend ("prethodna"); kašnjenje (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("sljedeći"); kašnjenje (1000); }

unrecv.resume (); // Primanje sljedeće vrijednosti} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] početak… / n"); // konfigurirati poslužitelj tragedije i url http.begin ("https:// [korisnik]: [pass]@[ip]: [port]/chromecastpause? data =" + podaci); USE_SERIAL.print ("[HTTP] DOBI … / n"); // započinjemo vezu i šaljemo HTTP zaglavlje int httpCode = http. GET (); // httpCode će biti negativan u slučaju pogreške ako je (httpCode> 0) {// HTTP zaglavlje poslano i zaglavlje odgovora poslužitelja obrađeno USE_SERIAL.printf ("[HTTP] DOBIJI… kod: %d / n", // datoteka pronađena na poslužitelju

if (httpCode == HTTP_CODE_OK) {Niz korisnih podataka = http.getString (); USE_SERIAL.println (korisni teret); }} else {USE_SERIAL.printf ("[HTTP] GET … nije uspio, greška: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); kašnjenje (100); }}

Ovo je kod koji sam koristio na svom nodemcu. Morat ćete imati instalirane te knjižnice.

Možete testirati pomoću serijskog monitora i pritisnuti daljinske tipke koje ste dodali u kôd da vidite odgovor.

U retku:

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

Morate promijeniti [korisnika] u svog korisnika i tako dalje. BEZ zagrada. zagrade su za prikaz polja vještica za promjenu.

Ta linija također neće raditi sve dok svoj tok ne postavimo u nodered.

Korak 4: Stvaranje toka u Noderedu

Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu
Stvaranje toka u Noderedu

Kao što je spomenuto na početku, koristim hass.io s noderedom. Ako pokrenete drugačiji postav, morat ćete ga promijeniti! Na slici možete vidjeti da se prilikom pritiska na gumb prikazuje u prozoru za otklanjanje pogrešaka …

Čvor promjene korisnog tereta vjerojatno bi se mogao preskočiti da sam odabrao nešto drugačije od tih podataka = u prethodnom koraku. Sklopni čvor koji koristim puno je veći nego samo pauzirajte, ali to je samo zato da mogu dodati više ir signala za upotrebu chromecasta za radio postaje itd.

Za pauzu samo reprodukcije možete upotrijebiti tok na drugoj slici.

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

Uklonio sam ime userpass i url iz ovoga pa ćete ga možda morati urediti.

dodajte prekidač ako želite reagirati na više od pauze (pogledajte sliku na primjer)

U čvoru kućnog pomoćnika za pauziranje upotrebe:

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

za sljedeću pjesmu samo kopirajte taj čvor i uredite uslugu na: media_next_track i ime u: next chromecast

5. korak: Neobavezno Alexa Pause Chromecast

Izborna naredba dodavanja alexa za pauziranje chromecasta:

Ovdje postoje opcije. Možete napraviti jedan alexa čvor pod nazivom pause chromecast koji pauzira chromecast, ili možete napraviti jedan koji se zove pause tv koji provjerava trenutnu aktivnost harmonije i pauzira ovisno o tome.

Ovo ću kasnije dodati ovdje..

Preporučeni: