Ez a cikk kizárólag oktatási célokra szolgál. ne sértse meg a törvényt, legyen kedves a gyermekeihez, és ne felejtsd el, hogy te vagy a felelős azért, amit a saját eszközeivel csinálsz.
AzEz a cikk kizárólag oktatási célokra szolgál. ne sértse meg a törvényt, legyen kedves a gyermekeihez, és ne felejtsd el, hogy te vagy a felelős azért, amit a saját eszközeivel csinálsz.
A probléma, amiről senki nem beszél
A digitális alvási paradoxon egy olyan korban, amikor a képernyők uralják az alvási rutinokat, milliók most elaludnak a YouTube videók, podcastok vagy streaming alkalmazások előtt.
Ennek a szokásnak azonban van egy rejtett költsége: ellenőrizetlen hangerő expozíció, különösen a gyermekek számára. mint szülő és fejlesztő, első kézből szembesültem ezzel a problémával - gyermekeim késő éjszakai YouTube bingjai nyugtalan alváshoz és reggeli ingerlékenységhez vezettek.
Ingyenes alkalmazások a Google Play Áruházban, példáulVolumen korlátozásaz ,Volumen ellenőrzésTalán a kereskedelmi alkalmazások jobbak lennének, de ezt nem teszteltem, mivel pénzbe kerülnek, gyakran eléggé.
Teljesen illegális (Totally Illegal...ish)
Építettem egy forgatókönyvet, amely vezeték nélkül csatlakozik az Android készülékhez, és figyelemmel kíséri a hangerőt. Ha túl hangos lesz - óvatosan lecsökkenti. Nincs megálló videó, nincs képernyő villogása, nincs felhasználói interakció. Csak csendes mágia.
Igen, technikailag használja az ADB-t (Android Debug Bridge) a Wi-Fi-n keresztül, amely egy fejlesztői eszköz, és nem az ágyban történő szülői tevékenységre szánt.
Fejlesztési környezetének kialakítása
A fejlesztési környezet és a kapcsolódás beállítása döntő fontosságú, mielőtt beleveted magad a kódba.Ez biztosítja, hogy rendelkezel az összes szükséges eszközzel és könyvtárral, és egyszerűsíti a fejlesztési folyamatot.
A macOS-ot használom, így a történet összes példája ebben a rendszerben lesz, de a Windows használata nem teszi a folyamatot sokkal nehezebbé a macOS-hoz képest.Az egyetlen különbség az, hogy a macOS operációs rendszerben a Python már telepítve van, és a Windows-ban itt kell telepítenie a Python-t:Windows Python használata
Íme egy részletesebb bontás:
- Az
- Download and Extract Platform Tools: Go to the official Android Developers website: Navigate to Android SDK Platform-Tools. Download the SDK Platform Tools: Download the latest version for your operating system (Windows, macOS, or Linux). Extract the ZIP file: Extract the downloaded ZIP file to a location of your choice (e.g., C:\adb on Windows). Az
- Add Platform Tools a rendszer Path: Windows: Nyissa meg a "Environment Variables" beállításokat (keresse meg a "Environment Variables" a Start menüben). Kattintson a "Edit the system environment variables". Kattintson a "Environment Variables". A "System variables" szakaszban keresse meg a "Path" változót, válassza ki, majd kattintson a "Edit" gombra. Kattintson a "New" gombra, és adja hozzá az utat a platform-eszközök könyvtárához (pl.: C:\adb). macOS/Linux: Nyissa meg terminálját. Adja hozzá az utat a platform-eszközök könyvtárához a shell konfigurációs fájlához (pl.: ~/.bashrc, ~/.zshrc). Például Az
- Ellenőrizze az ADB telepítését: Nyissa meg a parancssori felületet (CLI): A Windows Search Bar (Windows OS) használatával: Kattintson a Start gombra vagy a nagyító üveg ikonra a feladatmezőben. Írja be a "cmd" (címjegyek nélkül) a keresőmezőbe. Kattintson a "Command Prompt" eredményre. A rendszergazdaként való futtatáshoz kattintson jobbra a "Command Prompt" gombra a keresési eredményekben, majd válassza ki a "Run as administrator" lehetőséget. Spotlight Search (macOS) használatával: Kattintson a nagyító üveg ikonra a menüsávban (vagy nyomja meg a Cmd+Space gombot). Írja be a "Terminál" gombot, majd Az
- Engedélyezze az USB hibakeresést az Android készülékén: Menjen az "Beállítások" menüpontra az Android készüléken. Görgessen lefelé, és válassza ki a "Telefonról" lehetőséget. Keresse meg a "Build Number" lehetőséget, és koppintson rá 7 vagy több alkalommal a Fejlesztői beállítások feloldásához. Menjen vissza a fő "Beállítások" oldalra, és most látni fogja a "Developer Options" lehetőséget. Válassza ki a "Developer Options" lehetőséget. Görgessen lefelé az "USB hibakeresés" lehetőségre, és kapcsolja be. Az
Mostantól csak a parancssorban fogunk dolgozni, az én esetemben a terminál lesz.
Hozd létre a kapcsolatot
A következő lépés a mobileszköz csatlakoztatása a PC-hez. Ez egy viszonylag egyszerű lépés, amely két részből áll:
- Az
- a vezetékes kapcsolat; Az
- Vezeték nélküli kapcsolat. Az
A vezetékes kapcsolat:
Csatlakoztassa a mobileszközt a számítógéphez a kábellel (USB A/USB C vagy USB A/micro USB, stb.).
Ezután nyissa meg a terminált, és írja be a következő parancsot:
adb devices
Egyelőre készen állunk a TCP/IP mód engedélyezésére a következő parancs segítségével:
adb tcpip 5555
Ha már a terminálban vagyunk, akkor ellenőrizhetjük a mobil eszköz IP-címét a Wi-Fi hálózatunkban anélkül, hogy megnéznénk a mobil eszközt. Végezzük el a következő parancsot, hogy megtudjuk az IP-címet, amelyre később szükségünk lesz a vezeték nélküli kapcsolat létrehozásakor:
adb -d shell "ip route | awk '/wlan0/ {print \$9}'"
Wireless Connection:
Most, hogy megvan a készülék IP-címe, itt az ideje, hogy vezeték nélkül csatlakozzon. Nincs többé szükség vezetékes kapcsolatra.adb tcpip 5555
Az USB-kábelt biztonságosan ki lehet kapcsolni, a többi varázslat a Wi-Fi-n keresztül történik.
Győződjön meg arról, hogy mind az okostelefon, mind a számítógép ugyanazon a Wi-Fi hálózaton van. Ezután a terminálban írja be a következő parancsot:
adb connect <DEVICE_IP>:5555
Például, ha a készülék IP10.0.0.108
Ön belépett volna:
adb connect 10.0.0.108:5555
Ha minden jól megy, egy ilyen üzenetet fog látni:
Beszéljünk megint a problémáról
Tegyünk egy lépést hátra, és emlékezzünk arra, amit megoldunk. Gyermeke békésen elalszik egy csendes videó megtekintésében - talán egy alvási történet vagy néhány pihentető hang. De két órával később? A YouTube automatikus lejátszása bekapcsolódik, egy hangos hirdetésbaleset, vagy egy nagy energiájú rajzfilm hangja felébreszti őket. Groggyek. Groggy vagy. Mindenki elkezdi a napját már kiürült. Amire szükségünk volt egy csendes őrzőre - valami láthatatlan és megbízható. Egy rendszer, amely finoman csökkenti a hangerőt a háttérben anélkül, hogy megállítaná a lejátszást, anélkül, hogy felugorná az irritáló pop-upokat, és anélkül,
Építészet egy pillantás alatt
Íme egy gyors diagram, amely megmutatja, hogyan kapcsolódik össze minden:
AzA számítógép (a Python script futtatásával) csatlakozik az Android eszközhöz az ADB-n keresztül Wi-Fi-n keresztül, rendszeresen figyeli a hangerőt, és szükség esetén csökkenti azt.
Az
A számítógép (a Python script futtatásával) csatlakozik az Android eszközhöz az ADB-n keresztül Wi-Fi-n keresztül, rendszeresen figyeli a hangerőt, és szükség esetén csökkenti azt.
A forgatókönyv, ami varázslatot tesz
A megoldás lényege egy Python-szkript, amely Wi-Fi-n keresztül kommunikál az Android-eszközével az ADB-n keresztül.
Ha a hangerő meghaladja az 5 pontot (az Android rendszerint 15-pontos skálát használ), a szkript gyengéden lecsökkenti azt – egy lépésenként, rövid szünetekkel.
A legjobb része? Tiszteletben tartja a kézi változtatásokat. Ha valaki maga csökkenti a hangerőt, a forgatókönyv észreveszi, és nem zavarja. Csendes. Alkalmazkodó. Láthatatlan – csakúgy, mint egy jó alvási asszisztensnek.
A forgatókönyv evolúciója: a kicsi hacktól a megbízható eszközig
Amikor először írtam ezt a forgatókönyvet, alig volt néhány sor hosszú.
Valami ilyennek látszott:
import subprocess
import time
import re
def get_stream_volume():
cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
match = re.search(r'streamVolume:(\d+)', result.stdout)
return int(match.group(1)) if match else None
def set_volume(level):
cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
subprocess.run(cmd, shell=True)
print(f"Volume set to {level}")
def monitor_volume():
while True:
volume = get_stream_volume()
if volume is None:
print("Failed to get volume level. Retrying...")
time.sleep(5)
continue
print(f"Current volume: {volume}")
if volume == 15:
for vol in range(14, 4, -1):
set_volume(vol)
time.sleep(30)
while get_stream_volume() == 5:
print("Volume is at 5, monitoring every 60 seconds...")
time.sleep(60)
if __name__ == "__main__":
monitor_volume()
os.system("adb shell dumpsys audio | grep -i 'streamVolume'")
De hamarosan a valóság bekapcsolódott.Mi történik, ha az eszköz az éjszaka közepén kikapcsol? Mi van, ha az ADB időzítést dob? Mi van, ha a telefon nem párosul? Mi van, ha a forgatókönyv összeomlik, miközben mindenki alszik?
A forgatókönyv fejlődött.
- Az
- Néha a készülék nem volt csatlakoztatva, így hozzáadtam az adb connect ip:portot. Az
- Időnként az ADB éjfélkor összeomlott, kivételes kezelést és retrieket adtam hozzá. Az
- Hát igen, ezt is hozzátette. Az
- Fájl naplózás és konzol naplózás? Az
- Most a forgatókönyv ezt is nyomon követi – és csak szükség esetén avatkozik be. Az
- Figyelemmel kíséri a frekvenciát? Különböző intervallumok magas vs. alacsony hangerő. Az
- És igen, graceful shutdown Ctrl + C. Az
What started as a few lines of script turned into a tiny watchdog that babysits your phone — so you don’t have to.
import subprocess
import time
import re
import logging
from datetime import datetime
logging.basicConfig(
filename='volume_control.log',
level=logging.INFO,
format='[%(asctime)s] %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
ADB_DEVICE = "10.0.0.108:5555"
def log(message):
timestamp = get_timestamp()
print(f'[{timestamp}] {message}')
logging.info(message)
def get_timestamp():
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def connect_adb():
subprocess.run(f"adb connect {ADB_DEVICE}", shell=True)
log(f"Reconnected to ADB at {ADB_DEVICE}")
def get_stream_volume():
cmd = "adb shell dumpsys audio | awk '/- STREAM_MUSIC:/{flag=1; count=0} flag && count<=5 {print; count++} /^$/{flag=0}'"
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
match = re.search(r'streamVolume:(\d+)', result.stdout)
return int(match.group(1)) if match else None
def safe_get_stream_volume(retries=3, delay=5):
for attempt in range(retries):
volume = get_stream_volume()
if volume is not None:
return volume
log(f"Attempt {attempt + 1}: Failed to get volume. Retrying after reconnect...")
connect_adb()
time.sleep(delay)
log("All attempts failed. Giving up temporarily.")
return None
def set_volume(level):
cmd = f"adb shell cmd media_session volume --stream 3 --set {level}"
subprocess.run(cmd, shell=True)
log(f"Volume set to {level}, waiting 30 seconds...")
def monitor_volume():
while True:
volume = safe_get_stream_volume()
if volume is None:
log("Initial volume read failed. Retrying in 30 seconds...")
time.sleep(30)
continue
log(f"Current volume: {volume}")
while volume > 5:
set_volume(volume - 1)
time.sleep(30)
volume = safe_get_stream_volume()
if volume is None:
log("Failed to read volume during decreasing.")
break
while True:
volume = safe_get_stream_volume()
if volume is None:
log("Failed to read volume during monitoring.")
time.sleep(30)
break
if volume > 5:
log(f"Volume increased to {volume}, restarting decreasing")
break
log(f"Volume is at {volume}, monitoring every 60 seconds...")
time.sleep(60)
if __name__ == "__main__":
try:
monitor_volume()
except KeyboardInterrupt:
log("Script stopped by user (Ctrl+C)")
except Exception as e:
log(f"Unexpected error: {e}")
finally:
log("Script exited.")
Ma a script termelési szintű – és nyílt forráskódú. de győződjön meg róla, hogy megváltoztatja ezt a vonalat ADB_DEVICE = "10.0.0.108:5555" a szkripten az IP-címét a„A kapcsolatod megteremtése”A .
A forgatókönyv futtatása: Két egyszerű lehetőség, valamint a Cron
Két fő módja van a forgatókönyv futtatására:
- Az
- Közvetlenül a Python Az
Ha telepítve van a Python 3, akkor egyszerűen futtathatja:
python3 reduce_volume.py
Azonnal elindul, és csendben végzi a munkáját a háttérben.
- Az
- Mint egy önálló végrehajtható Az
Szeretné megosztani valakivel, akinek nincs telepítve a Python?
A forgatókönyvet önállóan is átalakíthatja.app
macOS vagy.exe
A Windows használatávalpetefészekA következő:
pyinstaller --onefile reduce_volume.py
Ez egy hordozható alkalmazást hoz létre, amely dupla kattintással indítható - nincs szükség Pythonra.
- Az
- Még egy cron munkával vagy feladatok ütemezésével is ütemezheti, ha fantasztikus. Az
Egy másik dolog: Távoli ADB korlátozások
Fontos megjegyezni, hogy az ADB a Wi-Fi-n keresztül törékeny lehet.
A távoli kapcsolat megszakad, ha:
- Az
- A telefon újraindul. Az
- Változik a Wi-Fi hálózat Az
- A fejlesztő mód vagy az USB Debugging kikapcsolva van.
- A készülék túl sokáig működik ADB aktivitás nélkül (egyes rendszerek automatikusan bekapcsolják az inaktív kapcsolatokat). Az
- És sokan mások... Az
Tehát, ha a forgatókönyv nem működik, csak ismételje meg a„A kapcsolatod megteremtése”A következő:
- Az
- Csatlakoztassa a mobileszközt vezetékkel a személyes számítógépéhez. Az
- Adb tcpip 5555 Adb tcpip 5555 Adb tcpip 5555 Az
- Adb Connect <DEVICE_IP> 5555 letöltés Az
adb connect 10.0.0.108:5555
Visszatérsz az üzleti életbe.
Végső gondolatok
Ez a hack nem arról szól, hogy elhallgassa gyermeke szórakozását, hanem arról, hogy megvédje alvását - és az egészségét - a váratlan technológiai meglepetésekkel szemben.
Ez lehet egy kis forgatókönyv, de a családom és én számára életmódot változtatott. Nincs több 2 AM YouTube ébresztés. Nincs több csúnya reggel. Csak békés éjszakák és egy finom kis szülői automatizálás.
- Az
- Ez egy kis hackelés? Az
- Ez megbízhatóan működik? Az
- Technikailag igen, de szürke zónában működik (az ADB-hozzáférést és az automatizált vezérlést a Google hivatalosan nem támogatja a végfelhasználók számára). Az
- Mindaddig, amíg segít egy fáradt szülőnek (vagy akár magának) jobban aludni - megéri. Az
- Ez a Subtle. Az
- Ez a láthatatlan. Az
- És ez működik. Az
Tudassa velem, hogy szeretné-e a forráskódot, egy kattintással történő telepítést vagy egy továbbfejlesztett verziót.
And hey — sleep well. You’ve earned it.
P.S. Ez a megoldás javítható és bővíthető - például ütemtervet állíthat be, alkalmazkodik a különböző profilokhoz, nyomon követi az eszköz aktivitását stb. De még alapvető formájában is megoldja a fő problémát: segít elaludni - és békésen aludni.
AzP.S. Ez a megoldás javítható és bővíthető - például ütemtervet állíthat be, alkalmazkodik a különböző profilokhoz, nyomon követi az eszköz aktivitását stb. De még alapvető formájában is megoldja a fő problémát: segít elaludni - és békésen aludni.