Innehållsförteckning:
- Steg 1: Utrustning
- Steg 2: Fjärrsignal
- Steg 3: Skriva koden för att skicka till Nodered
- Steg 4: Skapa ett flöde i Nodered
- Steg 5: Valfri Alexa Paus Chromecast
Video: Pausa Chromcast med en fjärrkontroll: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:38
Jag har en Logitech Harmony -fjärrkontroll och kör hemassistent på en hallonpi.
Jag ville kunna pausa chromecast från min fjärrkontroll, men jag har en gammal tv som inte stöder detta via hdmi. Min idé var då att använda en NodeMcu för att fånga IR -signalen och pausa.
Om du inte kan få det att fungera eller har frågor vänligen kommentera nedan
Steg 1: Utrustning
Utrustning som behövs:
Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Ir-mottagare (som ex:
dupont -trådar
Micro usb -kabel (power nodemcu)
Jag använder Logitech Harmony -hub
För mitt tillvägagångssätt Du behöver en hallon pi med hass.io installerat och Nodered. Om du använder något annat än hemassistent måste du anpassa saker själv.
Du måste kunna använda Nodemcu på Arduino IDE eftersom jag inte går in på det här
Steg 2: Fjärrsignal
Sättet jag gjorde det var att kopiera en signal från en fjärrkontroll som jag inte använder till harmonifjärrkontrollen.
Jag använde en fjärrkontroll för panasonic tv -modell TXL32C3E eftersom det inte stör min utrustning på min första våning. Det är en tv jag har på övervåningen.
Om du inte använder harmoni kan du hoppa över detta.
Så för att hitta signalen använde jag denna skiss:
/ * * IRremoteESP8266: IRrecvDumpV2 - dumpdetaljer för IR -koder med IRrecv * En IR -detektor/demodulator måste anslutas till ingången RECV_PIN. * * Copyright 2009 Ken Shirriff, https://arcfn.com * Copyright 2017 David Conran * * Exempel på kretsschema: * https://arcfn.com * * Ändringar: * Version 0.3 november, 2017 * - Stöd för A/C avkodning för några protokoll. * Version 0.2 april, 2017 * - Avkoda från en kopia av data så att vi kan börja fånga snabbare och därmed * minska sannolikheten för missuppfattningar. * Baserat på Ken Shirriffs IrsendDemo Version 0.1 juli 2009, */
#ifndef UNIT_TEST
#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC
// ===================== start av TUNEABLE PARAMETERS ======================
// En IR -detektor/demodulator är ansluten till GPIO -stift 14 // t.ex. D5 på ett NodeMCU -kort. #define RECV_PIN 14
// Den seriella anslutningens överföringshastighet.
// dvs statusmeddelande kommer att skickas till datorn med denna överföringshastighet. // Försök att undvika långsamma hastigheter som 9600, eftersom du kommer att sakna meddelanden och // orsaka andra problem. 115200 (eller snabbare) rekommenderas. // OBS: Se till att du ställer in din seriella bildskärm till samma hastighet. #define BAUD_RATE 115200
// Eftersom det här programmet är ett specialfångst/avkodare, låt oss använda en större
// än normal buffert så att vi kan hantera fjärrkoder för luftkonditionering. #define CAPTURE_BUFFER_SIZE 1024
// TIMEOUT är Nr. av milli-sekunder av icke-mer-data innan vi överväger a
// meddelandet slutade. // Denna parameter är en intressant avvägning. Ju längre timeout, desto mer // komplext meddelande kan det fånga. t.ex. Vissa enhetsprotokoll skickar // flera meddelandepaket i snabb följd, till exempel luftkonditioneringsfjärrkontroller. // Air Coniditioner-protokoll har ofta ett stort avstånd (20-40+ms) mellan // paket. // Nackdelen med ett stort timeout -värde är många mindre komplexa protokoll // skicka flera meddelanden när fjärrkontrollens knapp hålls nedtryckt. Klyftan mellan // dem är ofta också cirka 20+ms. Detta kan resultera i att rådata blir 2-3+ // gånger större än vad som behövs eftersom det har fångat in 2-3+ meddelanden i en enda // fångst. Att ställa in ett lågt timeout -värde kan lösa detta. // Så att välja det bästa TIMEOUT -värdet för ditt specifika fall är // ganska nyanserat. Lycka till och glad jakt. // OBS! Överskrid inte MAX_TIMEOUT_MS. Typiskt 130 ms. #if DECODE_AC #define TIMEOUT 50U // Vissa A/C -enheter har luckor i sina protokoll på ~ 40 ms. // t.ex. Kelvinator // Ett värde som är så stort kan svälja upprepningar av vissa protokoll #else // DECODE_AC #define TIMEOUT 15U // Passar de flesta meddelanden utan att svälja många upprepningar. #endif // DECODE_AC // Alternativ: // #define TIMEOUT 90U // Passar meddelanden med stora luckor som XMP-1 och vissa luftkonditionerade // enheter, men kan av misstag svälja upprepade meddelanden // i rawData -utmatningen. // #define TIMEOUT MAX_TIMEOUT_MS // Detta ställer in det tillåtna // maximalt. Värden som är så höga är problematiska // eftersom det är ungefär den typiska gränsen // där de flesta meddelanden upprepas. // t.ex. Det kommer att sluta avkoda ett meddelande och // börja skicka det till följetong vid exakt // den tid då nästa meddelande sannolikt // ska överföras, och kan missa det.
// Ställ in de minsta "okända" meddelandepaket som vi faktiskt bryr oss om.
// Detta värde hjälper till att minska den falskt positiva detektionshastigheten för IR-bakgrund // brus som riktiga meddelanden. Chansen att bakgrunds -IR -brus upptäcks // när ett meddelande ökar med TIMEOUT -värdet. (Se ovan) // Nackdelen med att ställa in detta meddelande för stort är att du kan missa några giltiga // korta meddelanden för protokoll som detta bibliotek ännu inte har avkodat. // // Ställ in högre om du får massor av slumpmässiga korta okända meddelanden när ingenting // ska skicka ett meddelande. // Ställ in lägre om du är säker på att installationen fungerar, men det visas inga meddelanden // från din enhet. (t.ex. andra IR -fjärrkontroller fungerar.) // OBS: Ställ in detta värde mycket högt för att effektivt stänga av okänd detektion. #define MIN_UNKNOWN_SIZE 12 // ==================== slutet av TUNEABLE PARAMETERS =====================
// Använd slå på sparbuffertfunktionen för mer fullständig inspelningstäckning.
IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, true);
resultat avkodningsresultat; // Någonstans att lagra resultaten
// Visa det mänskliga läsbara tillståndet för ett A/C -meddelande om vi kan.
void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (resultat-> tillstånd); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (resultat-> tillstånd, resultat-> bitar / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (resultat-> tillstånd); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (resultat-> tillstånd); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (resultat-> värde); // Midea använder värde istället för stat. description = ac.toString (); } #endif // DECODE_MIDEA // Om vi har en läsbar beskrivning av meddelandet, visa det. if (description! = "") Serial.println ("Mesg Desc.:" + description); }
// Kodavsnittet körs bara en gång vid start.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); fördröjning (500); // Vänta lite tills seriell anslutning upprättas.
#if DECODE_HASH
// Ignorera meddelanden med mindre eller lägsta på eller av -pulser. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH irrecv.enableIRIn (); // Starta mottagaren}
// Den upprepande delen av koden
// void loop () {// Kontrollera om IR -koden har tagits emot. if (irrecv.decode (& resultat)) {// Visa en rå tidsstämpel. uint32_t nu = millis (); Serial.printf ("Tidsstämpel: %06u. %03u / n", nu / 1000, nu %1000); if (results.overflow) Serial.printf ("VARNING: IR -koden är för stor för buffert (> = %d)." "Detta resultat ska inte lita på förrän detta är löst." "Redigera och öka CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // Visa grundutmatningen för det vi hittade. Serial.print (resultToHumanReadableBasic (& resultat)); dumpACInfo (& resultat); // Visa eventuell extra A/C -information om vi har den. avkastning(); // Mata in WDT eftersom textutmatningen kan ta ett tag att skriva ut.
// Visa biblioteksversionen som meddelandet fångades med.
Serial.print ("Bibliotek: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();
// Utmatning RAW -timinginformation av resultatet.
Serial.println (resultToTimingInfo (& resultat)); avkastning(); // Mata WDT (igen)
// Mata ut resultaten som källkod
Serial.println (resultToSourceCode (& resultat)); Serial.println (""); // Tom rad mellan poster avkastning (); // Mata WDT (igen)}}
När denna hämtning laddas upp och körs med seriell bildskärm öppen kommer den att mata ut koden för knapptryckning (se bild)
Skriv ner koder du vill använda för senare användning. Jag använde Excel för att notera vad jag fick för knappar jag ville använda (se bild)
Jag redigerade knapparna i min Netflix -aktivitet för att skicka paussignal från panasonics fjärrkontroll.. (se bild)
Steg 3: Skriva koden för att skicka till Nodered
#ifndef UNIT_TEST #inkluderar #endif #include
#omfatta
#omfatta
#omfatta
#omfatta
#omfatta
const char* ssid = ""; // Ange SSID hereconst char* password = ""; // Ange lösenord här const char *host = ""; // Ip addresse #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); resultat avkodningsresultat; void setup () {irrecv.enableIRIn (); // Starta mottagaren USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (true); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
för (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] WAIT %d … / n", t); USE_SERIAL.flush (); fördröjning (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, lösenord); } void loop () {if (irrecv.decode (& resultat)) {
// Ändra detta signalvärde för det du fick
if (results.value == 0x40040D00606D) {USE_SERIAL.println ("pausa signal mottagen"); wifisend (paus); fördröjning (1000);
} if (results.value == 0x400401007273) {
USE_SERIAL.println ("föregående");
wifisend ("prev"); fördröjning (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("nästa"); wifisend ("nästa"); fördröjning (1000); }
irrecv.resume (); // Få nästa värde} fördröjning (100); } void wifisend (strängdata) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] börjar … / n"); // konfigurera traged server och url http.begin ("https:// [användare]: [pass]@[ip]: [port]/chromecastpause? data =" + data); USE_SERIAL.print ("[HTTP] FÅ … / n"); // starta anslutningen och skicka HTTP -rubrik int httpCode = http. GET (); // httpCode kommer att vara negativ vid fel om (httpCode> 0) {// HTTP -rubrik har skickats och serversvarhuvud har hanterats USE_SERIAL.printf ("[HTTP] GET … code: %d / n", // filen hittades på servern
if (httpCode == HTTP_CODE_OK) {String nyttolast = http.getString (); USE_SERIAL.println (nyttolast); }} annat {USE_SERIAL.printf ("[HTTP] FÅR… misslyckades, fel: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); fördröjning (100); }}
Detta är koden jag använde på min nodemcu. Du måste ha dessa bibliotek installerade.
Du kan testa med seriell bildskärm och trycka på fjärrknappar som du lade till i koden för att se svaret.
I raden:
http.begin ("https:// [användare]: [pass]@[ip]: [port]/chromecastpause? data =" + data);
Du måste byta [användare] till din användare och så vidare. UTAN fästen. parenteser finns för att visa häxfält som ska ändras.
Den raden fungerar inte heller förrän vi ställer in vårt flöde i noderat.
Steg 4: Skapa ett flöde i Nodered
Som nämnts i början använder jag hass.io med nodered. Om du kör en annan installation måste du göra detta annorlunda! Du kan se på bilden att när en knapp trycks visas den i felsökningsfönstret …
Ändringsnyttolastnoden kunde förmodligen ha hoppats över om jag hade valt något annat som data = i föregående steg. Omkopplingsnoden jag använder är mycket större än paus, men det är bara så att jag kan lägga till fler IR -signaler för att använda Chromecast för radiostationer etc.
För att bara spela paus kan du använda flödet i den andra bilden.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "wires":
Jag tog bort namn userpass och url från detta så du kan behöva redigera det.
lägg till en switchnod om du vill reagera på mer än bara pausa (se bild till exempel)
I hemassistentnoden för pausanvändning:
namn: spela paus chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [din chromecast här]"}
för nästa spår, kopiera bara den noden och redigera tjänsten till: media_next_track och namn till: nästa chromecast
Steg 5: Valfri Alexa Paus Chromecast
Valfritt lägg till alexa -kommando för paus chromecast:
Det finns alternativ här.. Du kan göra en alexa nnod som kallas pausa chromecast som pausar chromecast, eller så kan du göra en kallad paus -tv som kontrollerar aktuell harmoniaktivitet och pausar beroende på det.
Jag lägger till det här senare..
Rekommenderad:
RF 433MHZ radiokontroll med HT12D HT12E - Gör en RF -fjärrkontroll med HT12E och HT12D med 433mhz: 5 steg
RF 433MHZ radiokontroll med HT12D HT12E | Skapa en RF -fjärrkontroll med HT12E & HT12D med 433mhz: I den här instruktionsboken ska jag visa dig hur du gör en RADIO -fjärrkontroll med 433mhz -mottagarmodul med HT12E -kodning & HT12D -avkodare IC. I denna instruerbara kan du skicka och ta emot data med mycket mycket billiga KOMPONENTER SOM: HT
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
Hur man styr hushållsapparater med TV -fjärrkontroll med timerfunktion: 7 steg (med bilder)
Så här kontrollerar du hushållsapparater med fjärrkontroll med TV -funktion: Även efter 25 års introduktion till konsumentmarknaden är infraröd kommunikation fortfarande mycket relevant de senaste dagarna. Oavsett om det är din 55 -tums 4K -TV eller ditt billjudsystem behöver allt en IR -fjärrkontroll för att svara på vår
Konvertera din IR -fjärrkontroll till RF -fjärrkontroll: 9 steg (med bilder)
Konvertera din IR -fjärrkontroll till RF -fjärrkontroll: I dagens Instructable visar jag dig hur du kan använda en generisk RF -modul utan en mikrokontroller som så småningom kommer att leda oss till att bygga ett projekt där du kan konvertera en IR -fjärrkontroll från vilken enhet som helst till en RF Avlägsen. Den största fördelen med att konvertera en
Styr dina elektriska apparater med din fjärrkontroll för fjärrkontroll (IR -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: 9 steg
Styr dig elektriska apparater med din TV -fjärrkontroll (ir -fjärrkontroll) med temperatur- och luftfuktighetsdisplay: hej jag är Abhay och det är min första blogg om Instructables och idag ska jag visa dig hur du styr dina elektriska apparater med din fjärrkontroll genom att bygga detta enkelt projekt. tack till atl lab för stöd och tillhandahållande av materialet