Satura rādītājs:

Pārtrauciet Chromcast darbību ar tālvadības pulti: 5 soļi
Pārtrauciet Chromcast darbību ar tālvadības pulti: 5 soļi

Video: Pārtrauciet Chromcast darbību ar tālvadības pulti: 5 soļi

Video: Pārtrauciet Chromcast darbību ar tālvadības pulti: 5 soļi
Video: 35 видео со страшными призраками: мегасборник 2023 года [V1] 2024, Novembris
Anonim
Image
Image
Aprīkojums
Aprīkojums

Man ir Logitech harmonijas tālvadības pults un palaižu mājas palīgu aveņu pi.

Es gribēju, lai varētu apturēt Chromecast darbību no tālvadības pults, bet man ir vecs televizors, kas to neatbalsta, izmantojot hdmi. Mana ideja bija tad izmantot NodeMcu, lai uztvertu ir signālu un apturētu.

Ja nevarat to izmantot vai jums ir jautājumi, lūdzu, komentējiet tālāk

1. solis: aprīkošana

Aprīkojums
Aprīkojums
Aprīkojums
Aprīkojums

Nepieciešamais aprīkojums:

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

Ir uztvērējs (piemēram, šis:

dupont vadi

Mikro USB kabelis (strāvas nodemcu)

Es izmantoju Logitech Harmony -hub

Manai pieejai jums ir nepieciešams Raspberry pi ar hass.io Instalēts un Nodered. Es šeit neiedziļināšos, lai izveidotu mājas palīgu. Ja izmantojat kaut ko citu, nevis mājas palīgu, jums pašiem jāpielāgo materiāls.

Jums ir jāspēj izmantot Nodemcu Arduino IDE, jo es šeit to neiedziļināšos

2. darbība: attālais signāls

Attālais signāls
Attālais signāls
Attālais signāls
Attālais signāls
Attālais signāls
Attālais signāls
Attālais signāls
Attālais signāls

Tas, kā es to darīju, bija signāla kopēšana no tālvadības pults, kuru es neizmantoju, uz harmonijas tālvadības pulti.

Es izmantoju tālvadības pulti Panasonic televizora modelim TXL32C3E, jo tas netraucē manam pirmajā stāvā esošajam aprīkojumam. Tas ir televizors, kas man ir augšstāvā.

Ja neizmantojat harmoniju, varat to izlaist.

Tātad, lai atrastu signālu, es izmantoju šo skici:

/ * * IRremoteESP8266: IRrecvDumpV2 - informācija par IR kodiem, izmantojot IRrecv * Ieejai RECV_PIN jāpievieno IR detektors/demodulators. * * Autortiesības 2009 Ken Shirriff, https://arcfn.com * Autortiesības 2017 David Conran * * Shēmas shēmas piemērs: * https://arcfn.com * * Izmaiņas: * Versija 0.3., 2017. gada novembris * - A/C atbalsts dažu protokolu dekodēšana. * Versija 0.2, 2017. gada aprīlis * - atšifrējiet no datu kopijas, lai mēs varētu ātrāk tvert, tādējādi * samazinot kļūdu iegūšanas iespējamību. * Pamatojoties uz Kena Širifa IrsendDemo versiju, 2009. gada 0.1. Jūlijs, */

#ifndef UNIT_TEST

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

// ==================== PIELIETOJAMO PARAMETRU sākums ====================

// IR detektors/demodulators ir pievienots GPIO tapai 14 // piem. D5 uz NodeMCU plates. #define RECV_PIN 14

// Sērijas savienojuma pārraides ātrums.

// t.i., statusa ziņojums tiks nosūtīts uz datoru ar šādu pārraides ātrumu. // Centieties izvairīties no lēna ātruma, piemēram, 9600, jo jūs palaidīsit garām ziņojumus un // radīsit citas problēmas. Ieteicams izmantot 115200 (vai ātrāk). // PIEZĪME: Pārliecinieties, vai seriālais monitors ir iestatīts uz tādu pašu ātrumu. #define BAUD_RATE 115200

// Tā kā šī programma ir īpaša mērķa uztveršanas/dekodēšanas ierīce, izmantosim lielāku

// nekā parasts buferis, lai mēs varētu apstrādāt gaisa kondicionētāja tālvadības kodus. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT ir Nr. milisekundes bez datiem, pirms mēs uzskatām a

// ziņa beigusies. // Šis parametrs ir interesants kompromiss. Jo ilgāks taimauts, jo // ir sarežģītāks ziņojums. piem. Daži ierīču protokoli, piemēram, gaisa kondicionētāja tālvadības pults, ātri nosūtīs // vairākas ziņojumu paketes. // Air Coniditioner protokoliem bieži ir ievērojama atstarpe (20-40+ms) starp // paketēm. // Lielas noildzes vērtības negatīvie aspekti ir daudz mazāk sarežģītu protokolu // nosūtīt vairākus ziņojumus, kad tālvadības pults poga ir nospiesta. Plaisa starp // bieži vien ir arī aptuveni 20+ms. Tā rezultātā neapstrādātie dati var būt 2–3 reizes lielāki nekā nepieciešams, jo vienā // tveršanā ir uzņemti 2-3+ ziņojumi. Nosakot zemu taimauta vērtību, to var atrisināt. // Tātad, izvēloties vispiemērotāko TIMEOUT vērtību savam konkrētajam gadījumam, ir // diezgan niansēti. Veiksmi un laimīgas medības. // PIEZĪME. Nepārsniedziet MAX_TIMEOUT_MS. Parasti 130 ms. #if DECODE_AC #define TIMEOUT 50U // Dažām gaisa kondicionēšanas iekārtu protokolos ir nepilnības ~ 40 ms. // piem. Kelvinātors // Tik liela vērtība var norīt dažu protokolu atkārtojumus #else // DECODE_AC #define TIMEOUT 15U // Piemērots lielākajai daļai ziņojumu, vienlaikus nerijot daudzus atkārtojumus. #endif // DECODE_AC // Alternatīvas: // #define TIMEOUT 90U // Piemērots ziņojumiem ar lielām atstarpēm, piemēram, XMP-1 un dažām gaisa kondicionēšanas // vienībām, bet var nejauši norīt atkārtotus ziņojumus // izejā rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Tas iestatīs to uz mūsu pašlaik atļauto // maksimālo. Tik augstas vērtības ir problemātiskas //, jo tā ir aptuveni tipiskā robeža //, kur atkārtojas lielākā daļa ziņojumu. // piem. Tas pārtrauks ziņojuma atšifrēšanu un // sāks to nosūtīt uz seriālu precīzi // laikā, kad, visticamāk, // tiks pārsūtīts nākamais ziņojums, un var to palaist garām.

// Iestatiet mazākā izmēra "UNKNOWN" ziņojumu paketes, kas mums patiešām rūp.

// Šī vērtība palīdz samazināt viltus pozitīvo IR fona noteikšanas ātrumu // troksni kā reālus ziņojumus. Fona IR trokšņa noteikšanas iespējas // kā ziņojums palielinās līdz ar TIMEOUT vērtības garumu. (Skatīt iepriekš) // Šī ziņojuma pārāk lielas iestatīšanas trūkums ir tas, ka varat palaist garām dažus derīgus // īsziņas protokoliem, kurus šī bibliotēka vēl nav atšifrējusi. // // Iestatiet augstāku vērtību, ja saņemat daudz nejaušu, nepazīstamu ziņojumu, kad nekas // nesūta ziņojumu. // Iestatiet zemāku vērtību, ja esat pārliecināts, ka jūsu iestatīšana darbojas, bet tā neredz ziņojumus // no jūsu ierīces. (piemēram, darbojas citi IR tālvadības pults.) // PIEZĪME. Iestatiet šo vērtību ļoti augstu, lai efektīvi izslēgtu NEZINĀTO noteikšanu. #define MIN_UNKNOWN_SIZE 12 // ==================== Noskaņojamo parametru beigas ====================

// Izmantojiet ieslēgt bufera saglabāšanas funkciju, lai iegūtu pilnīgāku uztveršanas pārklājumu.

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

decode_results rezultāti; // Kaut kur saglabāt rezultātus

// Ja varam, parādiet gaisa kondicionēšanas ziņojuma cilvēka lasāmo stāvokli.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (rezultāti-> stāvoklis); apraksts = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (rezultāti-> stāvoklis, rezultāti-> biti / 8); apraksts = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (rezultāti-> stāvoklis); apraksts = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (rezultāti-> stāvoklis); apraksts = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (rezultāti-> vērtība); // Midea izmanto vērtību stāvokļa vietā. apraksts = ac.toString (); } #endif // DECODE_MIDEA // Ja mēs saņēmām cilvēka lasāmu ziņojuma aprakstu, parādiet to. if (description! = "") Serial.println ("Mesg Desc.:" + apraksts); }

// Koda sadaļa palaišanas laikā tiek palaista tikai vienu reizi.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); kavēšanās (500); // Pagaidiet mazliet, līdz tiek izveidots seriālais savienojums.

#ja DECODE_HASH

// Ignorēt ziņojumus ar mazākiem vai mazākiem ieslēgšanas vai izslēgšanas impulsiem. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Iedarbiniet uztvērēju}

// Atkārtota koda sadaļa

// void loop () {// Pārbaudiet, vai IR kods ir saņemts. if (irrecv.decode (& rezultāti)) {// Parādiet neapstrādātu laika zīmogu. uint32_t tagad = milis (); Serial.printf ("Laika zīmogs: %06u. %03u / n", tagad / 1000, tagad %1000); if (results.overflow) Serial.printf ("BRĪDINĀJUMS: IR kods ir pārāk liels buferim (> = %d)." "Šim rezultātam nevajadzētu uzticēties, kamēr tas nav novērsts." "Rediģēt un palielināt CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Parādiet atrastā pamata izvadi. Serial.print (resultToHumanReadableBasic (& rezultāti)); dumpACInfo (& rezultāti); // Parādiet papildu informāciju par gaisa kondicionēšanu, ja tā mums ir. raža (); // Barojiet WDT, jo teksta izvadīšana var aizņemt kādu laiku.

// Parādiet bibliotēkas versiju, ar kuru tika uzņemts ziņojums.

Serial.print ("Bibliotēka: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Sērijas.println ();

// Izvadiet rezultātu RAW laika informāciju.

Serial.println (resultToTimingInfo (& rezultāti)); raža (); // Barojiet WDT (vēlreiz)

// Izvadiet rezultātus kā avota kodu

Serial.println (resultToSourceCode (& rezultāti)); Serial.println (""); // Tukša līnija starp ierakstiem return (); // Barojiet WDT (vēlreiz)}}

Kad šī skice ir augšupielādēta un darbojas ar atvērtu seriālo monitoru, tā izdos pogu nospiešanas kodu (skat. Attēlu)

Pierakstiet kodus, kurus vēlaties izmantot vēlākai lietošanai. Es izmantoju Excel, lai atzīmētu, ko es saņēmu pogām, kuras es gribēju izmantot (skat. Attēlu)

Es rediģēju pogas savā Netflix darbībā, lai no Panasonic tālvadības pults sūtītu pauzes signālu. (Skat. Attēlu)

3. solis: koda rakstīšana nosūtīšanai uz Nodered

Sūtīšanas Nodered koda rakstīšana
Sūtīšanas Nodered koda rakstīšana

#ifndef UNIT_TEST #include #endif #include

#iekļaut

#iekļaut

#iekļaut

#iekļaut

#iekļaut

const char* ssid = ""; // Šeit ievadiet SSID char* password = ""; // Ievadiet paroli šeit const char *host = ""; // Ip adrese #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results rezultāti; void setup () {irrecv.enableIRIn (); // Sāciet uztvērēju USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[IESTATĪJUMI] Gaidīt %d… / n", t); USE_SERIAL.flush (); kavēšanās (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, parole); } void loop () {if (irrecv.decode (& rezultāti)) {

// Mainiet šo signāla vērtību tam, kas jums ir

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pauzes signāls saņemts"); wifisend (pauze); kavēšanās (1000);

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

USE_SERIAL.println ("iepriekšējais");

wifisend ("iepriekšējais"); kavēšanās (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("nākamais"); kavēšanās (1000); }

irrecv.resume (); // Saņemt nākamo vērtību} delay (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] sākas… / n"); // konfigurēt traģēdijas serveri un URL http.begin ("https:// [lietotājs]: [caurlaide]@[ip]: [ports]/chromecastpause? data =" + dati); USE_SERIAL.print ("[HTTP] IEGŪT… / n"); // sākt savienojumu un nosūtīt HTTP galveni int httpCode = http. GET (); // httpCode kļūdas gadījumā būs negatīvs, ja (httpCode> 0) {// HTTP galvene ir nosūtīta un servera atbildes galvene ir apstrādāta USE_SERIAL.printf ("[HTTP] GET… kods: %d / n", // fails atrasts serverī

if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (lietderīgā slodze); }} else {USE_SERIAL.printf ("[HTTP] GET … neizdevās, kļūda: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); kavēšanās (100); }}

Šis ir kods, ko izmantoju savā nodemcu. Jums būs jāinstalē šīs bibliotēkas.

Lai redzētu atbildi, varat pārbaudīt, izmantojot seriālo monitoru, un nospiest kodā pievienotās tālvadības pogas.

Rindā:

http.begin ("https:// [lietotājs]: [caurlaide]@[ip]: [ports]/chromecastpause? data =" + dati);

Jums ir jāmaina [lietotājs] uz savu lietotāju un tā tālāk. BEZ kronšteiniem. ir iekavas, lai parādītu maināmos raganu laukus.

Šī līnija arī nedarbosies, kamēr mēs neiestatīsim savu plūsmu mezgloti.

4. darbība: plūsmas izveide Nodered

Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered
Plūsmas izveide Nodered

Kā jau minēts sākumā, es izmantoju hass.io ar nodered. Ja izmantojat citu iestatījumu, tas būs jādara savādāk! Attēlā var redzēt, ka, nospiežot pogu, tas tiek parādīts atkļūdošanas logā …

Izmaiņu lietderīgās slodzes mezglu, iespējams, varēja izlaist, ja iepriekšējā solī būtu izvēlējies kaut ko citu, nevis šos datus. Slēdžu mezgls, ko izmantoju, ir daudz lielāks, tikai pauze, bet tas ir tikai tāpēc, lai es varētu pievienot vairāk signālu, lai izmantotu chromecast radiostacijām utt.

Vienkārši atskaņošanas pauzei varat izmantot plūsmu citā attēlā.

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

Es no tā noņēmu vārdu userpass un URL, tāpēc jums, iespējams, tas būs jārediģē.

pievienojiet slēdža mezglu, ja vēlaties reaģēt ne tikai uz pauzi (skatiet, piemēram, attēlu)

Mājas palīga mezglā pauzes lietošanai:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [jūsu Chromecast šeit]"}

nākamajam ierakstam vienkārši kopējiet šo mezglu un rediģējiet pakalpojumu uz: media_next_track un nosaukumu uz: next chromecast

5. darbība. Pēc izvēles Alexa apturiet Chromecast darbību

Pēc izvēles pievienojiet alexa komandu, lai apturētu Chromecast:

Šeit ir iespējas.. Jūs varat izveidot vienu alexa nnode ar nosaukumu pause chromecast, kas aptur Chromecast, vai arī varat izveidot pauzes TV, kas pārbauda pašreizējo harmonijas darbību un atkarībā no tā pauzes.

Vēlāk to pievienošu šeit..

Ieteicams: