1

Автовключение телевизора

У меня комп подключен к телику, я на нем в гостиной играю в игрушки. И меня в этой схеме парило включать телефизор. Клавиатура для вывода из сна, она большая, и лежит рядом, а пульт постоянно убегает. У консольщиков за это отвечате CEC, но на ПКшные видюхи их не завозят (я считаю это загоовором производителей консолей).

Меня эта проблема парила, и я таки нашел решение, может быть кому-нибудь поможет.

Далее будет контент нейросетей, ибо Кодекс мне проблему и решил.

1. Включаем ADB на телевизоре

На ТВ:

  1. Открываем Настройки.

  2. Идём в О телевизоре / Об устройстве.

  3. Находим Сборка / Build.

  4. Нажимаем на неё 7 раз, пока не появится сообщение “Вы стали разработчиком”.

  5. Возвращаемся назад.

  6. Открываем Для разработчиков.

  7. Включаем:

    • Отладка по USB;

    • если есть, Отладка по сети / Network debugging / ADB over network.

Дальше на Windows ставим Android Platform Tools. Например, распаковываем сюда:

C:\platform-tools

(от себя добавлю - наверно можно поставить adb другим способом, но тут я уже не тестил, ибо сработало так)

Проверяем. win+x - Терминал - проверть, что выбран тип "Powershell", будет написно на вкладке

C:\platform-tools\adb.exe connect 192.168.1.12:5555

C:\platform-tools\adb.exe devices -l

На ТВ может появиться запрос “Разрешить отладку?” — разрешаем.

2. Создаём папку

Например: C:\haier-tv-adb-wake

Внутри создаём config.json (создаем текстовый документ, называем его config.json):

{ "tv_device": "192.168.1.12:5555", "adb_path": "C:\\platform-tools\\adb.exe", "delay_before_wake_seconds": 8 }

3. Там же создаём tv_wake.bat (тоже тестовый документ):

@Echo off

setlocal EnableExtensions EnableDelayedExpansion

cd /d "%~dp0"

if not exist "logs" mkdir "logs"

set "TV=192.168.1.12:5555"

set "ADB=adb"

set "DELAY=8"

set "CONNECT_RETRIES=3"

set "LOG=logs\tv_wake.log"

if exist "config.json" (

for /f "usebackq tokens=1,* delims==" %%A in (`powershell -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference = 'Stop'; $c = Get-Content -Raw -LiteralPath 'config.json' | ConvertFrom-Json; if ($c.tv_device) { 'TV=' + $c.tv_device }; if ($c.adb_path) { 'ADB=' + $c.adb_path }; if ($null -ne $c.delay_before_wake_seconds) { 'DELAY=' + [int]$c.delay_before_wake_seconds }" 2^>nul`) do (

if /i "%%A"=="TV" if not "%%B"=="" set "TV=%%B"

if /i "%%A"=="ADB" if not "%%B"=="" set "ADB=%%B"

if /i "%%A"=="DELAY" if not "%%B"=="" set "DELAY=%%B"

)

)

echo ============================== >> "%LOG%"

echo [%date% %time%] Haier TV wake script started >> "%LOG%"

echo [%date% %time%] TV=%TV% ADB=%ADB% Delay=%DELAY%s >> "%LOG%"

powershell -NoProfile -Command "Start-Sleep -Seconds %DELAY%" >nul 2>&1

set "CONNECTED=0"

for /l %%I in (1,1,%CONNECT_RETRIES%) do (

echo [%date% %time%] Connecting to %TV% attempt %%I/%CONNECT_RETRIES% >> "%LOG%"

"%ADB%" connect "%TV%" >> "%LOG%" 2>&1

echo [%date% %time%] adb connect exit code: !errorlevel! >> "%LOG%"

"%ADB%" devices >> "%LOG%" 2>&1

"%ADB%" devices | findstr /c:"%TV% device" >nul 2>&1

if not errorlevel 1 (

set "CONNECTED=1"

goto :connected

)

powershell -NoProfile -Command "Start-Sleep -Seconds 2" >nul 2>&1

)

:connected

if not "%CONNECTED%"=="1" (

echo [%date% %time%] TV is not connected over ADB, skipping keyevents >> "%LOG%"

echo [%date% %time%] Done >> "%LOG%"

endlocal

exit /b 0

)

echo [%date% %time%] Sending WAKEUP keyevent 224 >> "%LOG%"

"%ADB%" -s "%TV%" shell input keyevent 224 >> "%LOG%" 2>&1

powershell -NoProfile -Command "Start-Sleep -Seconds 1" >nul 2>&1

echo [%date% %time%] Sending INPUT keyevent 178 >> "%LOG%"

"%ADB%" -s "%TV%" shell input keyevent 178 >> "%LOG%" 2>&1

powershell -NoProfile -Command "Start-Sleep -Seconds 1" >nul 2>&1

echo [%date% %time%] Sending OK keyevent 23 >> "%LOG%"

"%ADB%" -s "%TV%" shell input keyevent 23 >> "%LOG%" 2>&1

echo [%date% %time%] Done >> "%LOG%"

endlocal

exit /b 0

Логика такая:

224 = WAKEUP

178 = INPUT

23 = OK

То есть телевизор просыпается, открывает выбор входа и нажимает OK. У меня это возвращает ТВ на нужный HDMI.

4. Прописываем в Планировщик Windows

Создаём install_tasks.ps1 (тоже текстовый документ):

$ErrorActionPreference = 'Stop'

$ProjectDir = Split-Path -Parent $MyInvocation.MyCommand.Path

$BatPath = Join-Path $ProjectDir 'tv_wake.bat'

$CurrentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name

$Action = New-ScheduledTaskAction -Execute $BatPath -WorkingDirectory $ProjectDir

$Principal = New-ScheduledTaskPrincipal -UserId $CurrentUser -LogonType Interactive -RunLevel Limited

$Settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -MultipleInstances IgnoreNew

$LogonTrigger = New-ScheduledTaskTrigger -AtLogOn -User $CurrentUser

$ResumeTrigger = Get-CimClass -Namespace root/Microsoft/Windows/TaskScheduler -ClassName MSFT_TaskEventTrigger |

New-CimInstance -ClientOnly

$ResumeTrigger.Enabled = $true

$ResumeTrigger.Subscription = @'

<QueryList>

<Query Id="0" Path="System">

<Select Path="System">

*[System[Provider[@name='Microsoft-Windows-Power-Troubleshooter'] and EventID=1]]

</Select>

</Query>

</QueryList>

'@

Register-ScheduledTask -TaskName 'Haier TV Wake On Logon' -Action $Action -Trigger $LogonTrigger -Principal $Principal -Settings $Settings -Force | Out-Null

Register-ScheduledTask -TaskName 'Haier TV Wake On Resume' -Action $Action -Trigger $ResumeTrigger -Principal $Principal -Settings $Settings -Force | Out-Null

Write-Host 'Installed'

Запускаем из папки проекта:

powershell -ExecutionPolicy Bypass -File .\install_tasks.ps1

Проверить:

Get-ScheduledTask -TaskName "Haier TV Wake On Logon","Haier TV Wake On Resume"

Логи будут тут:

logs\tv_wake.log

Важно: закрепите IP телевизора в роутере, иначе завтра он может стать не 192.168.1.12, и скрипт будет стучаться не туда.

Если телевизор уходит в глубокий сон и ADB по сети отваливается, этот способ его не разбудит. Тогда нужны настройки типа быстрый старт, сетевой режим ожидания, network standby или уже другие методы вроде IR/CEC.

Таким образом, телик будет включаться вместе с компьютером. Автовыключение у меня настроить не удалось (скрипт не успевает отрабатывать, пока комп выключается), так что я это сделал через функцию самого телевизора.

Также добавлю: я совсем не программист, так что любая критика будет уместна. Цель поста - показать, что так можно, а конкретную реализацию каждый теперь с помощью нейронок может сделать сам.

0
Автор поста оценил этот комментарий

умный дом, алиса, автоматизация. можно ик передатчик и скрипты на пк использовать.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Мой телик в Алису не прокидывается, как и ИК пульт, не знаю, почему, Смартлайф его видит, а Алиса нет. Гугл хоум у меня тоже не заработал. Можно хоум ассистант поднять, но там секса будет не меньше

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества