Onderbreek Chromcast met 'n afstandbeheer: 5 stappe
Onderbreek Chromcast met 'n afstandbeheer: 5 stappe
Anonim
Image
Image
Uitrusting
Uitrusting

Ek het 'n Logitech -harmonie -afstandsbediening en bestuur Tuisassistent op 'n framboospi.

Ek wou chromecast van my afstandsbediening af laat wag, maar ek het 'n ou TV wat dit nie via hdmi ondersteun nie. My idee was toe om 'n NodeMcu te gebruik om die IR -sein te vang en te onderbreek.

Lewer hieronder kommentaar as u dit nie kan laat werk nie

Stap 1: Uitrusting

Uitrusting
Uitrusting
Uitrusting
Uitrusting

Toerusting benodig:

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

Die ontvanger (soos hierdie:

dupont drade

Mikro usb -kabel (kragknoppie)

Ek gebruik Logitech Harmony -hub

Vir my benadering, het u 'n framboos -pi nodig met hass.io geïnstalleer en genereer. As u iets anders as tuisassistent gebruik, moet u dinge self aanpas.

U moet Nodemcu op Arduino IDE kan gebruik, aangesien ek hier nie hierop ingaan nie

Stap 2: Sein op afstand

Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal
Remote Signal

Die manier waarop ek dit gedoen het, was om 'n sein van 'n afstandbeheer wat ek nie gebruik nie na die harmonie -afstandsbediening te kopieer.

Ek gebruik 'n afstandsbediening vir panasonic tv -model TXL32C3E, aangesien dit nie my toerusting op my eerste verdieping belemmer nie. Dit is 'n TV wat ek bo het.

As u nie harmonie gebruik nie, kan u dit oorslaan.

Om die sein te vind, gebruik ek hierdie skets:

/ * * IRremoteESP8266: IRrecvDumpV2 - stort besonderhede van IR -kodes met IRrecv * 'n IR -detektor/demodulator moet aan die ingang RECV_PIN gekoppel word. * * Kopiereg 2009 Ken Shirriff, https://arcfn.com * Kopiereg 2017 David Conran * * Voorbeeld kringdiagram: * https://arcfn.com * * Wysigings: * Weergawe 0.3 November, 2017 * - Ondersteuning vir lugversorging dekodering vir 'n paar protokolle. * Weergawe 0.2 April, 2017 * - Dekodeer uit 'n afskrif van die data, sodat ons vinniger kan begin vaslê en sodoende die waarskynlikheid van wangedrag verminder. * Gebaseer op Ken Shirriff se IrsendDemo weergawe 0.1 Julie 2009, */

#ifndef UNIT_TEST

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

// ===================== begin van TUNEABLE PARAMETERS ======================

// 'n IR -detektor/demodulator is gekoppel aan GPIO -pen 14 // bv. D5 op 'n NodeMCU -bord. #definieer RECV_PIN 14

// Die seriële verbindings baud -tempo.

// d.w.s. Statusboodskap sal teen hierdie baud -tempo na die rekenaar gestuur word. // Probeer om stadige snelhede soos 9600 te vermy, aangesien u boodskappe sal misloop en/ of ander probleme kan veroorsaak. 115200 (of vinniger) word aanbeveel. // OPMERKING: Maak seker dat u u seriële monitor op dieselfde snelheid ingestel het. #definieer BAUD_RATE 115200

// Aangesien hierdie program 'n spesiale doelopname/dekodeerder is, laat ons 'n groter gebruik

// as normale buffer sodat ons afstandkodes van die lugversorger kan hanteer. #definieer CAPTURE_BUFFER_SIZE 1024

// TIMEOUT is die Nr. van milli-sekondes nie-meer-data voordat ons na a kyk

// boodskap geëindig. // Hierdie parameter is 'n interessante afweging. Hoe langer die time -out, hoe meer // kompleks 'n boodskap dit kan opneem. bv. Sommige apparaatprotokolle stuur // veelvuldige boodskappakkies vinnig, soos afstandbeheer van lugversorger. // Air Coniditioner-protokolle het dikwels 'n aansienlike gaping (20-40+ms) tussen // pakkies. // Die nadeel van 'n groot time -out -waarde is baie minder ingewikkelde protokolle // stuur verskeie boodskappe wanneer die knoppie van die afstandsbediening ingedruk word. Die gaping tussen // hulle is dikwels ook ongeveer 20+ms. Dit kan daartoe lei dat die rou data 2-3+ // keer groter is as wat nodig is, aangesien dit 2-3+ boodskappe in 'n enkele // opname vasgelê het. As u 'n lae tydsduurwaarde stel, kan dit opgelos word. // Die keuse van die beste TIMEOUT -waarde vir u spesifieke geval is // redelik genuanseerd. Sterkte en gelukkige jag. // LET WEL: Moenie MAX_TIMEOUT_MS oorskry nie. Gewoonlik 130 ms. #if DECODE_AC #defineer TIMEOUT 50U // Sommige lugversorgingseenhede het gapings in hul protokolle van ~ 40ms. // bv. Kelvinator // 'n Waarde wat so groot is, kan herhalings van sommige protokolle insluk #else // DECODE_AC #define TIMEOUT 15U // Pas by die meeste boodskappe, terwyl baie herhalings nie ingesluk word nie. #endif // DECODE_AC // Alternatiewe: // #define TIMEOUT 90U // Pas boodskappe met groot gapings soos XMP-1 en sommige aircon // eenhede, maar kan per ongeluk herhaalde boodskappe sluk // in die rawData -uitset. // #define TIMEOUT MAX_TIMEOUT_MS // Dit stel dit op ons tans toegelate // maksimum. Waardes wat so hoog is, is problematies // omdat dit ongeveer die tipiese grens is // waar die meeste boodskappe herhaal word. // bv. Dit sal ophou om 'n boodskap te dekodeer en // dit na seriële te stuur op presies // op die tydstip waarop die volgende boodskap waarskynlik // oorgedra sal word, en dit kan misloop.

// Stel die kleinste "onbekende" boodskappakkies in wat ons eintlik omgee.

// Hierdie waarde help om die vals-positiewe opsporingstempo van IR-agtergrond // geraas as werklike boodskappe te verminder. Die kans dat agtergrond -IR -geraas opgespoor kan word // namate 'n boodskap toeneem met die lengte van die TIMEOUT -waarde. (Sien hierbo) // // Stel hoër as u baie kort, onbekende boodskappe kry wanneer niks 'n boodskap moet stuur nie. // Stel laer as u seker is dat u opstelling werk, maar dit sien nie boodskappe // van u toestel nie. (bv. Ander IR -afstandsbedienings werk.) // OPMERKING: Stel hierdie waarde baie hoog om onbekende opsporing effektief uit te skakel. #define MIN_UNKNOWN_SIZE 12 // ===================== einde van TUNEABLE PARAMETERS ======================

// Gebruik die stoorbuffer -funksie vir meer volledige opname -dekking.

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

resultate van dekode_resultate; // Iewers om die resultate te stoor

// Wys die menslike leesbare toestand van 'n lugversorgingsboodskap as ons kan.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (resultate-> toestand); beskrywing = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (resultate-> toestand, resultate-> bits / 8); beskrywing = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (resultate-> toestand); beskrywing = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (resultate-> toestand); beskrywing = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (result-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (resultate-> waarde); // Midea gebruik waarde in plaas van staat. beskrywing = ac.toString (); } #endif // DECODE_MIDEA // As ons 'n mens-leesbare beskrywing van die boodskap kry, vertoon dit. if (beskrywing! = "") Serial.println ("Mesg Desc.:" + beskrywing); }

// Die gedeelte van die kode word slegs een keer tydens die aanvang uitgevoer.

ongeldige opstelling () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); vertraging (500); // Wag 'n rukkie totdat die reeksverbinding tot stand kom.

#as DECODE_HASH

// Ignoreer boodskappe met minder as minimum aan- of afslagpulse. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Begin die ontvanger}

// Die herhalende gedeelte van die kode

// void loop () {// Kontroleer of die IR -kode ontvang is. if (irrecv.decode (& resultate)) {// Wys 'n ruwe tydstempel. uint32_t nou = millis (); Serial.printf ("Tydstempel: %06u. %03u / n", nou / 1000, nou %1000); if (results.overflow) Serial.printf ("WAARSKUWING: IR -kode is te groot vir buffer (> = %d)." "Hierdie resultaat moet nie vertrou word totdat dit opgelos is nie." "Wysig en verhoog CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Gee die basiese uitset van wat ons gevind het. Serial.print (resultToHumanReadableBasic (& resultate)); dumpACInfo (& resultate); // Wys enige ekstra lugversorgingsinligting as ons dit het. opbrengs (); // Voer die WDT in, aangesien die teksuitset 'n rukkie kan neem om te druk.

// Vertoon die biblioteekweergawe waarmee die boodskap vasgelê is.

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

// Gee inligting oor die resultaat van RAW -tydsberekening.

Serial.println (resultToTimingInfo (& resultate)); opbrengs (); // Voer die WDT (weer)

// Stel die resultate as bronkode in

Serial.println (resultToSourceCode (& resultate)); Serial.println (""); // Leë lyn tussen inskrywings opbrengs (); // Voer die WDT (weer)}}

As hierdie skets opgelaai word en met 'n seriële monitor oopgemaak word, word die kode vir die druk op die knoppie uitgevoer (sien prent)

Skryf die kodes neer wat u later wil gebruik. Ek het Excel gebruik om aan te teken wat ek gekry het vir knoppies wat ek wou gebruik (sien prentjie)

Ek het die knoppies in my Netflix -aktiwiteit gewysig om 'n pouse -sein vanaf panasonic -afstandsbediening te stuur.. (sien prent)

Stap 3: Skryf die kode vir stuur na Nodered

Skryf die kode vir stuur na Nodered
Skryf die kode vir stuur na Nodered

#ifndef UNIT_TEST #sluit #endif #include in

#insluit

#insluit

#insluit

#insluit

#insluit

const char* ssid = ""; // Voer SSID in by herkenning* wagwoord = ""; // Tik wagwoord hier const char *host = ""; // Ip addresse #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); resultate van dekode_resultate; ongeldige opstelling () {irrecv.enableIRIn (); // Begin die ontvanger USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (waar); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); vertraging (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, wagwoord); } nietige lus () {if (irrecv.decode (& resultate)) {

// Verander hierdie seinwaarde vir die een wat u gekry het

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pouse sein ontvang"); wifisend (pouse); vertraging (1000);

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

USE_SERIAL.println ("vorige");

wifisend ("prev"); vertraging (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("volgende"); wifisend ("volgende"); vertraging (1000); }

irrecv.resume (); // Ontvang die volgende waarde} vertraging (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] begin … / n"); // konfigureer bediener en URL http.begin ("https:// [gebruiker]: [pas]@[ip]: [poort]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] KRY … / n"); // begin verbinding en stuur HTTP -kop int httpCode = http. GET (); // httpCode sal foutief wees as (httpCode> 0) {// HTTP -kop gestuur is en bedienerreaksie -kop hanteer is USE_SERIAL.printf ("[HTTP] GET … code: %d / n", // lêer gevind op bediener

as (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (loonvrag); }} anders {USE_SERIAL.printf ("[HTTP] KRY … misluk, fout: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); vertraging (100); }}

Dit is die kode wat ek op my nodemcu gebruik het. U moet die biblioteke installeer.

U kan toets met behulp van 'n seriële monitor en op afstandknoppies druk wat u in die kode bygevoeg het om die antwoord te sien.

In die reël:

http.begin ("https:// [gebruiker]: [slaag]@[ip]: [poort]/chromecastpause? data =" + data);

U moet [gebruiker] na u gebruiker verander, ensovoorts. SONDER hakies. hakies is daar om te wys dat heksvelde moet verander.

Die lyn sal ook nie werk voordat ons ons vloei in nodered opstel nie.

Stap 4: Skep 'n stroom in Nodered

Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered
Skep 'n vloei in Nodered

Soos in die begin genoem, gebruik ek hass.io met nodered. As u 'n ander opstelling gebruik, moet u dit anders maak! U kan op die prent sien dat as u op 'n knoppie druk, dit in die ontfoutingsvenster verskyn …

Die veranderingsvragknooppunt kon waarskynlik oorgeslaan gewees het as ek iets anders as die data gekies het = in die vorige stap. Die skakelknooppunt wat ek gebruik, is baie groter as om net te breek, maar dit is net sodat ek meer IR -seine kan byvoeg om Chromecast vir radiostasies ens te gebruik.

As u net 'n pouse wil speel, kan u die stroom in die ander prentjie gebruik.

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "kry", "oplaai": vals, "swaggerDoc": "", "x": 133, "y": 98, "drade":

Ek het die naam userpass en url hiervan verwyder, sodat u dit miskien moet wysig.

Voeg 'n skakelknooppunt by as u wil reageer op meer as net pouse (sien prentjie byvoorbeeld)

In die huisassistentknoop vir pouse gebruik:

naam: play pause chromecastdomain: media_player Service: media_play_pausedata: {"entity_id": "media_player. [your chromecast here]"}

Vir die volgende snit, kopieer die node en wysig die diens na: media_next_track en noem die volgende chromecast

Stap 5: Opsionele Alexa -pouse Chromecast

Opsioneel voeg alexa -opdrag by om chromecast te onderbreek:

Daar is opsies hier.. U kan 'n alexa -node maak wat Chromecast onderbreek word wat Chromecast onderbreek, of u kan 'n pouse -tv maak wat die huidige harmonie -aktiwiteit kontroleer, en afhangende daarvan.

Ek sal dit later hier byvoeg..

Aanbeveel: