Obsah:

Pozastavenie zariadenia Chromcast pomocou diaľkového ovládača: 5 krokov
Pozastavenie zariadenia Chromcast pomocou diaľkového ovládača: 5 krokov

Video: Pozastavenie zariadenia Chromcast pomocou diaľkového ovládača: 5 krokov

Video: Pozastavenie zariadenia Chromcast pomocou diaľkového ovládača: 5 krokov
Video: 40 полезных автотоваров с Aliexpress, которые упростят жизнь любому автовладельцу #7 2024, Júl
Anonim
Image
Image
Zariadenie
Zariadenie

Mám diaľkové ovládanie Logitech Harmony a spustím domáceho asistenta na malinovom pi.

Chcel som mať možnosť pozastaviť chromecast z diaľkového ovládača, ale mám starý televízor, ktorý to nepodporuje prostredníctvom HDMI. Mojou myšlienkou bolo potom použiť NodeMcu na zachytenie signálu ir a pozastavenie.

Ak nemôžete pracovať alebo máte otázky, napíšte komentár nižšie

Krok 1: Vybavenie

Zariadenie
Zariadenie
Zariadenie
Zariadenie

Potrebné vybavenie:

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

Ir reciver (ako napríklad tento:

dupontové drôty

Mikro USB kábel (napájací uzol)

Používam Logitech Harmony -hub

Pre môj prístup Potrebujete malinový pi s hass.io Nainštalovaný a Nodered. Nebudem tu nastavovať domáce veci. Ak používate niečo iné ako domáci asistent, musíte si veci prispôsobiť sami.

Musíte byť schopní používať Nodemcu na Arduino IDE, pretože tu to nebudem rozoberať

Krok 2: Vzdialený signál

Diaľkový signál
Diaľkový signál
Diaľkový signál
Diaľkový signál
Diaľkový signál
Diaľkový signál
Diaľkový signál
Diaľkový signál

Spôsob, akým som to urobil, bolo skopírovať signál z diaľkového ovládača, ktorý nepoužívam, do diaľkového ovládača harmónie.

Použil som diaľkový ovládač pre televízor Panasonic model TXL32C3E, pretože neruší moje zariadenie v mojom prvom poschodí. To je televízia, ktorú mám na poschodí.

Ak nepoužívate harmóniu, môžete to preskočiť.

Na nájdenie signálu som teda použil tento náčrt:

/ * * IRremoteESP8266: IRrecvDumpV2 - detaily výpisu IR kódov s IRrecv * Na vstup RECV_PIN musí byť pripojený IR detektor/demodulátor. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Príklad schémy zapojenia: * https://arcfn.com * * Zmeny: * Verzia 0,3, november 2017 * - Podpora klimatizácie dekódovanie pre niektoré protokoly. * Verzia 0.2, apríl 2017 * - Dekódujte kópiu údajov, aby sme mohli začať rýchlejšie zachytávať, a tak * znížiť pravdepodobnosť nesprávneho zachytenia. * Na základe IrsendDemo verzie Ken Shirriffa, 0,1 júla 2009, */

#ifndef UNIT_TEST

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

// =======================================================================================================

// IR detektor/demodulátor je pripojený na GPIO pin 14 // napr. D5 na doske NodeMCU. #define RECV_PIN 14

// Prenosová rýchlosť sériového pripojenia.

// t.j. stavová správa bude odoslaná do počítača s touto prenosovou rýchlosťou. // Skúste sa vyhnúť pomalým rýchlostiam, ako je 9600, pretože vám budú chýbať správy a // spôsobíte ďalšie problémy. Odporúča sa 115200 (alebo rýchlejší). // POZNÁMKA: Uistite sa, že ste nastavili svoj sériový monitor na rovnakú rýchlosť. #define BAUD_RATE 115200

// Pretože je tento program zachytávač/dekodér na špeciálne účely, použime väčší

// ako normálna vyrovnávacia pamäť, aby sme mohli spracovávať diaľkové kódy klimatizácie. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT je číslo. milisekund ne-viac údajov, než zvážime a

// správa sa skončila. // Tento parameter je zaujímavým kompromisom. Čím je časový limit dlhší, tým // správu dokáže zachytiť. napr. Niektoré protokoly zariadení odosielajú // niekoľko paketov správ v rýchlom slede, ako sú diaľkové ovládače klimatizácie. // Protokoly zariadenia Air Coniditioner majú často značnú medzeru (20-40+ms) medzi // paketmi. // Temnejšou stránkou veľkej hodnoty časového limitu je veľa menej zložitých protokolov // odosielanie viacerých správ pri podržanom tlačidle diaľkového ovládača. Medzera medzi // nimi je často tiež okolo 20+ms. To môže mať za následok, že nespracované údaje budú 2–3+ // krát väčšie, ako je potrebné, pretože zachytia 2–3+ správ v jednom // zázname. Problém môže vyriešiť nastavenie nízkej hodnoty časového limitu. // Takže výber najlepšej hodnoty TIMEOUT pre váš konkrétny prípad použitia je // dosť odlišný. Veľa šťastia a šťastný lov. // POZNÁMKA: Neprekračujte MAX_TIMEOUT_MS. Spravidla 130 ms. #if DECODE_AC #define TIMEOUT 50U // Niektoré klimatizačné jednotky majú vo svojich protokoloch medzery ~ 40 ms. // napr. Kelvinator // Hodnota, ktorá je taká veľká, môže prehltnúť opakovanie niektorých protokolov #else // DECODE_AC #define TIMEOUT 15U // Vyhovuje väčšine správ, pričom neprehltne veľa opakovaní. #endif // DECODE_AC // Alternatívy: // #define TIMEOUT 90U // Vyhovuje správam s veľkými medzerami, ako je XMP-1 a niektoré jednotky aircon //, ale môže omylom prehltnúť opakované správy // vo výstupe rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Tým sa nastaví na naše aktuálne povolené // maximum. Také vysoké hodnoty sú problematické //, pretože je to zhruba typická hranica //, kde sa väčšina správ opakuje. // napr. Zastaví dekódovanie správy a // začne ju odosielať na sériové číslo presne // v čase, kedy je pravdepodobné, že // bude odoslaná ďalšia správa, a môže chýbať.

// Nastavte najmenšie pakety správ „NEZNÁMY“, na ktorých nám skutočne záleží.

// Táto hodnota pomáha znižovať mieru falošne pozitívnej detekcie IR pozadia // šumu ako skutočných správ. Šance na detekciu šumu IR pozadia // ako správy sa zvyšujú s dĺžkou hodnoty TIMEOUT. (Pozri vyššie) // Nevýhodou nastavenia príliš veľkej správy je, že vám môžu chýbať niektoré platné // krátke správy pre protokoly, ktoré táto knižnica ešte nedekóduje. // // Nastavte vyššie, ak dostávate veľa náhodných krátkych NEZNÁMYCH správ, keď správu nemá odosielať nič //. // Nastavte nižšie, ak ste si istí, že vaše nastavenie funguje, ale nezobrazujú sa vám správy // z vášho zariadenia. (napr. Ostatné diaľkové ovládače IR fungujú.) // POZNÁMKA: Nastavte túto hodnotu veľmi vysoko, aby ste efektívne vypli NEZNÁME rozpoznávanie. #define MIN_UNKNOWN_SIZE 12 // ========================= koniec laditeľných parametrov =======================

// Na úplnejšie pokrytie zachytením použite funkciu zapnutia vyrovnávacej pamäte.

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

decode_results výsledky; // Niekde na uloženie výsledkov

// Ak je to možné, zobrazte ľudsky čitateľný stav klimatizačnej správy.

neplatné dumpACInfo (decode_results *results) {Popis reťazca = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (výsledky-> stav); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (výsledky-> stav, výsledky-> bity / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (výsledky-> stav); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (výsledky-> stav); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (výsledky-> hodnota); // Midea používa namiesto stavu hodnotu. description = ac.toString (); } #endif // DECODE_MIDEA // Ak sme dostali popis správy čitateľný pre človeka, zobrazte ho. if (description! = "") Serial.println ("Mesg Desc.:" + description); }

// Časť kódu sa pri spustení spustí iba raz.

neplatné nastavenie () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); oneskorenie (500); // Chvíľu počkajte, kým sa nadviaže sériové pripojenie.

#if DECODE_HASH

// Ignorovanie správ s menej ako minimálnym počtom impulzov zapnutia alebo vypnutia. unbcv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unbcv.enableIRIn (); // spustenie prijímača}

// Opakujúca sa časť kódu

// void loop () {// Skontrolujte, či bol prijatý IR kód. if (unbcv.decode (& results)) {// Zobraziť hrubú časovú pečiatku. uint32_t now = millis (); Serial.printf ("Časová pečiatka: %06u. %03u / n", teraz / 1000, teraz %1000); if (results.overflow) Serial.printf („UPOZORNENIE: Infračervený kód je príliš veľký pre vyrovnávaciu pamäť (> = %d).“„Tento výsledok by nemal byť dôveryhodný, kým sa to nevyrieši.“„Upraviť a zvýšiť CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Zobrazte základný výstup toho, čo sme našli. Serial.print (resultToHumanReadableBasic (& results)); dumpACInfo (& výsledky); // Zobrazte akékoľvek ďalšie informácie o klimatizácii, ak ich máme. výťažok (); // Podajte WDT, pretože vytlačenie textového výstupu môže chvíľu trvať.

// Zobrazí verziu knižnice, s ktorou bola správa zachytená.

Serial.print ("Knižnica: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// Výstup informácií o načasovaní formátu RAW.

Serial.println (resultToTimingInfo (& results)); výťažok (); // Nakŕmte WDT (znova)

// Výstup výsledkov ako zdrojový kód

Serial.println (resultToSourceCode (& results)); Serial.println (""); // Prázdny riadok medzi položkami yield (); // Nakŕmte WDT (znova)}}

Keď je táto skica nahraná a spustená s otvoreným sériovým monitorom, vygeneruje kód na stlačenie tlačidla (pozri obrázok)

Zapíšte si kódy, ktoré chcete použiť na neskoršie použitie. Použil som program Excel na zaznamenanie toho, čo som dostal pre tlačidlá, ktoré som chcel použiť (pozri obrázok)

Upravil som tlačidlá v mojej aktivite Netflix tak, aby odoslali signál pozastavenia z diaľkového ovládača panasonic.. (pozri obrázok)

Krok 3: Napíšte kód na odoslanie spoločnosti Nodered

Napísanie kódu na odoslanie spoločnosti Nodered
Napísanie kódu na odoslanie spoločnosti Nodered

#ifndef UNIT_TEST #include #endif #include

#zahrnúť

#zahrnúť

#zahrnúť

#zahrnúť

#zahrnúť

const char* ssid = ""; // Sem zadajte SSID znak char* heslo = ""; // Sem zadajte heslo const char *host = ""; // Adresa IP #define USE_SERIAL Sériový ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unbcv (RECV_PIN); decode_results výsledky; void setup () {unbcv.enableIRIn (); // Spustite prijímač USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[NASTAVENIE] ČAKAJTE %d … / n", t); USE_SERIAL.flush (); oneskorenie (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, heslo); } void loop () {if (unbcv.decode (& results)) {

// Zmeňte túto hodnotu signálu na ten, ktorý máte

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pozastaviť prijatý signál"); wifisend (pauza); oneskorenie (1000);

} if (results.value == 0x400401007273)

USE_SERIAL.println („predchádzajúci“);

wifisend ("predchádzajúci"); oneskorenie (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend („ďalší“); oneskorenie (1000); }

unbcv.resume (); // Príjem ďalšej hodnoty} zdržanie (100); } void wifisend (Reťazcové údaje) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] begin … / n"); // konfigurácia traged servera a URL http.begin ("https:// [užívateľ]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] ZÍSKAJTE … / n"); // spustenie pripojenia a odoslanie hlavičky HTTP int httpCode = http. GET (); // httpCode bude pri chybe záporný, ak (httpCode> 0) {// hlavička HTTP bola odoslaná a bola spracovaná hlavička odpovede servera USE_SERIAL.printf ("[HTTP] ZÍSKAJTE … kód: %d / n", // súbor nájdený na serveri

if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (užitočné zaťaženie); }} else {USE_SERIAL.printf ("[HTTP] GET … failed, error: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); oneskorenie (100); }}

Toto je kód, ktorý som použil na svojom nodemcu. Tieto knižnice budete musieť mať nainštalované.

Odpoveď môžete testovať pomocou sériového monitora a stlačením diaľkových tlačidiel, ktoré ste pridali do kódu.

V riadku:

http.begin ("https:// [používateľ]: [prejsť]@[ip]: [port]/chromecastpause? data =" + údaje);

Musíte zmeniť [používateľa] na svojho používateľa a podobne. BEZ zátvoriek. zátvorky slúžia na zobrazenie polí čarodejníc, ktoré je potrebné zmeniť.

Táto linka tiež nebude fungovať, kým nenastavíme tok v uzle.

Krok 4: Vytvorenie toku v Nodered

Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle
Vytvorenie toku v uzle

Ako bolo uvedené na začiatku, používam hass.io s uzlom. Ak spustíte iné nastavenie, budete ho musieť zmeniť! Na obrázku vidíte, že po stlačení tlačidla sa v okne ladenia zobrazí …

Uzol zmeny užitočného zaťaženia mohol byť pravdepodobne preskočený, ak by som v predchádzajúcom kroku vybral niečo iné ako údaje =. Prepínací uzol, ktorý používam, je oveľa väčší, než pauza, ale to je len preto, aby som mohol pridať ďalšie signály IR na používanie chromecastu pre rozhlasové stanice atď.

Na pozastavenie prehrávania môžete použiť postup na druhom obrázku.

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

Odstránil som z toho meno userpass a URL, takže to možno budete musieť upraviť.

pridajte uzol prepínača, ak chcete reagovať nielen na pozastavenie (pozri napríklad obrázok)

V uzle domáceho asistenta na pozastavenie použite:

name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [váš chromecast tu]"}}

pre ďalšiu skladbu skopírujte tento uzol a upravte službu na: media_next_track a pomenujte do: next chromecast

Krok 5: Voliteľné Alexa Pause Chromecast

Voliteľné pridať príkaz alexa na pozastavenie chromecastu:

Tu sú možnosti.. Môžete vytvoriť jeden uzol alexa s názvom pause chromecast, ktorý pozastaví chromecast, alebo si môžete vytvoriť pozastavený televízor, ktorý kontroluje aktuálnu aktivitu harmónie a podľa toho sa pozastaví.

Neskôr to sem pridám..

Odporúča: