Obsah:

Pozastavit Chromcast pomocí dálkového ovladače: 5 kroků
Pozastavit Chromcast pomocí dálkového ovladače: 5 kroků

Video: Pozastavit Chromcast pomocí dálkového ovladače: 5 kroků

Video: Pozastavit Chromcast pomocí dálkového ovladače: 5 kroků
Video: The Internet of Things by James Whittaker of Microsoft 2024, Červenec
Anonim
Image
Image
Vybavení
Vybavení

Mám dálkové ovládání Logitech Harmony a spouštím Home asistent na malinovém pi.

Chtěl jsem mít možnost pozastavit chromecast z dálkového ovladače, ale mám starou televizi, která to nepodporuje přes HDMI. Moje myšlenka byla poté použít NodeMcu k zachycení ir signálu a pozastavení.

Pokud vám to nejde do práce nebo máte otázky, napište prosím níže

Krok 1: Vybavení

Vybavení
Vybavení
Vybavení
Vybavení

Potřebné vybavení:

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

Ir reciver (jako například tento:

dupontní dráty

Micro USB kabel (napájecí nodemcu)

Používám Logitech Harmony -hub

Pro můj přístup potřebujete Raspberry pi s hass.io Nainstalováno a Nodered. Nebudu zde nastavovat věci odolné vůči domácímu prostředí. Pokud používáte něco jiného než domácí asistent, musíte si věci přizpůsobit sami.

Musíte být schopni používat Nodemcu na Arduino IDE, protože tady do toho nepůjdu

Krok 2: Vzdálený signál

Vzdálený signál
Vzdálený signál
Vzdálený signál
Vzdálený signál
Vzdálený signál
Vzdálený signál
Vzdálený signál
Vzdálený signál

Způsob, jakým jsem to udělal, bylo zkopírovat signál z dálkového ovladače, který nepoužívám, do dálkového ovladače harmonie.

Použil jsem dálkový ovladač pro televizor Panasonic model TXL32C3E, protože neruší mé zařízení v mém prvním patře. To je televize, kterou mám nahoře.

Pokud nepoužíváte harmonii, můžete to přeskočit.

Pro nalezení signálu jsem použil tento náčrt:

/ * * IRremoteESP8266: IRrecvDumpV2 - výpis výpisu IR kódů pomocí IRrecv * Ke vstupu RECV_PIN musí být připojen IR detektor/demodulátor. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Příklad schématu zapojení: * https://arcfn.com * * Změny: * Verze 0,3 listopadu 2017 * - Podpora klimatizace dekódování pro některé protokoly. * Verze 0.2. Duben 2017 * - Dekódujte kopii dat, abychom mohli začít zachytávat rychleji, a tak * snížit pravděpodobnost chybného zachycení. * Na základě IrsendDemo verze Ken Shirriffa, 0,1 července 2009, */

#ifndef UNIT_TEST

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

// ======================= Začátek laditelných parametrů ======================

// IR detektor/demodulátor je připojen ke kolíku GPIO 14 // např. D5 na desce NodeMCU. #define RECV_PIN 14

// Přenosová rychlost sériového připojení.

// tj. Stavová zpráva bude odeslána do PC s touto přenosovou rychlostí. // Zkuste se vyhnout pomalým rychlostem, jako je 9600, protože vám budou chybět zprávy a // způsobovat další problémy. Doporučuje se 115200 (nebo rychlejší). // POZNÁMKA: Ujistěte se, že jste nastavili váš sériový monitor na stejnou rychlost. #define BAUD_RATE 115200

// Protože je tento program zachycovač/dekodér pro zvláštní účely, použijme větší

// než normální vyrovnávací paměť, takže můžeme zpracovávat dálkové kódy klimatizace. #define CAPTURE_BUFFER_SIZE 1024

// TIMEOUT je číslo. milisekund ne-více dat, než uvážíme a

// zpráva ukončena. // Tento parametr je zajímavým kompromisem. Čím delší je časový limit, tím // složitější zprávu může zachytit. např. Některé protokoly zařízení odesílají // více paketů zpráv v rychlém sledu, jako jsou dálkové ovladače klimatizace. // Protokoly Air Coniditioner mají často značnou mezeru (20-40+ms) mezi // pakety. // Stinnou stránkou velké hodnoty časového limitu je spousta méně složitých protokolů // odesílání více zpráv, když je tlačítko ovladače podrženo. Mezera mezi // je často také kolem 20+ms. To může mít za následek, že nezpracovaná data budou 2–3+ // krát větší, než je potřeba, protože zachytila 2–3+ zpráv v jednom // zachycení. Problém lze vyřešit nastavením nízké hodnoty časového limitu. // Volba nejlepší hodnoty TIMEOUT pro konkrétní případ použití je // poměrně odlišná. Hodně štěstí a šťastný lov. // POZNÁMKA: Nepřekračujte MAX_TIMEOUT_MS. Obvykle 130 ms. #if DECODE_AC #define TIMEOUT 50U // Některé klimatizační jednotky mají ve svých protokolech mezery ~ 40ms. // např. Kelvinator // Takto velká hodnota může spolknout opakování některých protokolů #else // DECODE_AC #define TIMEOUT 15U // Vyhovuje většině zpráv, aniž by spolykala mnoho opakování. #endif // DECODE_AC // Alternativy: // #define TIMEOUT 90U // Vyhovuje zprávám s velkými mezerami jako XMP-1 a některým jednotkám aircon //, ale může omylem spolknout opakované zprávy // ve výstupu rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Tím se nastaví na naše aktuálně povolené // maximum. Takto vysoké hodnoty jsou problematické //, protože je to zhruba typická hranice //, kde se většina zpráv opakuje. // např. Zastaví dekódování zprávy a // začne ji odesílat do seriálu přesně // v době, kdy je pravděpodobné, že // bude odeslána další zpráva, a může ji minout.

// Nastavte nejmenší pakety zpráv „NEZNÁMÝ“, na kterých nám ve skutečnosti záleží.

// Tato hodnota pomáhá snížit míru falešně pozitivních detekcí IR pozadí // šumu jako skutečných zpráv. Šance, že bude detekován IR šum na pozadí // se zprávou, se zvyšuje s délkou hodnoty TIMEOUT. (Viz výše) // Nevýhodou nastavení příliš velké zprávy je, že vám mohou chybět některé platné // krátké zprávy pro protokoly, které tato knihovna ještě nerozluští. // // Nastavit vyšší, pokud dostáváte spoustu náhodných krátkých NEZNÁMÝCH zpráv, když nic // by nemělo odesílat zprávu. // Nastavte nižší, pokud jste si jisti, že vaše nastavení funguje, ale nevidí zprávy // z vašeho zařízení. (např. fungují jiné IR dálkové ovladače.) // POZNÁMKA: Nastavte tuto hodnotu velmi vysoko, abyste účinně vypnuli NEZNÁMOU detekci. #define MIN_UNKNOWN_SIZE 12 // ======================== konec VYHLEDATELNÝCH PARAMETRŮ =======================

// Pro úplnější pokrytí zachycení použijte funkci zapnutí vyrovnávací paměti.

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

decode_results výsledky; // Někde pro uložení výsledků

// Pokud je to možné, zobrazte lidský stav zprávy klimatizace.

neplatné dumpACInfo (decode_results *results) {String description = ""; #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žívá místo stavu hodnotu. description = ac.toString (); } #endif // DECODE_MIDEA // Pokud jsme dostali popis zprávy čitelný pro člověka, zobrazte jej. if (description! = "") Serial.println ("Mesg Desc.:" + description); }

// Část kódu se spustí pouze jednou při spuštění.

neplatné nastavení () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); zpoždění (500); // Chvíli počkejte, až bude navázáno sériové připojení.

#if DECODE_HASH

// Ignorování zpráv s méně než minimálním počtem impulzů zapnutí nebo vypnutí. unbcv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unbcv.enableIRIn (); // Spusťte přijímač}

// Opakující se část kódu

// void loop () {// Zkontrolujte, zda byl přijat IR kód. if (unbcv.decode (& results)) {// Zobrazení hrubého časového razítka. uint32_t now = millis (); Serial.printf ("Časové razítko: %06u. %03u / n", nyní / 1000, nyní %1000); if (results.overflow) Serial.printf ("UPOZORNĚNÍ: IR kód je příliš velký pro vyrovnávací paměť (> = %d)." "Tento výsledek by neměl být důvěryhodný, dokud to nebude vyřešeno." "Upravit a zvýšit CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Zobrazte základní výstup toho, co jsme našli. Serial.print (resultToHumanReadableBasic (& results)); dumpACInfo (& výsledky); // Pokud máme nějaké další informace o klimatizaci, zobrazte je. výtěžek(); // Nakrmte WDT, protože vytištění textového výstupu může chvíli trvat.

// Zobrazí verzi knihovny, pomocí které byla zpráva zachycena.

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

// Výstup informací o načasování RAW výsledku.

Serial.println (resultToTimingInfo (& results)); výtěžek(); // Nakrmte WDT (znovu)

// Výstup výsledků jako zdrojový kód

Serial.println (resultToSourceCode (& results)); Serial.println (""); // Prázdný řádek mezi položkami yield (); // Nakrmte WDT (znovu)}}

Když je tato skica nahrána a spuštěna s otevřeným sériovým monitorem, vygeneruje kód pro stisknutí tlačítka (viz obrázek)

Zapište si kódy, které chcete použít pro pozdější použití. Použil jsem Excel, abych si poznamenal, co jsem dostal pro tlačítka, která jsem chtěl použít (viz obrázek)

Upravil jsem tlačítka v mé aktivitě Netflix na Odeslat signál pozastavení z dálkového ovladače Panasonic.. (viz obrázek)

Krok 3: Napište kód pro odeslání společnosti Nodered

Psaní kódu pro odeslání společnosti Nodered
Psaní kódu pro odeslání společnosti Nodered

#ifndef UNIT_TEST #include #endif #include

#zahrnout

#zahrnout

#zahrnout

#zahrnout

#zahrnout

const char* ssid = ""; // Sem zadejte SSIDconst char* heslo = ""; // Sem zadejte heslo const char *host = ""; // Adresa IP #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unbcv (RECV_PIN); decode_results výsledky; neplatné nastavení () {unbcv.enableIRIn (); // Spusťte přijímač USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[NASTAVENÍ] ČEKEJTE %d … / n", t); USE_SERIAL.flush (); zpoždění (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, heslo); } void loop () {if (unbcv.decode (& results)) {

// Změňte tuto hodnotu signálu pro ten, který máte

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pause Signal receiveed"); wifisend (pauza); zpoždění (1000);

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

USE_SERIAL.println („předchozí“);

wifisend ("předchozí"); zpoždění (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend („další“); zpoždění (1000); }

unbcv.resume (); // Přijetí další hodnoty} zpoždění (100); } void wifisend (Řetězcová data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] begin … / n"); // konfigurace traged serveru a URL http.begin ("https:// [uživatel]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] ZÍSKAT … / n"); // spusťte připojení a odešlete hlavičku HTTP int httpCode = http. GET (); // httpCode bude negativní v případě chyby, pokud (httpCode> 0) {// Záhlaví HTTP bylo odesláno a hlavička odpovědi serveru byla zpracována USE_SERIAL.printf ("[HTTP] ZÍSKEJTE … kód: %d / n", // soubor nalezen na serveru

if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (užitečné zatížení); }} else {USE_SERIAL.printf ("[HTTP] GET… failed, error: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); zpoždění (100); }}

Toto je kód, který jsem použil na svém nodemcu. Tyto knihovny budete muset mít nainstalované.

Odpověď můžete otestovat pomocí sériového monitoru a stisknutím dálkových tlačítek, která jste přidali do kódu.

V řádku:

http.begin ("https:// [uživatel]: [průchod]@[ip]: [port]/chromecastpause? data =" + data);

Musíte změnit [uživatele] na svého uživatele atd. BEZ závorek. závorky slouží k zobrazení polí čarodějnic, které je třeba změnit.

Tato linka také nebude fungovat, dokud nenastavíme tok v uzlu.

Krok 4: Vytvoření toku v Nodered

Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered
Vytvoření toku v Nodered

Jak již bylo zmíněno na začátku, používám hass.io s kývnutím. Pokud spustíte jiné nastavení, budete ho muset změnit! Na obrázku vidíte, že po stisknutí tlačítka se v okně ladění zobrazí …

Uzel změny užitečného zatížení pravděpodobně mohl být přeskočen, pokud bych v předchozím kroku zvolil něco jiného než data =. Přepínací uzel, který používám, je mnohem větší než jen pozastavit, ale to je jen proto, abych mohl přidat více ir signálů pro použití chromecastu pro rozhlasové stanice atd.

Pro pouhou pauzu přehrávání můžete použít tok na druhém obrázku.

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

Odstranil jsem z toho jméno userpass a URL, takže to možná budete muset upravit.

pokud chcete reagovat na více než jen pozastavit, přidejte uzel přepínače (viz například obrázek)

V uzlu domácího asistenta pro pozastavení použijte:

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

pro další stopu zkopírujte tento uzel a upravte službu na: media_next_track a pojmenujte: next chromecast

Krok 5: Volitelně Alexa Pause Chromecast

Volitelné přidání příkazu alexa pro pozastavení chromecastu:

Tady jsou možnosti.. Můžete vytvořit jeden uzel alexa s názvem pause chromecast, který pozastaví chromecast, nebo můžete vytvořit jeden s názvem pause tv, který kontroluje aktuální aktivitu harmonie a podle toho pozastaví.

Přidám to sem později..

Doporučuje: