Tartalomjegyzék:

Szüneteltesse a Chromcastot távirányítóval: 5 lépés
Szüneteltesse a Chromcastot távirányítóval: 5 lépés

Videó: Szüneteltesse a Chromcastot távirányítóval: 5 lépés

Videó: Szüneteltesse a Chromcastot távirányítóval: 5 lépés
Videó: ПАУЗА ЧЕЛЛЕНДЖ ⏸ в ОТНОШЕНИЯX! Ксюша и Даниель РАССТАЛИСЬ из-за ПОТЕРЯННОЙ ПОСЫЛКИ! 2024, Július
Anonim
Image
Image
Felszerelés
Felszerelés

Van egy Logitech harmónia távirányítóm, és futtatom a Home asszisztenst egy málna pi -n.

Szerettem volna szüneteltetni a chromecastot a távirányítómról, de van egy régi tévém, ami nem támogatja ezt hdmi -n keresztül. Az én ötletem az volt, hogy egy NodeMcu segítségével elkapom az ir jelet és szüneteltetem.

Ha nem tudja működésbe hozni, vagy kérdése van, kérjük, tegye meg az alábbi megjegyzést

1. lépés: Felszerelés

Felszerelés
Felszerelés
Felszerelés
Felszerelés

Szükséges felszerelés:

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

Irányító (mint például ez:

dupont vezetékek

Micro usb kábel (tápcsatlakozó)

Logitech Harmony -hub -ot használok

Az én megközelítésemhez szüksége van egy Raspberry pi -re hass.io -val, telepítve és csomózva. Nem fogok itt háziasszisztenseket beállítani. Ha a házi asszisztensen kívül mást használ, akkor magának kell alkalmazkodnia.

Tudnia kell használni a Nodemcu -t az Arduino IDE -n, mivel ebbe nem szoktam belemenni

2. lépés: Távoli jel

Távoli jel
Távoli jel
Távoli jel
Távoli jel
Távoli jel
Távoli jel
Távoli jel
Távoli jel

Én úgy csináltam, hogy egy jelet másoltam egy nem használt távirányítóból a harmónia távirányítóba.

A Panasonic TXL32C3E tv -készülékéhez távirányítót használtam, mivel ez nem zavarja az első emeleti felszereléseimet. Ez a TV van fent.

Ha nem használ harmóniát, akkor ezt kihagyhatja.

Tehát a jel megtalálásához ezt a vázlatot használtam:

/ * * IRremoteESP8266: IRrecvDumpV2 - az IR -kódok részletei az IRrecv -vel * IR -érzékelőt/demodulátort kell csatlakoztatni a RECV_PIN bemenethez. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Példa kapcsolási rajzra: * https://arcfn.com * * Változások: * 2017. november 0.3 verzió * - A/C támogatása egyes protokollok dekódolása. * 2017. április 02. verzió * - Dekódoljon az adatok másolatából, hogy gyorsabban elkezdhessük a rögzítést, így * csökkentsük a hibás rögzítések valószínűségét. * Ken Shirriff IrsendDemo 2009. július 0,1 -i verziója alapján, */

#ifndef UNIT_TEST

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

// ==================== A TUNEABLE PARAMÉTEREK kezdete ====================

// IR érzékelő/demodulátor csatlakozik a GPIO 14 tűhöz // pl. D5 a NodeMCU táblán. #define RECV_PIN 14

// A soros kapcsolat átviteli sebessége.

// azaz az állapotüzenet ezen a sebességgel kerül elküldésre a számítógépre. // Próbálja meg elkerülni a lassú sebességeket, például a 9600 -at, mert hiányoznak az üzenetek, és // egyéb problémákat okoz. 115200 (vagy gyorsabb) ajánlott. // MEGJEGYZÉS: Győződjön meg arról, hogy a soros monitort azonos sebességre állította be. #define BAUD_RATE 115200

// Mivel ez a program speciális célú rögzítés/dekódoló, használjunk nagyobbat

// mint a normál puffer, hogy kezelni tudjuk a légkondicionáló távoli kódjait. #define CAPTURE_BUFFER_SIZE 1024

// A TIMEOUT a Nr. milli-másodpercnyi nincs adat, mielőtt a

// az üzenet véget ért. // Ez a paraméter érdekes kompromisszum. Minél hosszabb az időtúllépés, annál // összetettebb üzenetet tud rögzíteni. például. Egyes eszközprotokollok több üzenetcsomagot // küldenek gyorsan egymás után, például a légkondicionáló távirányítóit. // Az Air Coniditioner protokollok gyakran jelentős rést (20-40+ms) tartalmaznak a // csomagok között. // A nagy időtúllépési érték hátránya a sok kevésbé összetett protokoll // több üzenet küldése, ha a távvezérlő gombját lenyomva tartja. A // közötti rés gyakran szintén 20+ms körül van. Ez azt eredményezheti, hogy a nyers adatok a szükségesnél 2-3-szor nagyobbak lehetnek, mivel 2-3+ üzenetet rögzítettek egyetlen // rögzítésben. Az alacsony időtúllépési érték beállítása megoldhatja ezt. // Tehát a legjobb TIMEOUT érték kiválasztása az adott esethez // meglehetősen árnyalt. Sok sikert és jó vadászatot. // MEGJEGYZÉS: Ne lépje túl a MAX_TIMEOUT_MS időt. Általában 130 ms. #if DECODE_AC #define TIMEOUT 50U // Néhány légkondicionáló egység protokollja ~ 40 ms -os. // például. Kelvinator // Egy ekkora érték lenyelheti egyes protokollok ismétléseit #else // DECODE_AC #define TIMEOUT 15U // A legtöbb üzenethez illeszkedik, miközben nem ismétel sok ismétlést. #endif // DECODE_AC // Alternatívák: // #define TIMEOUT 90U // Alkalmas a nagy résekkel rendelkező üzenetekre, mint például az XMP-1 és néhány légkondicionáló // egység, de véletlenül lenyelheti az ismétlődő üzeneteket // a rawData kimenetben. // #define TIMEOUT MAX_TIMEOUT_MS // Ez beállítja a jelenleg engedélyezett // maximumra. Az ilyen magas értékek problematikusak //, mert nagyjából ez a tipikus határ // ahol a legtöbb üzenet ismétlődik. // például. Leállítja az üzenet dekódolását, és // pontosan akkor kezdi el küldeni a sorosnak, amikor a következő üzenet valószínűleg // továbbításra kerül, és elmaradhat.

// Állítsa be a legkisebb méretű "ISMERETLEN" üzenetcsomagokat, amelyek valóban érdekelnek minket.

// Ez az érték segít csökkenteni az infravörös háttér hamis pozitív észlelési arányát // a valós üzeneteket. A háttér infravörös zaj észlelésének esélye // üzenetként nő a TIMEOUT érték hosszával. (Lásd fent) // Az üzenet túl nagy beállításának hátránya, hogy kihagyhat néhány érvényes // rövid üzenetet a protokollokhoz, amelyeket ez a könyvtár még nem dekódol. // // Állítsa magasabbra, ha sok véletlenszerű, ismeretlen üzenetet kap, amikor semmi // nem küld üzenetet. // Állítsa alacsonyabbra, ha biztos abban, hogy a beállítás működik, de nem látja az üzeneteket // az eszközről. (pl. Más infravörös távirányítók működnek.) // MEGJEGYZÉS: Állítsa ezt az értéket nagyon magasra az ISMERETLEN felismerés hatékony kikapcsolásához. #define MIN_UNKNOWN_SIZE 12 // ==================== A TUNEABLE PARAMETERS vége ====================

// Használja a mentési puffer funkció bekapcsolását a teljesebb rögzítés érdekében.

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

decode_results eredmények; // Valahol az eredmények tárolására

// Ha lehetséges, jelenítse meg egy légkondicionáló üzenet ember által olvasható állapotát.

void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (eredmények-> állapot, eredmények-> bit / 8); leírás = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (eredmények-> állapot); leírás = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (eredmények-> érték); // A Midea értéket használ az állapot helyett. leírás = ac.toString (); } #endif // DECODE_MIDEA // Ha ember által olvasható leírást kaptunk az üzenetről, jelenítse meg. if (description! = "") Serial.println ("Mesg Desc.:" + leírás); }

// A kódrész csak egyszer fut az indításkor.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); késleltetés (500); // Várjon egy kicsit, amíg létrejön a soros kapcsolat.

#ha DECODE_HASH

// A minimálisnál kisebb be- és kikapcsolási impulzusokkal rendelkező üzenetek figyelmen kívül hagyása. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Indítsa el a vevőkészüléket}

// A kód ismétlődő szakasza

// void loop () {// Ellenőrizze, hogy megkapta -e az IR -kódot. if (irrecv.decode (& results)) {// Nyers időbélyeg megjelenítése. uint32_t most = millis (); Serial.printf ("Időbélyeg: %06u. %03u / n", most / 1000, most %1000); if (results.overflow) Serial.printf ("FIGYELMEZTETÉS: Az IR -kód túl nagy a pufferhez (> = %d)." "Ezt az eredményt addig nem szabad bízni, amíg ezt nem oldják meg." "Szerkesztés és növelés CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Megjeleníti az alapkimenetet, amit találtunk. Serial.print (resultToHumanReadableBasic (& eredmények)); dumpACInfo (& eredmények); // Jelenítsen meg minden további légkondicionáló információt, ha megvan. hozam(); // Töltse be a WDT -t, mivel a szövegkimenet eltarthat egy ideig.

// Az üzenet rögzítésének könyvtári verziójának megjelenítése.

Serial.print ("Könyvtár: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Sorozat.println ();

// Az eredmény RAW időzítési információinak kiadása.

Serial.println (resultToTimingInfo (& results)); hozam(); // Adja meg a WDT -t (újra)

// Az eredményeket forráskódként adja ki

Serial.println (resultToSourceCode (& results)); Serial.println (""); // A bejegyzések közötti üres sor hozam (); // Adja meg a WDT -t (ismét)}}

Amikor ezt a vázlatot feltöltik, és nyitott soros monitorral fut, a gombnyomás kódját adja ki (lásd a képet)

Írja le azokat a kódokat, amelyeket később használni szeretne. Az excellel jegyeztem fel, hogy mit kaptam a használni kívánt gombokhoz (lásd a képet)

Szerkesztettem a Netflix tevékenységem gombjait, hogy szüneteltetési jelet küldjenek a Panasonic távirányítójáról. (Lásd a képet)

3. lépés: A kódolás megírása a Nodered -be küldéshez

A kódolás megírása a Noderedhez való küldéshez
A kódolás megírása a Noderedhez való küldéshez

#ifndef UNIT_TEST #include #endif #include

#befoglalni

#befoglalni

#befoglalni

#befoglalni

#befoglalni

const char* ssid = ""; // Írja be az SSID -t itt: char* password = ""; // Itt írja be a jelszót const char *host = ""; // Ip -cím #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results eredmények; void setup () {irrecv.enableIRIn (); // Indítsa el a vevőt USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (igaz); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); késleltetés (1000); } WiFi.mód (WIFI_STA); WiFiMulti.addAP (ssid, jelszó); } void loop () {if (irrecv.decode (és eredmények)) {

// Módosítsa ezt a jelértéket a kapott értékhez

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("szünetelteti a jelzést"); wifisend (szünet); késleltetés (1000);

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

USE_SERIAL.println ("előző");

wifisend ("előző"); késleltetés (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("next"); wifisend ("következő"); késleltetés (1000); }

irrecv.resume (); // A következő érték fogadása} delay (100); } void wifisend (String adatok) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] kezdődik… / n"); // tragédiaszerver és URL beállítása http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] GET… / n"); // indítsa el a kapcsolatot és küldjön HTTP fejlécet int httpCode = http. GET (); // A httpCode negatív lesz, ha (httpCode> 0) {// A HTTP fejléc el lett küldve, és a kiszolgáló válaszfejléce meg lett kezelve USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // fájl található a szerveren

if (httpCode == HTTP_CODE_OK) {String hasznos terhelés = http.getString (); USE_SERIAL.println (hasznos terhelés); }} else {USE_SERIAL.printf ("[HTTP] GET… nem sikerült, hiba: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); késleltetés (100); }}

Ezt a kódot használtam a nodemcu -n. Telepítenie kell ezeket a könyvtárakat.

Tesztelhet a soros monitor használatával, és megnyomhatja a kódban hozzáadott távoli gombokat a válasz megjelenítéséhez.

A sorban:

http.begin ("https:// [user]: [pass]@[ip]: [port]/chromecastpause? data =" + data);

Módosítania kell a [user] felhasználót, és így tovább. Konzolok NÉLKÜL. zárójelek vannak a változó boszorkánymezők megjelenítéséhez.

Ez a vonal sem fog működni, amíg nem állítjuk be az áramlást bólogatva.

4. lépés: Folyamat létrehozása csomópontban

Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben
Folyamat létrehozása a Nodered -ben

Amint az elején említettem, hass.io -t használok bólogatva. Ha más beállítást futtat, akkor ezt másként kell tennie! A képen látható, hogy amikor megnyom egy gombot, az megjelenik a hibakeresési ablakban …

A változó hasznos terhelés csomópont valószínűleg kihagyható lett volna, ha az előző lépésben valami mást választottam, mint az adatok =. Az általam használt kapcsoló csomópont sokkal nagyobb, csak szünet, de ez csak azért van, hogy még több jelzést adhassak hozzá a chromecast használatához rádióállomásokhoz stb.

A játék szüneteltetéséhez használhatja a másik képen látható folyamatot.

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

Eltávolítottam innen a userpass és url nevet, így lehet, hogy módosítania kell.

adjon hozzá kapcsolócsomópontot, ha nem csak a szünetre szeretne reagálni (lásd például a képet)

Az otthoni asszisztens csomópontjában szüneteltetésre:

név: lejátszás szüneteltetése chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [a chromecast itt]"}

a következő műsorszámhoz csak másolja ezt a csomópontot, és szerkessze a szolgáltatást a következőre: media_next_track, és neve: next chromecast

5. lépés: Opcionális Alexa Szüneteltesse a Chromecastot

Opcionális alexa parancs hozzáadása a chromecast szüneteltetéséhez:

Itt vannak lehetőségek.. Készíthet egy alexa nnode -t, amelyet pause chromecast -nak hívnak, és amely szünetelteti a chromecast -ot, vagy készíthet egy úgynevezett szünet tv -t, amely ellenőrzi az aktuális harmóniatevékenységet és attól függően szünetet.

Ezt később ide is beírom..

Ajánlott: