Indholdsfortegnelse:

Sæt Chromcast på pause med en fjernbetjening: 5 trin
Sæt Chromcast på pause med en fjernbetjening: 5 trin

Video: Sæt Chromcast på pause med en fjernbetjening: 5 trin

Video: Sæt Chromcast på pause med en fjernbetjening: 5 trin
Video: How To Use the New Chromecast Remote to Control Your TV 2024, Juli
Anonim
Image
Image
Udstyr
Udstyr

Jeg har en Logitech Harmony -fjernbetjening og kører hjemmeassistent på en hindbærpi.

Jeg ville have mulighed for at sætte Chromecast på pause fra min fjernbetjening, men jeg har et gammelt tv, der ikke understøtter dette via hdmi. Min idé var derefter at bruge en NodeMcu til at fange IR -signalet og holde pause.

Hvis du ikke kan få det til at fungere eller har spørgsmål, kan du kommentere herunder

Trin 1: Udstyr

Udstyr
Udstyr
Udstyr
Udstyr

Nødvendigt udstyr:

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

Ir-modtager (f.eks. Dette:

dupont -ledninger

Micro usb -kabel (power nodemcu)

Jeg bruger Logitech Harmony -hub

For min tilgang Du har brug for en hindbær pi med hass.io installeret og nodereret. Jeg vil ikke gå i gang med at oprette hjemmeassistent ting her. Hvis du bruger noget andet end hjemmeassistent, skal du selv tilpasse ting.

Du skal være i stand til at bruge Nodemcu på Arduino IDE, da jeg ikke vil gå ind på det her

Trin 2: Fjernsignal

Fjernsignal
Fjernsignal
Fjernsignal
Fjernsignal
Fjernsignal
Fjernsignal
Fjernsignal
Fjernsignal

Måden jeg gjorde det på var at kopiere et signal fra en fjernbetjening, jeg ikke bruger til harmoni -fjernbetjening.

Jeg brugte en fjernbetjening til panasonic tv model TXL32C3E, da det ikke forstyrrer mit udstyr på min første sal. Det er et fjernsyn jeg har ovenpå.

Hvis du ikke bruger harmoni, kan du springe dette over.

Så for at finde signalet brugte jeg denne scetch:

/ * * IRremoteESP8266: IRrecvDumpV2 - dump detaljer om IR -koder med IRrecv * En IR -detektor/demodulator skal tilsluttes input RECV_PIN. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Eksempel på kredsløbsdiagram: * https://arcfn.com * * Ændringer: * Version 0.3 november, 2017 * - Support til A/C afkodning for nogle protokoller. * Version 0.2 april, 2017 * - Afkod fra en kopi af dataene, så vi kan begynde at fange hurtigere og dermed * reducere sandsynligheden for fejltagelser. * Baseret på Ken Shirriffs IrsendDemo Version 0.1 juli 2009, */

#ifndef UNIT_TEST

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

// ===================== start af TUNEABLE PARAMETERS ======================

// En IR -detektor/demodulator tilsluttes GPIO pin 14 // f.eks. D5 på et NodeMCU -kort. #define RECV_PIN 14

// Den serielle forbindelses baudrate.

// dvs. statusmeddelelse vil blive sendt til pc'en med denne baudhastighed. // Prøv at undgå langsomme hastigheder som 9600, da du vil savne meddelelser og // forårsage andre problemer. 115200 (eller hurtigere) anbefales. // BEMÆRK: Sørg for at indstille din serielle skærm til samme hastighed. #define BAUD_RATE 115200

// Da dette program er et specielt formål capture/decoder, lad os bruge et større

// end normal buffer, så vi kan håndtere fjernbetjeningskoder til klimaanlæg. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT er Nr. af milli-sekunder med ikke-mere-data, før vi overvejer a

// beskeden sluttede. // Denne parameter er en interessant afvejning. Jo længere timeout, jo mere // kompleks meddelelse kan den fange. f.eks. Nogle enhedsprotokoller sender // flere meddelelsespakker hurtigt efter hinanden, f.eks. Fjernbetjeninger til klimaanlæg. // Air Coniditioner-protokoller har ofte et betydeligt mellemrum (20-40+ms) mellem // pakker. // Ulempen ved en stor timeout -værdi er mange mindre komplekse protokoller // sender flere meddelelser, når fjernbetjeningens knap holdes nede. Gabet mellem // dem er ofte også omkring 20+ms. Dette kan resultere i, at rådata er 2-3+ // gange større end nødvendigt, da det har fanget 2-3+ beskeder i en enkelt // capture. Indstilling af en lav timeout -værdi kan løse dette. // Så det er // ganske nuanceret at vælge den bedste TIMEOUT -værdi til dit særlige tilfælde. Held og lykke og glad jagt. // BEMÆRK: Overskrid ikke MAX_TIMEOUT_MS. Typisk 130 ms. #if DECODE_AC #define TIMEOUT 50U // Nogle A/C -enheder har huller i deres protokoller på ~ 40ms. // f.eks. Kelvinator // En værdi, der er så stor, kan sluge gentagelser af nogle protokoller #else // DECODE_AC #define TIMEOUT 15U // Passer til de fleste beskeder, mens den ikke sluger mange gentagelser. #endif // DECODE_AC // Alternativer: // #define TIMEOUT 90U // Passer til meddelelser med store huller som XMP-1 og nogle aircon // -enheder, men kan ved et uheld sluge gentagne meddelelser // i rawData -output. // #define TIMEOUT MAX_TIMEOUT_MS // Dette indstiller det til vores aktuelt tilladte // maksimum. Disse høje værdier er problematiske // fordi det er nogenlunde den typiske grænse //, hvor de fleste meddelelser gentages. // f.eks. Det stopper med at afkode en besked og // begynde at sende den til seriel på præcis // det tidspunkt, hvor den næste besked sandsynligvis // skal sendes, og kan gå glip af den.

// Indstil de mindste "UKendte" meddelelsespakker, vi faktisk interesserer os for.

// Denne værdi hjælper med at reducere den falsk-positive detektionshastighed for IR-baggrund // støj som reelle meddelelser. Chancerne for, at baggrunds -IR -støj bliver opdaget // efterhånden som en meddelelse øges med længden af TIMEOUT -værdien. (Se ovenfor) // Ulempen ved at indstille denne meddelelse for stor er, at du kan gå glip af nogle gyldige // korte beskeder for protokoller, som dette bibliotek endnu ikke afkoder. // // Indstil højere, hvis du får masser af tilfældige korte UKendte meddelelser, når intet // skal sende en besked. // Indstil lavere, hvis du er sikker på, at din opsætning fungerer, men den ikke kan se beskeder // fra din enhed. (f.eks. Andre IR -fjernbetjeninger fungerer.) // BEMÆRK: Indstil denne værdi meget højt for effektivt at deaktivere UKendt registrering. #define MIN_UNKNOWN_SIZE 12 // ===================== slut på TUNEABLE PARAMETERS ======================

// Brug slå til gem bufferfunktionen for mere fuldstændig optagelsesdækning.

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

decode_results resultater; // Et sted at gemme resultaterne

// Vis den menneskelige læsbare tilstand for en A/C -besked, hvis vi kan.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (resultater-> tilstand); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (resultater-> tilstand, resultater-> bits / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (resultater-> tilstand); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (resultater-> tilstand); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (resultater-> værdi); // Midea bruger værdi i stedet for tilstand. description = ac.toString (); } #endif // DECODE_MIDEA // Hvis vi har en beskrivelse af beskeden, der kan læses af mennesker, skal du vise den. if (description! = "") Serial.println ("Mesg Desc.:" + description); }

// Kodeafsnittet køres kun én gang ved opstart.

ugyldig opsætning () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); forsinkelse (500); // Vent lidt på, at den serielle forbindelse oprettes.

#if DECODE_HASH

// Ignorer meddelelser med mindre end minimum tænd eller sluk -impulser. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Start modtageren}

// Det gentagne afsnit af koden

// void loop () {// Kontroller, om IR -koden er modtaget. if (irrecv.decode (& resultater)) {// Vis et groft tidsstempel. uint32_t nu = millis (); Serial.printf ("Tidsstempel: %06u. %03u / n", nu / 1000, nu %1000); if (results.overflow) Serial.printf ("ADVARSEL: IR -kode er for stor til buffer (> = %d)." "Dette resultat skal ikke have tillid til, før dette er løst." "Rediger og forøg CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Vis det grundlæggende output for det, vi fandt. Serial.print (resultToHumanReadableBasic (& resultater)); dumpACInfo (& resultater); // Vis eventuelle ekstra A/C -oplysninger, hvis vi har dem. udbytte(); // Feed WDT'en, da tekstoutput kan tage et stykke tid at udskrive.

// Vis biblioteksversionen, meddelelsen blev fanget med.

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

// Output RAW timing information af resultatet.

Serial.println (resultToTimingInfo (& resultater)); udbytte(); // Feed WDT (igen)

// Output resultaterne som kildekode

Serial.println (resultToSourceCode (& resultater)); Serial.println (""); // Tom linje mellem indtastninger (); // Feed WDT (igen)}}

Når denne scetch uploades og kører med seriel skærm åben, udsender den koden til knaptryk (se billede)

Skriv de koder ned, du vil bruge til senere brug. Jeg brugte excel til at notere, hvad jeg fik til knapper, jeg ville bruge (se billede)

Jeg redigerede knapperne i min Netflix -aktivitet for at sende pausesignal fra panasonic -fjernbetjening.. (se billede)

Trin 3: Skrivning af koden til afsendelse til Nodered

Skrivning af koden til afsendelse til Nodered
Skrivning af koden til afsendelse til Nodered

#ifndef UNIT_TEST #inkluderer #endif #include

#omfatte

#omfatte

#omfatte

#omfatte

#omfatte

const char* ssid = ""; // Indtast SSID hereconst char* password = ""; // Indtast adgangskode her const char *host = ""; // Ip addresse #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results resultater; void setup () {irrecv.enableIRIn (); // Start modtageren USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

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

// Skift denne signalværdi for den, du har

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pause Signal modtaget"); wifisend (pause); forsinkelse (1000);

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

USE_SERIAL.println ("forrige");

wifisend ("prev"); forsinkelse (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("næste"); wifisend ("næste"); forsinkelse (1000); }

irrecv.resume (); // Modtag den næste værdi} forsinkelse (100); } void wifisend (strengdata) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] begynder … / n"); // konfigurer traged server og url http.begin ("https:// [bruger]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] FÅ … / n"); // start forbindelse og send HTTP header int httpCode = http. GET (); // httpCode vil være negativ ved fejl, hvis (httpCode> 0) {// HTTP -header er blevet sendt, og Server -svaroverskrift er blevet håndteret USE_SERIAL.printf ("[HTTP] GET … code: %d / n", // fil fundet på server

hvis (httpCode == HTTP_CODE_OK) {String nyttelast = http.getString (); USE_SERIAL.println (nyttelast); }} andet {USE_SERIAL.printf ("[HTTP] GET … mislykkedes, fejl: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); forsinkelse (100); }}

Dette er den kode, jeg brugte på min nodemcu. Du skal have disse biblioteker installeret.

Du kan teste ved hjælp af seriel skærm og trykke på fjernbetjeningsknapper, du tilføjede i koden, for at se svaret.

I rækken:

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

Du skal ændre [bruger] til din bruger og så videre. UDEN beslag. parenteser er der for at vise heksefelter, der skal ændres.

Denne linje fungerer heller ikke, før vi konfigurerer vores flow i nodered.

Trin 4: Oprettelse af et flow i Nodered

Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered
Oprettelse af et flow i Nodered

Som nævnt i begyndelsen bruger jeg hass.io med nodered. Hvis du kører en anden opsætning, skal du gøre dette anderledes! Du kan se på billedet, at når der trykkes på en knap, vises det i fejlfindingsvinduet …

Skiftelastnoden kunne sandsynligvis være blevet sprunget over, hvis jeg havde valgt noget andet, at data = i det foregående trin. Den switchknude, jeg bruger, er meget større end bare pause, men det er bare så jeg kunne tilføje flere ir -signaler til at bruge chromecast til radiostationer osv.

For bare afspilningspause kan du bruge strømmen i det andet billede.

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

Jeg fjernede navn userpass og url fra dette, så du skal muligvis redigere det.

tilføj en switchknude, hvis du vil reagere på mere end bare pause (se f.eks. billede)

I hjemmeassistentnoden til pause -brug:

navn: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [din chromecast her]"}

til næste nummer skal du bare kopiere den node og redigere tjenesten til: media_next_track og navn til: næste chromecast

Trin 5: Valgfri Alexa Pause Chromecast

Valgfri tilføj alexa -kommando til pause chromecast:

Der er muligheder her.. Du kan lave en alexa nnode kaldet pause chromecast, der sætter chromecast på pause, eller du kan lave en kaldet pause -tv, der kontrollerer den aktuelle harmoni -aktivitet og pause afhængigt af det.

Jeg tilføjer det her senere..

Anbefalede: