Mos e shkelni ligjin, jini të sjellshëm me fëmijët tuaj dhe mos harroni se ju jeni përgjegjës për atë që bëni me pajisjet tuaja.
tëMos e shkelni ligjin, jini të sjellshëm me fëmijët tuaj dhe mos harroni se ju jeni përgjegjës për atë që bëni me pajisjet tuaja.
Problemi për të cilin askush nuk flet
Në një epokë ku ekranet dominojnë rutinën e gjumit, miliona njerëz tani bien në gjumë duke shikuar videot, podcastet ose aplikacionet e transmetimit në YouTube.
Megjithatë, ky zakon ka një kosto të fshehur: ekspozimi i pakontrolluar i vëllimit, veçanërisht për fëmijët.Si prind dhe zhvillues, unë u përball me këtë problem në dorë të parë – Binget e vonë të natës të fëmijës tim në YouTube çuan në gjumë të paqëndrueshëm dhe irritabilitet në mëngjes.
Aplikacionet falas në Google Play Store, siVëllimi i kufizuartëKontrolli i volumitishin një dështim: ata u rrëzuan, nuk kishin cilësime, ose ishin shumë ndërhyrëse. ndoshta aplikacionet komerciale do të ishin më të mira, por unë nuk e kam testuar këtë pasi ato kushtojnë para, shpesh mjaft pak.
The Hack (Totalisht I paligjshëm...ish)
Kam ndërtuar një skenar që lidhet me pajisjen tuaj Android pa tel dhe mban një sy në vëllimin e saj. Nëse ajo merr shumë të zhurmshme - ajo butësisht e ul atë.
Po, teknikisht, përdor ADB (Android Debug Bridge) mbi Wi-Fi, e cila është një mjet zhvilluesi dhe nuk ka për qëllim prindërimin para gjumit.
Krijoni mjedisin tuaj të zhvillimit
Vendosja e një mjedisi zhvillimi dhe lidhshmëria është vendimtare para zhytjes në kod.Kjo do të sigurojë që ju të keni të gjitha mjetet dhe bibliotekat e nevojshme, duke përmirësuar procesin e zhvillimit.
Unë përdor macOS, kështu që të gjitha shembujt në histori do të jenë me këtë sistem, por duke përdorur Windows nuk e bën procesin shumë më të vështirë në krahasim me macOS.Fjalë kyçe Python
Këtu është një ndarje më e detajuar:
- të
- 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). të
- Shtoni mjetet e platformës në rrugën e sistemit tuaj: Windows: Hapni cilësimet e "Variacioneve të mjedisit" (kërkoni "Variacione të mjedisit" në menunë e fillimit). Klikoni "Editoni ndryshimet e mjedisit të sistemit". Klikoni "Variacione të mjedisit". Në seksionin "Variacione të sistemit", gjeni ndryshimet e "Path", zgjidhni atë dhe klikoni "Edit". Për shembull: eksporti PATH=$PATH:/path to/platform-tools export (p.sh., C:\adb). macOS/Linux: Hapni terminalin tuaj. Shtoni rrugën në adresën e platformës-tools në skedarin e konfigurimit të shell tuaj (p.sh., ~/.bash të
- Verifikimi i instalimit të ADB: Hapni një ndërfaqe të linjës së komandës (CLI): Duke përdorur Windows Search Bar (Windows OS): Klikoni butonin Start ose ikonën e xhamit në shiritin e detyrave. Shkruani "cmd" (pa kuota) në shiritin e kërkimit. Klikoni në rezultatin "Command Prompt". Për të drejtuar si administrator, klikoni me të djathtën "Command Prompt" në rezultatet e kërkimit dhe zgjidhni "Run as administrator". Duke përdorur Search Spotlight (macOS): Klikoni ikonën e xhamit në shiritin e menut (ose shtypni Cmd+Space). Shkruani "Terminal" dhe klikoni dy herë për ta hapur. Shkruani adb dhe shtypni Enter. adb Nëse adb është instaluar të
- Aktivizoni Debugging USB në pajisjen tuaj Android: shkoni në "Settings" në pajisjen tuaj Android. Rrotullojeni poshtë dhe zgjidhni "About Phone". Gjej "Build Number" dhe prekni atë 7 ose më shumë herë për të zhbllokuar Opsionet e Zhvilluesit. Kthehuni në faqen kryesore "Settings" dhe tani do të shihni "Developer Options". Zgjidhni "Developer Options". Shkoni poshtë në "USB Debugging" dhe shkoni në. të
Nga tani e tutje, ne do të punojmë vetëm në linjën e komandës. në rastin tim, do të jetë terminali.
Krijimi i lidhjes tuaj
Hapi i ardhshëm do të jetë lidhja e pajisjes suaj celulare me PC-në tuaj.Kjo është një hap relativisht i thjeshtë që përbëhet nga dy pjesë:
- të
- Lidhja e rrjetit; të
- Lidhje Wireless të
Rrjeti i lidhjes:
Ju duhet të lidhni pajisjen tuaj celular me kompjuterin tuaj duke përdorur kabllon (USB A / USB C ose USB A / micro USB, etj).
Pas kësaj, ju hapni terminalin dhe shkruani komandën e mëposhtme:
adb devices
Për momentin, ne jemi të gatshëm të aktivizojmë modalitetin TCP/IP me komandën e mëposhtme:
adb tcpip 5555
Nëse ne jemi tashmë në terminal, atëherë ne mund të kontrollojmë adresën IP të pajisjes celulare në rrjetin tonë Wi-Fi pa shikuar në pajisjen celulare. le të drejtojmë komandën e mëposhtme për të gjetur adresën IP që do të na duhet më vonë kur të krijojmë një lidhje wireless:
adb -d shell "ip route | awk '/wlan0/ {print \$9}'"
Lidhje Wireless:
Tani që keni adresën IP të pajisjes suaj, është koha për t'u lidhur pa tel. Nuk ka më nevojë për një lidhje me tel.adb tcpip 5555
, ju mund të lironi me siguri kabllon USB. pjesa tjetër e magjisë do të ndodhë përmes Wi-Fi.
Sigurohuni që të dy smartfonët dhe kompjuteri juaj janë në të njëjtën rrjet Wi-Fi.
adb connect <DEVICE_IP>:5555
Për shembull, nëse pajisja juaj IP është10.0.0.108
Ju do të hyni:
adb connect 10.0.0.108:5555
Nëse gjithçka shkon mirë, do të shihni një mesazh si:
Le të flasim përsëri për problemin
Le të marrim një hap mbrapa dhe të kujtojmë se çfarë po zgjidhim. Fëmija juaj bie në gjumë paqësisht duke shikuar një video të qetë - ndoshta një histori në gjumë ose disa tinguj relaksues. Por dy orë më vonë? Loja automatike e YouTube-it fillon, një shpërthim i fuqishëm i reklamave, ose një soundtrack i karikaturave me energji të lartë i zgjon ata. Ata janë groggy. Ju jeni groggy. Gjithkush fillon ditën e tyre tashmë të zbrazët. Çfarë na duhej ishte një roje e heshtur - diçka e padukshme dhe e besueshme. Një sistem që do të ulte butësisht vëllimin në sfond pa ndaluar riprodhimin, pa flashing pop-ups shqetësuese, dhe pa
Arkitektura në një vështrim
Këtu është një diagram i shpejtë që tregon se si gjithçka lidhet:
tëKompjuteri juaj (duke drejtuar skripin Python) lidhet me pajisjen Android përmes ADB nëpërmjet Wi-Fi, monitoron vëllimin periodikisht dhe e zvogëlon atë nëse është e nevojshme.
të
Kompjuteri juaj (duke drejtuar skripin Python) lidhet me pajisjen Android përmes ADB nëpërmjet Wi-Fi, monitoron vëllimin periodikisht dhe e zvogëlon atë nëse është e nevojshme.
Skenari që bën magjinë
Thelbi i zgjidhjes është një skrip Python që komunikon me pajisjen tuaj Android përmes ADB nëpërmjet Wi-Fi.
Nëse vëllimi është mbi 5 (Android zakonisht përdor një shkallë 15 pikë), skripti e ul atë butësisht - një hap në një kohë, me pauza të shkurtra.
Pjesa më e mirë? Ajo respekton ndryshimet manuale. Nëse dikush ul vetë vëllimin, skripti vërehet dhe nuk ndërhyn. Është e qetë. Është adaptive. Është e padukshme – ashtu si një asistent i mirë i gjumit duhet të jetë.
Evolucioni i Script: Nga hack i vogël në mjet të besueshëm
Kur shkrova për herë të parë këtë skenar, ishte vetëm disa rreshta e gjatë.
Dukej diçka si kjo:
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'")
Por së shpejti, realiteti filloi.Çfarë ndodh nëse pajisja shkëputet në mes të natës?Çfarë nëse ADB hedh një timeout?Çfarë nëse telefoni nuk është i lidhur?Çfarë nëse skripti rrëzohet ndërsa të gjithë janë në gjumë?
Skenari ka evoluar.
- të
- Ndonjëherë, pajisja nuk ishte e lidhur, kështu që kam shtuar adb connect ip:port. të
- Ndonjëherë ADB u rrëzua në mes të natës. I shtuar trajtim përjashtim dhe retries. të
- Po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po, po të
- Regjistrimi i skedarëve dhe regjistrimi i konsolës? të
- Volumi ndryshon në mes të gjumit?Tani, skripti gjurmon edhe këtë - dhe ndërhyn vetëm kur është e nevojshme. të
- Monitorimi i frekuencës? intervale të ndryshme për nivele të larta vs. të ulëta të volumit. të
- Dhe po, shutdown elegant Ctrl + C. të
Ajo që filloi si disa rreshta skenar u shndërrua në një mbikëqyrës të vogël që kujdeset për telefonin tuaj - kështu që ju nuk duhet të.
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.")
Sot, skripti është i shkallës së prodhimit - dhe me burim të hapur. por sigurohuni që të ndryshoni këtë linjë ADB_DEVICE = "10.0.0.108:5555" në skrip me adresën tuaj IP nga“Të ndërtosh lidhjen tënde”të
Running Script: Dy opsione të lehtë si dhe Cron
Ju keni dy mënyra kryesore për të drejtuar skenar:
- të
- Përdorimi i Python të
Nëse keni Python 3 të instaluar, mund të ekzekutoni:
python3 reduce_volume.py
Ajo do të fillojë menjëherë dhe do të bëjë punën e saj në heshtje në sfond.
- të
- Si një standalone ekzekutive të
Dëshironi ta ndani atë me dikë që nuk ka instaluar Python?
Ju mund të konvertojë skenar në një standalone.app
për macOS ose.exe
for Windows, using PianistëtNë :
pyinstaller --onefile reduce_volume.py
Kjo do të krijojë një aplikacion portativ që mund të fillohet me një klikim të dyfishtë - nuk kërkohet Python.
- të
- Madje planifikoni atë me një punë cron ose planifikues detyrash nëse jeni fancy. të
Një tjetër gjë: Kufizimet e largëta të ADB
Është e rëndësishme të theksohet se ADB mbi Wi-Fi mund të jetë i brishtë.
Lidhja juaj e largët do të ndërpritet nëse:
- të
- Telefoni do të rifillojë. të
- Rrjeti Wi-Fi po ndryshon. të
- Modaliteti i zhvilluesit ose Debugging USB do të çaktivizohet. të
- Pajisja shkon shumë gjatë pa aktivitet ADB (disa sisteme automatikisht fillojnë lidhjet joaktive). të
- Dhe shumë të tjerë... të
Pra, nëse skripti ndalon së punuari, thjesht përsëritni hapat nga“Të ndërtosh lidhjen tënde”Në :
- të
- Lidhni pajisjen celulare me një tel në kompjuterin tuaj personal. të
- Përdorni komandën adb tcpip 5555 të
- Dhe ekzekutimi i lidhjes adb <DEVICE_IP>:5555 të
adb connect 10.0.0.108:5555
Do të ktheheni në biznes.
Mendimet e fundit
Ky hack nuk është për të heshtur argëtimin e fëmijës tuaj. është për të mbrojtur gjumin e tyre - dhe shëndetin tuaj - nga surpriza të papritura teknologjike.
Kjo mund të jetë një skenar i vogël, por për familjen time dhe mua, ishte një ndryshim i jetës. Jo më 2 AM YouTube zgjohet. Jo më mëngjeset e frikshme. Vetëm netë të qeta dhe një pjesë e hollë e automatizimit të prindërimit.
- të
- A është paksa një hack? të
- A funksionon në mënyrë të besueshme? të
- Technically yes, but it operates in a grey zone (ADB access and automated control are not officially supported by Google for end-users). të
- Për sa kohë që ndihmon një prind të lodhur (ose edhe veten) të flejë më mirë – ia vlen. të
- Kjo është subtile. të
- Është e padukshme. të
- Dhe kjo funksionon. të
Më tregoni nëse dëshironi kodin burimor, një konfigurim me një klik, ose një version të përmirësuar.
Dhe hey - fle mirë. ju keni fituar.
P.S. Kjo zgjidhje mund të përmirësohet dhe zgjerohet - për shembull, të vendosni një orar, të përshtateni me profile të ndryshme, të gjurmoni aktivitetin e pajisjes, etj. Por edhe në formën e saj themelore, tashmë zgjidh problemin kryesor: ju ndihmon të bini në gjumë - dhe të flini në paqe.
tëP.S. This solution can be improved and expanded - for example, set up a schedule, adapt to different profiles, track device activity, etc. But even in its basic form, it already solves the main problem: it helps you fall asleep - and sleep peacefully. And yes, if you have a specific request or idea, I will be happy to help you, and at the same time, this will be a topic for another article.