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, Juli
Anonim
Image
Image
Oprema
Oprema

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

Htio sam biti u mogućnosti pauzirati chromecast sa 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 ne možete uspjeti ili imate pitanja, komentirajte ispod

Korak 1: Opremanje

Oprema
Oprema
Oprema
Oprema

Potrebna oprema:

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

Vaš prijemnik (kao npr. Ovo:

dupont žice

Micro usb kabel (power nodemcu)

Koristim Logitech Harmony -hub

Za moj pristup, potreban vam je Raspberry pi sa instaliranim i noderedanim hass.io. Neću ulaziti u postavljanje stvari za pomoć kod kuće 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 ja ovdje neću ulaziti u to

Korak 2: Daljinski signal

Daljinski signal
Daljinski signal
Daljinski signal
Daljinski signal
Daljinski signal
Daljinski signal
Daljinski signal
Daljinski signal

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

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

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

Dakle, za pronalaženje signala upotrijebio sam ovu scenu:

/ * * IRremoteESP8266: IRrecvDumpV2 - iscrtavanje detalja IR kodova sa 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, april 2017. * - Dekodirajte iz kopije podataka kako bismo mogli početi snimati brže, čime se smanjuje vjerovatnoća pogrešnog hvatanja. * Na osnovu IrsendDemo verzije Kena Shirriffa od 0.1 jula 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 je spojen na GPIO pin 14 // npr. D5 na NodeMCU ploči. #define RECV_PIN 14

// Brzina prijenosa serijske veze.

// tj. Poruka o statusu bit će poslana na PC 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 tako da možemo rukovati kodovima za daljinski upravljač klima uređaja. #define CAPTURE_BUFFER_SIZE 1024

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

// poruka je završena. // Ovaj parametar je zanimljiv kompromis. Što je vreme duže, // složenija poruka može biti uhvaćena. 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 dugme na daljinskom upravljaču. Jaz između // njih često je i 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 riješiti ovo. // Dakle, odabir najbolje TIMEOUT vrijednosti za vašu upotrebu u određenom slučaju je // prilično nijansiran. Sretno i sretan lov. // NAPOMENA: Nemojte prekoračiti MAX_TIMEOUT_MS. Obično 130 ms. #if DECODE_AC #define TIMEOUT 50U // Neke klima -jedinice imaju praznine u protokolima od ~ 40ms. // 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 // maksimum. Ovako visoke vrijednosti su problematične // jer je to otprilike tipična granica // gdje se većina poruka ponavlja. // npr. On će prestati dekodirati poruku i // početi je slati u serijski broj točno // u vrijeme kada je sljedeća poruka vjerovatno // za prijenos, a može je i propustiti.

// Postavljamo pakete poruka "UNKNOWN" najmanje veličine do kojih nam je zaista 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 dužinom vrijednosti TIMEOUT. (Vidi gore) // Nedostatak postavljanja ove poruke prevelikom je to što možete propustiti // valjane kratke poruke za protokole koje ova biblioteka još ne dekodira. // // Postavite više ako dobijete puno nasumičnih kratkih UNKNOWN poruka kada ništa // ne bi trebalo slati poruku. // Postavite niže ako ste sigurni da vaša postavka radi, ali ne vidi poruke // s vašeg uređaja. (npr. Drugi daljinski upravljači rade.) // NAPOMENA: Postavite ovu vrijednost na vrlo visoku vrijednost kako biste efikasno isključili NEPOZNATU detekciju. #define MIN_UNKNOWN_SIZE 12 // ==================== kraj TUNEABLE PARAMETERS ====================

// Koristite uključivanje funkcije spremišta međuspremnika za potpunije pokrivanje snimanja.

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

decode_results rezultati; // Negdje za spremanje rezultata

// Ako možemo, prikažemo stanje čitljive poruke klima uređaja.

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 #i 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); // Sačekajte malo da se serijska veza uspostavi.

#i DECODE_HASH

// Zanemarivanje poruka s impulsima uključivanja ili isključivanja manjim od minimalnog. unrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irecv.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 ovo ne riješi." "Uredite i povećajte CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Prikazujemo osnovni izlaz onoga što smo pronašli. Serial.print (resultToHumanReadableBasic (& rezultati)); dumpACInfo (& rezultati); // Prikazujemo dodatne informacije o klima uređaju ako ih imamo. yield (); // Ulažite WDT jer ispis teksta može potrajati.

// Prikaz verzije biblioteke s kojom je poruka snimljena.

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

// Izlaženje RAW vremenskih podataka o rezultatu.

Serial.println (resultToTimingInfo (& rezultati)); yield (); // Hranite WDT (ponovo)

// Rezultate ispišite kao izvorni kod

Serial.println (resultToSourceCode (& rezultati)); Serial.println (""); // Prazan red između unosa yield (); // Hranite WDT (ponovo)}}

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

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

Uredio sam gumbe u svojoj aktivnosti na Netflixu da pošaljem signal 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

#include

#include

#include

#include

#include

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 rezultati; 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 ("[PODEŠAVANJE] ČEKA %d… / n", t); USE_SERIAL.flush (); kašnjenje (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, lozinka); } void loop () {if (unrecv.decode (& results)) {

// Promijenite vrijednost ovog signala za onu koju imate

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

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

USE_SERIAL.println ("prethodno");

wifisend ("prev"); kašnjenje (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("next"); 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 greške ako je (httpCode> 0) {// HTTP zaglavlje poslano i zaglavlje odgovora servera je obrađeno USE_SERIAL.printf ("[HTTP] DOBIJI… kod: %d / n", // datoteka pronađena na serveru

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

Ovo je kod koji sam koristio na svom nodemcu -u. Morate imati instalirane te biblioteke.

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

U redu:

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

Morate promijeniti [korisnika] u svog korisnika i tako dalje. BEZ zagrada. zagrade su za prikazivanje polja veštica za promenu.

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

Korak 4: Kreiranje toka u Noderedu

Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu
Kreiranje toka u Noderedu

Kao što je spomenuto na početku, koristim hass.io sa noderedom. Ako pokrenete drugačije postavljanje, morat ćete ovo učiniti drugačijim! Na slici možete vidjeti da se prilikom pritiska na dugme prikazuje u prozoru za otklanjanje grešaka …

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

Za pauzu samo reprodukcije možete koristiti 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 možda morati to 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

Korak 5: Opcionalno Alexa Pause Chromecast

Opcionalna 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 cu dodati kasnije..

Preporučuje se: