Სარჩევი:

შეაჩერე Chromcast დისტანციური მართვის საშუალებით: 5 ნაბიჯი
შეაჩერე Chromcast დისტანციური მართვის საშუალებით: 5 ნაბიჯი

ვიდეო: შეაჩერე Chromcast დისტანციური მართვის საშუალებით: 5 ნაბიჯი

ვიდეო: შეაჩერე Chromcast დისტანციური მართვის საშუალებით: 5 ნაბიჯი
ვიდეო: Mastering Microsoft's CLI Packet Capture: Pktmon.exe for IT Pros 2024, ივლისი
Anonim
Image
Image
აღჭურვილობა
აღჭურვილობა

მე მაქვს Logitech ჰარმონიის დისტანციური და სახლის ასისტენტი ჟოლოს პიზე.

მინდოდა შემეძლო შემეწყვიტა chromecast ჩემი დისტანციური მართვის პულტიდან, მაგრამ მე მაქვს ძველი ტელევიზია, რომელიც ამას არ უჭერს მხარს hdmi– ს საშუალებით. მაშინ ჩემი იდეა იყო გამოვიყენო NodeMcu, რათა დავიჭიროთ ir სიგნალი და პაუზა.

თუ თქვენ ვერ შეძლებთ მის მუშაობას ან გაქვთ შეკითხვები, გთხოვთ კომენტარი გააკეთოთ ქვემოთ

ნაბიჯი 1: აღჭურვა

აღჭურვილობა
აღჭურვილობა
აღჭურვილობა
აღჭურვილობა

საჭირო აღჭურვილობა:

ნოდემკუ (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…

მიმღები (მაგალითად, ეს:

დუპონტის მავთულები

მიკრო USB კაბელი (ძალა nodemcu)

მე ვიყენებ Logitech Harmony –ჰაბს

ჩემი მიდგომისთვის შენ გჭირდება ჟოლოს პი. თუ თქვენ იყენებთ რაიმე სხვას, ვიდრე სახლის დამხმარე, თქვენ თვითონ უნდა მოაწყოთ პერსონალი.

თქვენ უნდა შეგეძლოთ ნოდემკუს გამოყენება Arduino IDE– ზე, რადგან აქ არ შევალ

ნაბიჯი 2: დისტანციური სიგნალი

დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი
დისტანციური სიგნალი

მე ასე მოვიქეცი იყო სიგნალის კოპირება დისტანციური მართვისგან, რომელსაც არ ვიყენებ დისტანციურ დისტანციურად.

მე გამოვიყენე დისტანციური პანასონიკის სატელევიზიო მოდელი TXL32C3E, რადგან ის არ ერევა ჩემს აღჭურვილობაში ჩემს პირველ სართულზე. ეს ტელევიზია მაქვს ზემოთ.

თუ არ იყენებთ ჰარმონიას, შეგიძლიათ გამოტოვოთ ეს.

სიგნალის საპოვნელად მე გამოვიყენე ეს სქემა:

/ * * IRremoteESP8266: IRrecvDumpV2 - IR კოდების IR კოდების დეტალების გადაყრა * IR დეტექტორი/დემოდულატორი უნდა იყოს დაკავშირებული შეყვანის RECV_PIN– თან. * * საავტორო უფლება 2009 კენ შირიფი, https://arcfn.com * საავტორო უფლება 2017 დევიდ კონანი * * მაგალითი სქემის დიაგრამაზე: * https://arcfn.com * * ცვლილებები: * ვერსია 0.3 ნოემბერი, 2017 * - კონდიციონერის მხარდაჭერა დეკოდირება ზოგიერთი პროტოკოლისთვის. * ვერსია 0.2, აპრილი, 2017 * - გაშიფვრა მონაცემების ასლებიდან, ასე რომ ჩვენ შეგვიძლია დავიწყოთ უფრო სწრაფად გადაღება ამგვარად * შეამცირეთ შეცდომის ალბათობა. * კენ შირიფის IrsendDemo ვერსიაზე დაყრდნობით, 2009 წლის 0.1 ივლისი, */

#ifndef UNIT_TEST

#ჩართეთ #დამთავრება #ჩართეთ #ჩართეთ #ჩართეთ #თუ გაშიფრეთ_აკალ #ჩართეთ #ჩართეთ #ჩართეთ #ჩართეთ #ჩართეთ #ენდიფი // დეკოდირება_აკ

// ==================== TUNEABLE პარამეტრების დაწყება =====================

// IR დეტექტორი/დემოდულატორი დაკავშირებულია GPIO პინ 14 -თან // მაგ. D5 NodeMCU დაფაზე. #განსაზღვრეთ RECV_PIN 14

// სერიული კავშირის ბოდის მაჩვენებელი.

// ანუ სტატუსის შეტყობინება გაიგზავნება კომპიუტერზე ამ სიჩქარით. // შეეცადეთ თავიდან აიცილოთ ნელი სიჩქარე, როგორიცაა 9600, რადგან თქვენ გამოტოვებთ შეტყობინებებს და // სხვა პრობლემებს გამოიწვევთ. რეკომენდებულია 115200 (ან უფრო სწრაფი). // შენიშვნა: დარწმუნდით, რომ თქვენ დააყენეთ თქვენი სერიული მონიტორი იმავე სიჩქარეზე. #განსაზღვრეთ BAUD_RATE 115200

// რადგან ეს პროგრამა არის სპეციალური დანიშნულების გადაღება/დეკოდირება, მოდით გამოვიყენოთ უფრო დიდი

// ვიდრე ჩვეულებრივი ბუფერი, ასე რომ ჩვენ შეგვიძლია კონდიციონერის დისტანციური კოდების დამუშავება. #განსაზღვრეთ CAPTURE_BUFFER_SIZE 1024

// TIMEOUT არის Nr. მილიწამიანი არა-მეტი მონაცემები სანამ განვიხილავთ ა

// შეტყობინება დასრულდა. // ეს პარამეტრი არის საინტერესო კომპრომისი. რაც უფრო გრძელია დროის გასვლა, მით უფრო // რთული შეტყობინება შეიძლება დაიჭიროს. მაგალითად. ზოგიერთი მოწყობილობის პროტოკოლი სწრაფად გაგზავნის // მრავალჯერადი შეტყობინების პაკეტს, როგორიცაა კონდიციონერის დისტანციური მართვის პულტი. // Air Coniditioner პროტოკოლებს ხშირად აქვთ მნიშვნელოვანი უფსკრული (20-40+ms) // პაკეტებს შორის. // დიდი დროის ამოწურვის მნიშვნელობა არის ბევრი ნაკლებად რთული პროტოკოლი // გაგზავნეთ მრავალი შეტყობინება დისტანციური ღილაკის დაჭერისას. // მათ შორის უფსკრული ხშირად ასევე არის დაახლოებით 20+ms. ამან შეიძლება გამოიწვიოს ნედლეული მონაცემები 2-3+ // ჯერ უფრო დიდი ვიდრე საჭიროა, რადგან მან გადაიღო 2-3+ შეტყობინება ერთ // გადაღებაში. დაბალი ვადის ამოწურვის მნიშვნელობის დადგენამ შეიძლება გადაჭრას ეს. // ასე რომ, თქვენი გამოყენების კონკრეტული შემთხვევისთვის საუკეთესო TIMEOUT მნიშვნელობის არჩევა // საკმაოდ ნიუანსურია. წარმატებებს გისურვებთ და ბედნიერ ნადირობას. // შენიშვნა: არ აღემატებოდეს MAX_TIMEOUT_MS. ჩვეულებრივ 130 მმ. #if DECODE_AC #განსაზღვრეთ TIMEOUT 50U // ზოგიერთ კონდიციონერს აქვს ხარვეზები მათ პროტოკოლებში ms 40ms. // მაგალითად. კელვინატორი // ამ მნიშვნელობამ შეიძლება გადაყლაპოს ზოგიერთი პროტოკოლის განმეორება #endif // DECODE_AC // ალტერნატივები: // #განსაზღვრეთ TIMEOUT 90U // შეესაბამება შეტყობინებებს დიდი ხარვეზებით, როგორიცაა XMP-1 და ზოგიერთი კონდიციონერი // ერთეული, მაგრამ შეიძლება შემთხვევით გადაყლაპოს განმეორებითი შეტყობინებები // rawData გამომუშავებაში. // #განსაზღვრეთ TIMEOUT MAX_TIMEOUT_MS // ეს დაარეგულირებს მას ამჟამად ნებადართულ // მაქსიმუმზე. ამ მაღალი ღირებულებები პრობლემურია // რადგან ის უხეშად ტიპიური საზღვარია // სადაც შეტყობინებების უმეტესობა მეორდება. // მაგალითად. ის შეწყვეტს შეტყობინების გაშიფვრას და // დაიწყებს სერიალში გაგზავნას ზუსტად // იმ დროს, როდესაც სავარაუდოა, რომ მომდევნო შეტყობინება // გადაეცემა და შეიძლება გამოტოვოს.

// დააყენეთ ყველაზე პატარა ზომის "უცნობი" შეტყობინებების პაკეტები, რომლებიც ჩვენ რეალურად გვაინტერესებს.

// ეს მნიშვნელობა ეხმარება შეამციროს IR ფონის ცრუ დადებითი გამოვლენის მაჩვენებელი // ხმაური, როგორც რეალური შეტყობინებები. ფონური IR ხმაურის გამოვლენის შანსი // როგორც შეტყობინება იზრდება TIMEOUT მნიშვნელობის სიგრძესთან ერთად. (იხილეთ ზემოთ) // ამ შეტყობინების ძალიან დიდი დაყენების მინუსი ის არის, რომ შეგიძლიათ გამოტოვოთ რამდენიმე მოქმედი // მოკლე შეტყობინება პროტოკოლებისთვის, რომლებიც ამ ბიბლიოთეკას ჯერ კიდევ არ აქვს დეკოდირებული. // // დააყენეთ უფრო მაღალი თუ მიიღებთ უამრავ შემთხვევით მოკლე უცნობ შეტყობინებას, როდესაც არაფერი // არ უნდა გაგზავნოთ შეტყობინება. // დააყენეთ ქვედა თუ დარწმუნებული ხართ, რომ თქვენი კონფიგურაცია მუშაობს, მაგრამ ის არ ხედავს შეტყობინებებს // თქვენი მოწყობილობიდან. (მაგ. სხვა IR დისტანციური მუშაობა.) // შენიშვნა: დააყენეთ ეს მნიშვნელობა ძალიან მაღალი რომ ეფექტურად გამორთოთ უცნობი ამოცნობა. #განსაზღვრეთ MIN_UNKNOWN_SIZE 12 // ==================== TUNEABLE პარამეტრების დასასრული =====================

// გამოიყენეთ გადატვირთვის ბუფერული ფუნქციის ჩართვა გადაღების უფრო სრული დაფარვისთვის.

IRrecv irrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, ჭეშმარიტი);

decode_results results; // სადმე შედეგების შესანახად

// ჩვენ შეგვიძლია გამოვავლინოთ A/C შეტყობინების ადამიანის წაკითხული მდგომარეობა, თუ შეგვიძლია.

void dumpACInfo (decode_results *results) {სიმებიანი აღწერა = ""; #თუ DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (შედეგები-> მდგომარეობა); აღწერა = ac.toString (); } #endif // DECODE_DAIKIN #თუ DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (შედეგები-> მდგომარეობა, შედეგები-> ბიტი / 8); აღწერა = ac.toString (); } #endif // DECODE_FUJITSU_AC #თუ DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (შედეგები-> მდგომარეობა); აღწერა = ac.toString (); } #endif // DECODE_KELVINATOR #თუ DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (შედეგები-> მდგომარეობა); აღწერა = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (შედეგები-> მნიშვნელობა); // Midea იყენებს მნიშვნელობას მდგომარეობის ნაცვლად. აღწერა = ac.toString (); } #endif // DECODE_MIDEA // თუ ჩვენ მივიღეთ ადამიანის მიერ წაკითხული მესიჯის აღწერა, აჩვენეთ იგი. if (აღწერა! = "") Serial.println ("Mesg Desc.:" + აღწერა); }

// კოდის მონაკვეთი გაშვებისას მხოლოდ ერთხელ მუშაობს.

void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); დაგვიანება (500); // ცოტა დაელოდეთ სერიული კავშირის დამყარებას.

#თუ დეკოდირება_ჰაში

// იგნორირება გაუკეთეთ შეტყობინებებს მინიმუმზე ნაკლები ჩართვის ან გამორთვის იმპულსებით. irrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #ენდიფი // გაშიფვრა // დაწყება მიმღები}

// კოდის განმეორებითი ნაწილი

// void loop () {// შეამოწმეთ მიღებულია თუ არა IR კოდი. if (irrecv.decode (& results)) {{// უხეში დროის ნიშნულის ჩვენება. uint32_t ახლა = millis (); Serial.printf ("დროის ნიშნული: %06u. %03u / n", ახლა / 1000, ახლა %1000); if (results.overflow) Serial.printf ("გაფრთხილება: IR კოდი ძალიან დიდია ბუფერისთვის (> = %d)." "ეს შედეგი არ უნდა იყოს სანდო სანამ ეს არ მოგვარდება." "რედაქტირება და გაზრდა CAPTURE_BUFFER_SIZE. / n ", CAPTURE_BUFFER_SIZE); // აჩვენეთ ის, რაც ვიპოვეთ. Serial.print (resultToHumanReadableBasic (& შედეგები)); dumpACInfo (და შედეგები); // აჩვენეთ ნებისმიერი დამატებითი კონდიციონერის ინფორმაცია, თუ გვაქვს. მოსავალი (); // შესანახი WDT რადგან ტექსტის გამოშვებას შეიძლება გარკვეული დრო დასჭირდეს დასაბეჭდად.

// ბიბლიოთეკის ვერსიის ჩვენება შეტყობინებით გადაღებული.

Serial.print ("ბიბლიოთეკა: v"); Serial.println (_IRREMOTEESP8266_VERSION_); Serial.println ();

// გამოაქვეყნეთ შედეგის RAW დროის ვადები.

Serial.println (resultToTimingInfo (& შედეგები)); მოსავალი (); // შესანახი WDT (ისევ)

// გამოიტანეთ შედეგები წყაროს კოდის სახით

Serial.println (resultToSourceCode (& შედეგები)); Serial.println (""); // ცარიელი ხაზი ჩანაწერებს შორის სარგებელი (); // შესანახი WDT (ისევ)}}

როდესაც ეს ესკიზი აიტვირთება და იმუშავებს სერიული მონიტორით, ის გამოაქვს ღილაკზე დაჭერის კოდს (იხ. სურათი)

ჩაწერეთ კოდები, რომელთა გამოყენება გსურთ მოგვიანებით გამოყენებისთვის. მე Excel გამოვიყენე იმის აღსაწერად, თუ რა მივიღე იმ ღილაკებისთვის, რომელთა გამოყენებაც მინდოდა (იხ. სურათი)

მე შევცვალე ღილაკები Netflix– ის საქმიანობაში, რათა გამომეგზავნა პაუზის სიგნალი Panasonic– ის დისტანციური მართვის პულტიდან (იხ. სურათი)

ნაბიჯი 3: Nodered– ში გაგზავნის კოდის დაწერა

Nodered– ში გაგზავნის კოდის დაწერა
Nodered– ში გაგზავნის კოდის დაწერა

#ifndef UNIT_TEST #მოიცავს #endif #მოიცავს

#ჩართეთ

#ჩართეთ

#ჩართეთ

#ჩართეთ

#ჩართეთ

const char* ssid = ""; // შეიყვანეთ SSID აქ char* პაროლი = ""; // შეიყვანეთ პაროლი აქ const char *host = ""; // IP მისამართი #განსაზღვრეთ USE_SERIAL სერიული ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv irrecv (RECV_PIN); decode_results results; void setup () {irrecv.enableIRIn (); // მიმღების დაწყება USE_SERIAL. დასაწყისი (115200); // USE_SERIAL.setDebugOutput (ჭეშმარიტი); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();

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

USE_SERIAL.printf ("[SETUP] ლოდინი %d… / n", t); USE_SERIAL.flush (); დაგვიანება (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, პაროლი); } void loop () {if (irrecv.decode (& results))) {

// შეცვალეთ ეს სიგნალის მნიშვნელობა ერთით

if (results.value == 0x40040D00606D) {USE_SERIAL.println ("პაუზა სიგნალი მიღებულია"); wifisend (პაუზა); დაგვიანება (1000);

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

USE_SERIAL.println ("წინა");

wifisend ("წინა"); დაგვიანება (1000); } if (results.value == 0x40040100F2F3) {USE_SERIAL.println ("შემდეგი"); wifisend ("შემდეგი"); დაგვიანება (1000); }

უკონკურენტო რეზიუმე (); // მიიღეთ შემდეგი მნიშვნელობა} შეფერხება (100); } void wifisend (სიმებიანი მონაცემები) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] იწყება … / n"); // ტრაგედიის სერვერისა და url- ის კონფიგურაცია http.begin ("https:// [მომხმარებელი]: [pass]@[ip]: [port]/chromecastpause? data =" + მონაცემები); USE_SERIAL.print ("[HTTP] GET… / n"); // კავშირის დაწყება და გაგზავნა HTTP სათაური int httpCode = http. GET (); // httpCode იქნება უარყოფითი შეცდომის შემთხვევაში, თუ (httpCode> 0) {// HTTP სათაური გაგზავნილია და სერვერის პასუხის სათაური დამუშავებულია USE_SERIAL.printf ("[HTTP] GET… კოდი: %d / n", // ფაილი ნაპოვნია სერვერზე

if (httpCode == HTTP_CODE_OK) {სიმებიანი დატვირთვა = http.getString (); USE_SERIAL.println (დატვირთვა); }} სხვა {USE_SERIAL.printf ("[HTTP] GET… ვერ მოხერხდა, შეცდომა: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); დაგვიანება (100); }}

ეს არის კოდი, რომელიც მე გამოვიყენე ჩემს nodemcu– ში. თქვენ დაგჭირდებათ ბიბლიოთეკების დაყენება.

თქვენ შეგიძლიათ შეამოწმოთ სერიული მონიტორის გამოყენებით და დააჭიროთ ღილაკს, რომელიც თქვენ დაამატეთ კოდში პასუხის სანახავად..

ხაზში:

http.begin ("https:// [მომხმარებელი]: [pass]@[ip]: [პორტი]/chromecastpause? data =" + მონაცემები);

თქვენ უნდა შეცვალოთ [მომხმარებელი] თქვენს მომხმარებელზე და ასე შემდეგ. ფრჩხილების გარეშე. ფრჩხილებში არის ჯადოქრების ველების შეცვლის ჩვენება.

ეს ხაზი ასევე არ იმუშავებს მანამ, სანამ ჩვენ არ დავაყენებთ ჩვენს ნაკადს კვანძში.

ნაბიჯი 4: ნაკადის შექმნა კვანძში

ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში
ნაკადის შექმნა კვანძში

როგორც უკვე აღვნიშნე დასაწყისში ვიყენებ hass.io- ს კვანძებით. თუ სხვაგვარ კონფიგურაციას აწარმოებთ, თქვენ დაგჭირდებათ განსხვავებული! თქვენ ხედავთ სურათს, რომ ღილაკის დაჭერისას ის გამოჩნდება გამართვის ფანჯარაში…

ცვლილების ტვირთის კვანძი ალბათ გამოტოვებული იქნებოდა, თუ მე შევარჩევდი რაიმე განსხვავებულ მონაცემს = წინა საფეხურზე. გადართვის კვანძი, რომელსაც მე ვიყენებ, გაცილებით დიდია, ვიდრე პაუზა, მაგრამ ეს მხოლოდ ასე შემიძლია დავამატო მეტი სიგნალი, რომ გამოვიყენო chromecast რადიოსადგურებისთვის და ა.

მხოლოდ დაკვრის პაუზისთვის შეგიძლიათ გამოიყენოთ ნაკადი სხვა სურათზე.

[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "მიიღე", "ატვირთე": ყალბი, "swaggerDoc": "", "x": 133, "y": 98, "ხაზები":

მე ამოვიღე სახელი userpass და url აქედან, ასე რომ თქვენ შეიძლება დაგჭირდეთ მისი რედაქტირება.

დაამატეთ გადართვის კვანძი, თუ გსურთ რეაგირება მოახდინოთ არა მხოლოდ პაუზაზე (იხილეთ სურათი, მაგალითად)

სახლის ასისტენტის კვანძში პაუზისთვის:

სახელი: დაკვრა პაუზა chromecastdomain: media_player სერვისი: media_play_pausedata: {"units_id": "media_player. [თქვენი chromecast აქ]"}

მომდევნო ტრეკისთვის უბრალოდ დააკოპირეთ ეს კვანძი და შეცვალეთ სერვისი: media_next_track და სახელი: next chromecast

ნაბიჯი 5: არჩევითი Alexa პაუზა Chromecast

სურვილისამებრ დაამატეთ alexa ბრძანება chromecast პაუზისთვის:

აქ არის რამოდენიმე ვარიანტი.. შეგიძლიათ გააკეთოთ ერთი ალექსი კვანძი სახელწოდებით პაუზა ქრომის, რომელიც აჩერებს ქრომიკასტს, ან შეგიძლიათ გააკეთოთ ტელევიზია სახელწოდებით პაუზა, რომელიც ამოწმებს მიმდინარე ჰარმონიულ საქმიანობას და დამოკიდებულია ამაზე.

ამას მოგვიანებით დავამატებ აქ..

გირჩევთ: