Съдържание:
- Стъпка 1: Оборудване
- Стъпка 2: Отдалечен сигнал
- Стъпка 3: Писане на кода за изпращане до Nodered
- Стъпка 4: Създаване на поток в Nodered
- Стъпка 5: По избор Alexa Pause Chromecast
Видео: Пауза на Chromcast с дистанционно управление: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Имам Logitech хармонично дистанционно и изпълнявам Home Assistant на малиново пи.
Исках да мога да поставя пауза на chromecast от дистанционното си, но имам стар телевизор, който не поддържа това чрез hdmi. Идеята ми беше след това да използвам NodeMcu за улавяне на ir сигнала и за пауза.
Ако не можете да го накарате да работи или имате въпроси, моля, коментирайте по -долу
Стъпка 1: Оборудване
Необходимо оборудване:
Nodemcu (https://www.ebay.com/sch/i.html?_from=R40&_trksid=…
Ir reciver (като например това:
кабели dupont
Micro usb кабел (захранващ nodemcu)
Използвам Logitech Harmony -hub
За моя подход имате нужда от Raspberry pi с инсталиран и нодиран hass.io. Няма да влизам в настройка на неща за домашен помощник тук. Ако използвате нещо различно от домашен помощник, трябва сами да адаптирате нещата.
Трябва да можете да използвате Nodemcu в Arduino IDE, тъй като няма да влизам в това тук
Стъпка 2: Отдалечен сигнал
Начинът, по който го направих, беше да копирам сигнал от дистанционно, което не използвам в хармонично дистанционно.
Използвах дистанционно за телевизионен модел Panasonic TXL32C3E, тъй като това не пречи на моето оборудване на първия ми етаж. Това е телевизор, който имам горе.
Ако не използвате хармония, можете да пропуснете това.
Така че за намиране на сигнала използвах този сценарий:
/ * * IRremoteESP8266: IRrecvDumpV2 - демпфиране на данни за IR кодове с IRrecv * IR детектор/демодулатор трябва да бъде свързан към входа RECV_PIN. * * Авторско право 2009 Кен Шириф, https://arcfn.com * Авторско право 2017 Дейвид Конран * * Примерна електрическа схема: * https://arcfn.com * * Промени: * Версия 0.3 ноември, 2017 * - Поддръжка за A/C декодиране за някои протоколи. * Версия 0.2 април, 2017 г. * - Декодирайте от копие на данните, за да можем да започнем да улавяме по -бързо, като по този начин * намалим вероятността от погрешно улавяне. * Въз основа на IrsendDemo версия на Кен Шириф 0.1 юли 2009 г., */
#ifndef UNIT_TEST
#include #endif #include #include #include #if DECODE_AC #include #include #include #include #include #endif // DECODE_AC
// ==================== = начало на НАСТРОЙКИ ПАРАМЕТРИ ====================
// IR детектор/демодулатор е свързан към GPIO извод 14 // напр. D5 на платка NodeMCU. #дефинирайте RECV_PIN 14
// Скоростта на предаване на серийна връзка.
// т.е. съобщението за състоянието ще бъде изпратено до компютъра с тази скорост на предаване. // Опитайте се да избягвате бавни скорости като 9600, тъй като ще пропуснете съобщения и // ще предизвикате други проблеми. 115200 (или по -бързо) се препоръчва. // ЗАБЕЛЕЖКА: Уверете се, че сте настроили серийния монитор на същата скорост. #дефинирайте BAUD_RATE 115200
// Тъй като тази програма е заснемане/декодиране със специално предназначение, нека използваме по -голям
// от нормалния буфер, за да можем да обработваме кодовете за дистанционно на климатика. #дефинирайте CAPTURE_BUFFER_SIZE 1024
// TIMEOUT е Nr. милисекунди без повече данни, преди да разгледаме a
// съобщението приключи. // Този параметър е интересен компромис. Колкото по -дълъг е таймаутът, толкова по -сложно съобщение може да улови. напр. Някои протоколи на устройства ще изпращат // множество пакети съобщения в бърза последователност, като например дистанционни за климатик. // Air Coniditioner протоколите често имат значителна разлика (20-40+ms) между // пакетите. // Недостатъкът на голяма стойност на изчакване е много по -малко сложни протоколи // изпращане на множество съобщения, когато бутонът на дистанционното е задържан. Разликата между // тях често също е около 20+ms. Това може да доведе до това необработените данни да бъдат 2-3+ // пъти по-големи от необходимото, тъй като са уловили 2-3+ съобщения в едно // улавяне. Задаването на ниска стойност на изчакване може да реши това. // И така, изборът на най -добрата стойност на TIMEOUT за вашия конкретен случай на използване е // доста нюансиран. Успех и щастлив лов. // ЗАБЕЛЕЖКА: Не превишавайте MAX_TIMEOUT_MS. Обикновено 130ms. #if DECODE_AC #define TIMEOUT 50U // Някои климатични устройства имат пропуски в своите протоколи от ~ 40ms. // напр. Kelvinator // Стойност, която е толкова голяма, може да погълне повторения на някои протоколи #else // DECODE_AC #define TIMEOUT 15U // Подхожда на повечето съобщения, като същевременно не поглъща много повторения. #endif // DECODE_AC // Алтернативи: // #define TIMEOUT 90U // Подхожда на съобщения с големи пропуски като XMP-1 и някои климатични // единици, но може случайно да погълне повтарящи се съобщения // в изхода rawData . // #define TIMEOUT MAX_TIMEOUT_MS // Това ще го настрои на нашия максимално разрешен в момента //. Високите стойности са проблематични // защото това е приблизително типичната граница //, където повечето съобщения се повтарят. // напр. Той ще спре декодирането на съобщение и // ще започне да го изпраща към сериал точно // времето, когато е вероятно следващото съобщение // да бъде предадено, и може да го пропусне.
// Задайте най -малкия размер на "НЕИЗВЕСТНИ" пакети съобщения, които всъщност ни интересуват.
// Тази стойност помага за намаляване на фалшиво положителния процент на откриване на IR фона // шум като реални съобщения. Шансовете за откриване на фонов IR шум // като съобщение се увеличава с дължината на стойността TIMEOUT. (Вижте по -горе) // Недостатъкът на настройката на това съобщение е твърде голям е, че можете да пропуснете някои // валидни кратки съобщения за протоколи, които тази библиотека все още не декодира. // // Задайте по -високо, ако получавате много случайни кратки НЕИЗВЕСТНИ съобщения, когато нищо // не трябва да изпраща съобщение. // Задайте по -ниско, ако сте сигурни, че настройката ви работи, но не вижда съобщения // от вашето устройство. (напр. Други IR дистанционни работят.) // ЗАБЕЛЕЖКА: Задайте тази стойност много висока, за да изключите ефективно НЕИЗВЕСТНОТО откриване. #define MIN_UNKNOWN_SIZE 12 // ==================== край на НАСТРОЙКИТЕ ПАРАМЕТРИ ====================
// Използвайте включване на функцията за запазване на буфера за по -пълно покритие на заснемането.
IRrecv unrecv (RECV_PIN, CAPTURE_BUFFER_SIZE, TIMEOUT, вярно);
decode_results резултати; // Някъде за съхраняване на резултатите
// Показваме четимото от човека състояние на A/C съобщение, ако можем.
void dumpACInfo (decode_results *results) {String description = ""; #if DECODE_DAIKIN if (results-> decode_type == DAIKIN) {IRDaikinESP ac (0); ac.setRaw (резултати-> състояние); description = ac.toString (); } #endif // DECODE_DAIKIN #if DECODE_FUJITSU_AC if (results-> decode_type == FUJITSU_AC) {IRFujitsuAC ac (0); ac.setRaw (резултати-> състояние, резултати-> бита / 8); description = ac.toString (); } #endif // DECODE_FUJITSU_AC #if DECODE_KELVINATOR if (results-> decode_type == KELVINATOR) {IRKelvinatorAC ac (0); ac.setRaw (резултати-> състояние); description = ac.toString (); } #endif // DECODE_KELVINATOR #if DECODE_TOSHIBA_AC if (results-> decode_type == TOSHIBA_AC) {IRToshibaAC ac (0); ac.setRaw (резултати-> състояние); description = ac.toString (); } #endif // DECODE_TOSHIBA_AC #if DECODE_MIDEA if (results-> decode_type == MIDEA) {IRMideaAC ac (0); ac.setRaw (резултати-> стойност); // Midea използва стойност вместо състояние. description = ac.toString (); } #endif // DECODE_MIDEA // Ако получим четено от човека описание на съобщението, покажете го. if (description! = "") Serial.println ("Описание на съобщението.:" + описание); }
// Разделът с код се стартира само веднъж при стартиране.
void setup () {Serial.begin (BAUD_RATE, SERIAL_8N1, SERIAL_TX_ONLY); забавяне (500); // Изчакайте малко, за да се установи серийната връзка.
#ако DECODE_HASH
// Игнорирайте съобщения с по -малко от минимум импулси за включване или изключване. unrecv.setUnknownThreshold (MIN_UNKNOWN_SIZE); #endif // DECODE_HASH unrecv.enableIRIn (); // Стартирайте приемника}
// Повтарящата се част на кода
// void loop () {// Проверете дали е получен IR кодът. if (unrecv.decode (& results)) {// Показва груба времева отметка. uint32_t сега = millis (); Serial.printf ("Timestamp: %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 (""); // Празен ред между записите yield (); // Подайте WDT (отново)}}
Когато този скеч е качен и работи с отворен сериен монитор, той ще изведе кода за натискане на бутон (вижте снимката)
Запишете кодовете, които искате да използвате за по -късна употреба. Използвах Excel, за да отбележа какво имам за бутоните, които исках да използвам (вижте снимката)
Редактирах бутоните в моята дейност в Netflix, за да изпратя сигнал за пауза от дистанционното управление на Panasonic.. (вижте снимката)
Стъпка 3: Писане на кода за изпращане до Nodered
#ifndef UNIT_TEST #включват #endif #include
#включва
#включва
#включва
#включва
#включва
const char* ssid = ""; // Въведете SSID тук concon char* password = ""; // Въведете парола тук const char *host = ""; // IP адрес #define USE_SERIAL Serial ESP8266WiFiMulti WiFiMulti; uint16_t RECV_PIN = 14; IRrecv unrecv (RECV_PIN); decode_results резултати; void setup () {unrecv.enableIRIn (); // Стартирайте приемника USE_SERIAL.begin (115200); // USE_SERIAL.setDebugOutput (вярно); USE_SERIAL.println (); USE_SERIAL.println (); USE_SERIAL.println ();
за (uint8_t t = 4; t> 0; t--) {
USE_SERIAL.printf ("[SETUP] WAIT %d… / n", t); USE_SERIAL.flush (); забавяне (1000); } WiFi.mode (WIFI_STA); WiFiMulti.addAP (ssid, парола); } void loop () {if (unrecv.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); }
unrecv.resume (); // Получаване на следващата стойност} забавяне (100); } void wifisend (String data) {if ((WiFiMulti.run () == WL_CONNECTED)) {HTTPClient http; USE_SERIAL.print ("[HTTP] начало … / n"); // конфигуриране на сървър на трагедия и URL адрес http.begin ("https:// [потребител]: [пас]@[ip]: [порт]/chromecastpause? data =" + данни); USE_SERIAL.print ("[HTTP] ВЗЕМЕТЕ … / n"); // стартиране на връзка и изпращане на HTTP заглавка int httpCode = http. GET (); // httpCode ще бъде отрицателен при грешка, ако (httpCode> 0) {// HTTP заглавието е изпратено и заглавката на отговора на сървъра е обработена USE_SERIAL.printf ("[HTTP] GET… code: %d / n", // файл, намерен на сървъра
if (httpCode == HTTP_CODE_OK) {String payload = http.getString (); USE_SERIAL.println (полезен товар); }} else {USE_SERIAL.printf ("[HTTP] GET… failed, error: %s / n", http.errorToString (httpCode).c_str ()); } http.end (); забавяне (100); }}
Това е кодът, който използвах на моя nodemcu. Ще трябва да имате инсталирани тези библиотеки.
Можете да тествате с помощта на сериен монитор и да натиснете дистанционните бутони, които сте добавили в кода, за да видите отговора.
В реда:
http.begin ("https:// [потребител]: [пас]@[ip]: [порт]/chromecastpause? data =" + данни);
Трябва да промените [потребител] на потребител и така нататък. БЕЗ скоби. скоби са там, за да покажат полета на вещици за промяна.
Този ред също няма да работи, докато не настроим потока си в nodered.
Стъпка 4: Създаване на поток в Nodered
Както бе споменато в началото, използвам hass.io с nodered. Ако стартирате различна настройка, ще трябва да направите тази различна! Можете да видите на изображението, че когато се натисне бутон, той се показва в прозореца за отстраняване на грешки …
Възлът на промяна на полезния товар вероятно би могъл да бъде пропуснат, ако бях избрал нещо различно от тези данни = в предишната стъпка. Превключвателният възел, който използвам, е много по -голям от паузата, но това е само за да мога да добавя още IR сигнали, за да използвам chromecast за радиостанции и др.
За просто пауза на възпроизвеждане можете да използвате потока в другата картина.
[{"id": "e6440c30.4a35a", "type": "http in", "z": "869ceb74.0275c8", "name": "", "url": "chromecastpause", "method": "get", "upload": false, "swaggerDoc": "", "x": 133, "y": 98, "проводници":
Премахнах името userpass и url от това, така че може да се наложи да го редактирате.
добавете превключващ възел, ако искате да реагирате на нещо повече от просто пауза (вижте снимката например)
В възела за домашен помощник за пауза при използване:
name: play pause chromecastdomain: media_playerService: media_play_pausedata: {"entity_id": "media_player. [вашият chromecast тук]"}
за следващия запис просто копирайте този възел и редактирайте услугата на: media_next_track и име на: next chromecast
Стъпка 5: По избор Alexa Pause Chromecast
По избор команда за добавяне на alexa за пауза chromecast:
Тук има опции.. Можете да направите един алекса възел, наречен пауза chromecast, който поставя пауза chromecast, или можете да направите такъв, наречен pause tv, който проверява текущата хармонична дейност и прави пауза в зависимост от това.
Ще го добавя тук по -късно..
Препоръчано:
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: 6 стъпки
IRduino: Дистанционно управление Arduino - имитирайте изгубено дистанционно: Ако някога сте загубили дистанционното управление за вашия телевизор или DVD плейър, знаете колко е разочароващо да се налага да ходите, да намирате и използвате бутоните на самото устройство. Понякога тези бутони дори не предлагат същата функционалност като дистанционното. Получаване
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC играчка: 4 стъпки
Обикновен комплект за дистанционно управление, трансформиран в четириканално дистанционно управление RC Toy: 如何 将 通用 遥控 套件 转换 为 玩具 中 使用 的 四 遥控 器。 遥控 套件 非常 便宜。 采用 62 62 2262 和 2272 芯片 433 模块 构建。方法 非常 简单。 只需 一些 瓦楞纸 板 , 然后 按照 视频 教程 这个 电子 项目 并 为 服务。 玩具 车船 提供 远程 无线 控制
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): 4 стъпки
Уеб дистанционно дистанционно управление с Esp8266 (NodeMCU): Проблем На масата в хола има три дистанционни управления. За да гледате любимото си предаване, трябва точно да следвате специална последователност от натискания на бутони върху поне две от тях. И твоята съквартирантка, майка, приятелка никога не си спомня за това … Решение Купуваш
Робот с дистанционно управление с помощта на Arduino и T.V. Дистанционно: 11 стъпки
Робот с дистанционно управление с помощта на Arduino и телевизионно дистанционно: Тази кола с дистанционно управление може да се движи, използвайки практически всякакъв вид дистанционно управление, като телевизор, променлив ток и др. Той използва факта, че дистанционното излъчва IR (инфрачервено). Това свойство се използва чрез използване на IR приемник, който е много евтин сензор
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: 4 стъпки
Кабелно дистанционно дистанционно управление на Canon за затвор и фокус: Хей! Това е друга версия на кабелното дистанционно управление на Canon. Мисля, че е по -гъвкав от другите дизайни. Тази инструкция е мястото, откъдето получих моето вдъхновение. Това по принцип ви позволява да правите снимки с помощта на това дистанционно, вместо да натискате дупето