Sisällysluettelo:

Keskeytä Chromcast kaukosäätimellä: 5 vaihetta
Keskeytä Chromcast kaukosäätimellä: 5 vaihetta

Video: Keskeytä Chromcast kaukosäätimellä: 5 vaihetta

Video: Keskeytä Chromcast kaukosäätimellä: 5 vaihetta
Video: Mitä tehdä, jos Onerva ei asennu Googlen Play -kaupasta 2024, Heinäkuu
Anonim
Image
Image
Varustus
Varustus

Minulla on Logitechin harmoniakaukosäädin ja käytän koti -avustajaa vadelmapi: llä.

Halusin pystyä keskeyttämään chromecastin kaukosäätimeltäni, mutta minulla on vanha televisio, joka ei tue tätä hdmi -yhteyden kautta. Ideani oli sitten käyttää NodeMcu: ta ir -signaalin sieppaamiseen ja taukoon.

Jos et saa sitä toimimaan tai sinulla on kysyttävää, kommentoi alle

Vaihe 1: Varustus

Varustus
Varustus
Varustus
Varustus

Tarvittavat laitteet:

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

Ir-vastaanotin (esim. Tämä:

dupont -johdot

Mikro -USB -kaapeli (virtalähde)

Käytän Logitech Harmony -hubia

Lähestymistapani varten tarvitset Raspberry pi: n, jossa on hass.io -asennus ja Nodered. En aio mennä asentamaan kotiapua. Jos käytät jotain muuta kuin kotiapulaista, sinun on mukautettava tavaraa itse.

Sinun on voitava käyttää Nodemcu -ohjelmaa Arduino IDE: ssä, koska en mene siihen tässä

Vaihe 2: Etäsignaali

Etäsignaali
Etäsignaali
Etäsignaali
Etäsignaali
Etäsignaali
Etäsignaali
Etäsignaali
Etäsignaali

Tapa, jolla tein sen, oli kopioida signaali kaukosäätimestä, jota en käytä harmonian kaukosäätimeen.

Käytin kaukosäädintä Panasonicin TV -malliin TXL32C3E, koska se ei häiritse laitteitani ensimmäisessä kerroksessa. Se on televisio, joka minulla on yläkerrassa.

Jos et käytä harmoniaa, voit ohittaa tämän.

Joten signaalin löytämiseen käytin tätä luonnosta:

/ * * IRremoteESP8266: IRrecvDumpV2 - IR -koodauksen IR -koodin tiedot * IR -ilmaisin/demodulaattori on kytkettävä tuloon RECV_PIN. * * Tekijänoikeus 2009 Ken Shirriff, https://arcfn.com * Tekijänoikeus 2017 David Conran * * Esimerkki piirikaaviosta: * https://arcfn.com * * Muutokset: * Versio 0.3. Marraskuuta 2017 * - Ilmastoinnin tuki joidenkin protokollien dekoodaus. * Versio 0.2. Huhtikuuta 2017 * - Dekoodaa kopio tiedoista, jotta voimme aloittaa sieppaamisen nopeammin. Näin * vähennät väärien kaappausten todennäköisyyttä. * Perustuu Ken Shirriffin IrsendDemo -versioon 0.1 heinäkuuta 2009, */

#ifndef UNIT_TEST

#Sisällytä #endif #sisällytä #sisällytä #sisällytä #jos DECODE_AC #sisällytä #sisällytä #sisällytä #sisällytä #sisällytä #päättyi // DECODE_AC

// ==================== VIRITETTÄVIEN PARAMETRIEN alku ====================

// IR -ilmaisin/demodulaattori on kytketty GPIO -nastaan 14 // esim. D5 NodeMCU -kortilla. #define RECV_PIN 14

// Sarjayhteyden siirtonopeus.

// eli Status -viesti lähetetään tietokoneelle tällä baudinopeudella. // Yritä välttää hitaita nopeuksia, kuten 9600, koska menetät viestit ja // aiheutat muita ongelmia. 115200 (tai nopeampi) on suositeltavaa. // HUOMAUTUS: Varmista, että asetat sarjamonitorin samaan nopeuteen. #define BAUD_RATE 115200

// Koska tämä ohjelma on erikoiskäyttöön tarkoitettu kaappaus/dekooderi, käytämme suurempaa

// kuin tavallinen puskuri, jotta voimme käsitellä ilmastointilaitteen etäkoodeja. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT on nro. milli-sekuntia ei-enemmän-tietoja, ennen kuin harkitsemme a

// viesti päättyi. // Tämä parametri on mielenkiintoinen kompromissi. Mitä pidempi aikakatkaisu, sitä monimutkaisempi // viesti, jonka se voi kaapata. esim. Jotkin laiteprotokollat lähettävät // useita viestipaketteja nopeasti peräkkäin, kuten ilmastointilaitteiden kaukosäätimet. // Air Coniditioner -protokollissa on usein huomattava aukko (20-40+ms) // -pakettien välillä. // Suuren aikakatkaisuarvon haittapuoli on paljon vähemmän monimutkaisia protokollia // lähettää useita viestejä, kun kaukosäätimen painiketta pidetään painettuna. Ero // niiden välillä on usein myös noin 20+ms. Tämä voi johtaa siihen, että raakatiedot ovat 2-3+ // kertaa suurempia kuin tarvitaan, koska ne ovat kaapanneet 2-3+ viestiä yhdessä // -kaappauksessa. Pienen aikakatkaisuarvon asettaminen voi ratkaista tämän. // Joten parhaan TIMEOUT -arvon valitseminen käyttötapaukseesi on // varsin vivahteikas. Onnea ja onnellista metsästystä. // HUOMAUTUS: Älä ylitä MAX_TIMEOUT_MS. Yleensä 130 ms. #if DECODE_AC #define TIMEOUT 50U // Joidenkin ilmastointilaitteiden protokollissa on aukkoja ~ 40 ms. // esim. Kelvinator // Tämä suuri arvo voi niellä joidenkin protokollien toistoja #else // DECODE_AC #define TIMEOUT 15U // Sopii useimpiin viesteihin, mutta ei niellä monia toistoja. #endif // DECODE_AC // Vaihtoehdot: // #define TIMEOUT 90U // Sopii viesteihin, joissa on suuria aukkoja, kuten XMP-1 ja jotkut ilmastointilaitteet, mutta voi vahingossa niellä toistuvia viestejä // rawData -ulostulossa. // #define TIMEOUT MAX_TIMEOUT_MS // Tämä asettaa sen tällä hetkellä sallitulle // maksimille. Näin korkeat arvot ovat ongelmallisia //, koska se on suunnilleen tyypillinen raja //, jossa useimmat viestit toistuvat. // esim. Se lopettaa viestin dekoodauksen ja // aloittaa sen lähettämisen sarjaan juuri silloin, kun seuraava viesti todennäköisesti // lähetetään, ja se saattaa jäädä huomaamatta.

// Aseta pienimmät "tuntemattomat" viestipaketit, joista todella välitämme.

// Tämä arvo auttaa vähentämään IR-taustan // kohinan väärän positiivisen havaitsemisen määrää // todellisina viesteinä. Todennäköisyys, että taustalla oleva IR -kohina havaitaan // viestinä kasvaa TIMEOUT -arvon pituuden myötä. (Katso yllä) // Tämän viestin liian suureksi asettamisen haittapuoli on, että voit jättää käyttämättä kelvollisia // lyhytsanomia protokollille, joita tämä kirjasto ei vielä purkaa. // // Aseta korkeammalle, jos saat paljon satunnaisia lyhyitä Tuntemattomia viestejä, kun mitään // ei lähetetä viestiä. // Aseta alemmaksi, jos olet varma, että asetukset toimivat, mutta se ei näe viestejä // laitteeltasi. (esim. muut IR -kaukosäätimet toimivat.) // HUOMAUTUS: Aseta tämä arvo erittäin korkeaksi, jotta Tuntematon tunnistus poistetaan käytöstä. #define MIN_UNKNOWN_SIZE 12 // ==================== VIRITETTÄVIEN PARAMETRIEN loppu ====================

// Ota käyttöön tallennuspuskuritoiminto, jos haluat kattavamman sieppauksen.

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

decode_results tulokset; // Jossain tulosten tallentamiseen

// Näytä ilmanvaihtoviestin ihmisen luettavissa oleva tila, jos voimme.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (tulokset-> tila); kuvaus = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (tulokset-> tila, tulokset-> bittiä / 8); kuvaus = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (tulokset-> tila); kuvaus = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (tulokset-> tila); kuvaus = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (tulokset-> arvo); // Midea käyttää arvoa tilan sijaan. kuvaus = ac.toString (); } #endif // DECODE_MIDEA // Jos saimme viestin ihmisen luettavan kuvauksen, näytä se. if (kuvaus! = "") Serial.println ("Mesg Desc.:" + kuvaus); }

// Koodiosa suoritetaan vain kerran käynnistyksen yhteydessä.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); viive (500); // Odota hetki, kunnes sarjayhteys muodostetaan.

#jos DECODE_HASH

// Ohita viestit, joissa on vähemmän kuin minimipulsseja. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Käynnistä vastaanotin}

// Koodin toistuva osa

// void loop () {// Tarkista, onko IR -koodi vastaanotettu. if (irrecv.decode (& results)) {// Näytä karkea aikaleima. uint32_t nyt = millis (); Serial.printf ("Aikaleima: %06u. %03u / n", nyt / 1000, nyt %1000); if (results.overflow) Serial.printf ("VAROITUS: IR -koodi on liian suuri puskurille (> = %d)." "Tätä tulosta ei pidä luottaa ennen kuin tämä on ratkaistu." "Muokkaa ja lisää CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Näytä löytämämme perustuote. Serial.print (resultToHumanReadableBasic (& tulokset)); dumpACInfo (& tulokset); // Näytä mahdolliset ylimääräiset ilmastointitiedot, jos meillä on niitä. saanto (); // Syötä WDT, koska tekstin tulostaminen voi kestää jonkin aikaa.

// Näytä kirjastoversio, jolla viesti kaapattiin.

Serial.print ("Kirjasto: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Sarja.println ();

// Tuloksen RAW -ajoitustiedot.

Serial.println (resultToTimingInfo (& tulokset)); saanto (); // Syötä WDT (uudelleen)

// Tulosta tulokset lähdekoodina

Serial.println (resultToSourceCode (& results)); Serial.println (""); // Tyhjä rivi merkintöjen välillä return (); // Syötä WDT (uudelleen)}}

Kun tämä luonnos ladataan ja sitä käytetään sarjamonitori auki, se antaa painikkeen painalluksen koodin (katso kuva)

Kirjoita muistiin koodit, joita haluat käyttää myöhempää käyttöä varten. Kirjoitin muistiin Excelin avulla, mitä sain painikkeille, joita halusin käyttää (katso kuva)

Muokkasin Netflix -toimintojeni painikkeita lähettämään taukosignaalin panasonic -kaukosäätimestä.. (katso kuva)

Vaihe 3: Nodered -lähetyskoodin kirjoittaminen

Nodered -lähetyskoodin kirjoittaminen
Nodered -lähetyskoodin kirjoittaminen

#ifndef UNIT_TEST #include #endif #include

#sisältää

#sisältää

#sisältää

#sisältää

#sisältää

const char* ssid = ""; // Syötä SSID tähäncon* char* password = ""; // Kirjoita salasana tähän const char *host = ""; // Ip -osoite #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results tulokset; void setup () {irrecv.enableIRIn (); // Käynnistä vastaanotin 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 (); viive (1000); } WiFi -tila (WIFI_STA); WiFiMulti.addAP (ssid, salasana); } void loop () {if (irrecv.decode (& results)) {

// Muuta tätä signaalin arvoa

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("keskeytä signaali vastaanotettu"); wifisend (tauko); viive (1000);

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

USE_SERIAL.println ("edellinen");

wifisend ("edellinen"); viive (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("seuraava"); viive (1000); }

irrecv.resume (); // Seuraavan arvon vastaanottaminen} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] alkaa… / n"); // konfiguroi tragedipalvelin ja URL -osoite http.begin ("https:// [käyttäjä]: [pass]@[ip]: [portti]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] SAA… / n"); // aloita yhteys ja lähetä HTTP -otsikko int httpCode = http. GET (); // httpCode on negatiivinen virheen sattuessa, jos (httpCode> 0) {// HTTP -otsikko on lähetetty ja Palvelimen vastausotsikko on käsitelty USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // tiedosto löytyi palvelimelta

if (httpCode == HTTP_CODE_OK) {String hyötykuorma = http.getString (); USE_SERIAL.println (hyötykuorma); }} else {USE_SERIAL.printf ("[HTTP] GET… epäonnistui, virhe: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); viive (100); }}

Tätä koodia käytin nodemcussani. Sinun on asennettava nämä kirjastot.

Voit testata sarjamonitorilla ja paina koodiin lisäämiäsi kaukosäätimen painikkeita nähdäksesi vastauksen.

Rivillä:

http.begin ("https:// [käyttäjä]: [pass]@[ip]: [portti]/chromecastpause? data =" + data);

Sinun on vaihdettava [käyttäjä] käyttäjäksi ja niin edelleen. ILMAN kannattimia. hakasulkeet näyttävät noitakenttiä muutettaviksi.

Tämä linja ei myöskään toimi, ennen kuin asetamme virtauksemme nyöritettyinä.

Vaihe 4: Virtauksen luominen Noderedissa

Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa
Virtauksen luominen Noderedissa

Kuten alussa mainitsin, käytän hass.io: ta noderedin kanssa. Jos käytät eri asetuksia, sinun on tehtävä tämä toisin! Kuvasta näet, että kun painiketta painetaan, se näkyy virheenkorjausikkunassa…

Muutos hyötykuorman solmu olisi luultavasti ohitettu, jos olisin valinnut jotain muuta, että data = edellisessä vaiheessa. Kytkinsolmu, jota käytän, on paljon isompi kuin vain tauko, mutta se on vain siksi, jotta voisin lisätä enemmän ir -signaaleja käyttääksesi chromecastia radioasemille jne.

Toiston taukoa varten voit käyttää toisessa kuvassa olevaa virtausta.

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

Poistin nimen userpass ja url tästä, joten sinun on ehkä muokattava sitä.

lisää kytkinsolmu, jos haluat reagoida muuhun kuin vain taukoon (katso esimerkiksi kuva)

Koti -avustajan solmussa taukokäyttöä varten:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [sinun chromecastisi täällä]"}

kopioi seuraava raita vain solmu ja muokkaa palvelua: media_next_track ja nimi seuraavaan chromecastiin

Vaihe 5: Valinnainen Alexa Keskeytä Chromecast

Valinnainen alexa -komento chromecastin keskeyttämiseen:

Tässä on vaihtoehtoja.. Voit tehdä yhden alexa nnode -nimisen, jonka nimi on pause chromecast, joka keskeyttää chromecastin, tai voit tehdä yhden nimeltä tauko -tv, joka tarkistaa nykyisen harmonian ja keskeyttää sen mukaan.

Lisään tämän tänne myöhemmin..

Suositeltava: