Disclaimer: Bu makale sadece eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptıklarınızın sorumluluğunu unutmayın.
Disclaimer: Bu makale yalnızca eğitim amaçlıdır. yasayı ihlal etmeyin, çocuklarınıza nazik olun ve kendi cihazlarınızla yaptıklarınızdan sorumlu olduğunuzu unutmayın.
Hiç Kimsenin Konuşmadığı Sorun
Dijital Uyku Paradoksu Ekranların uyku rutinlerine hakim olduğu bir çağda, milyonlarca kişi artık YouTube videolarına, podcastlara veya akış uygulamalarına uykuya dalıyor.
Ancak, bu alışkanlığın gizli bir maliyeti vardır: özellikle çocuklar için kontrolsüz ses maruz kalması. bir ebeveyn ve geliştiricisi olarak, ilk elden bu soruna karşıyım - çocuğumun gece geç saatlerinde YouTube binges huzursuz uykuya ve sabah sinirlenmesine neden oldu.
Google Play Mağazasında ücretsiz uygulamalar, Volume Limiter, Volume Control bir başarısızlık oldu: çöktü, ayarları yoktu, ya da çok karıştırıcıydı. Belki ticari uygulamalar daha iyi olurdu, ancak bunu para maliyeti olduğu için test ettim.
The Hack (Totally Illegal...ish)
HakkındaAndroid cihazınıza kablosuz olarak bağlanıp ses seviyesini izleyen bir senkron oluşturdum. Eğer çok yüksekse — onu hafifçe düşürür. hiçbir durdurma videoları, hiçbir ekran parlayan, hiçbir kullanıcı etkileşimi. Sadece sessiz sihir.
Evet, teknik olarak, geliştiriciler için bir araç olan Wi-Fi üzerinde ADB (Android Debug Bridge) kullanıyor ve yatmadan önce ebeveynlik için tasarlanmıyor.
Geliştirme Çevrenizi Kurmak
Bir geliştirme ortamı ve bağlantı kurmak, kodun içine dalmadan önce çok önemlidir.
Bu, geliştirme sürecini kolaylaştırmak için gerekli tüm araçlara ve kitaplıklara sahip olmanızı sağlayacaktır.
Ben macOS kullanıyorum, bu yüzden hikayedeki tüm örnekler bu sistemle olacak, ancak Windows kullanımı, süreci MacOS'a kıyasla çok daha zorlaştırmaz. tek fark, MacOS işletim sisteminde Python zaten yüklü olmasıdır ve Windows'ta, burada Python kendiniz yüklemeniz gerekir: Windows Python
İşte daha ayrıntılı bir bölünme:
-
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).
C:\adb
-
-
Add Platform Tools to your System's PATH:
-
Windows:
- Open the "Environment Variables" settings (search for "Environment Variables" in the Start menu).
- Click "Edit the system environment variables".
- Click "Environment Variables".
- In the "System variables" section, find the "Path" variable, select it, and click "Edit".
- Click "New" and add the path to the platform-tools directory (e.g., C:\adb).
-
macOS/Linux:
-
Open your terminal.
-
Add the path to the platform-tools directory to your shell's configuration file (e.g., ~/.bashrc, ~/.zshrc).
For example: export PATH=$PATH:/path/to/platform-tools.
export PATH=$PATH:/usr/local/bin/adb echo $PATH | tr ":" "\n"
In my case, it’ll be something like this:
-
Restart your terminal or source the configuration file (e.g., source ~/.bashrc).
From now on, we will work only in the command line. In my case, it will be the terminal.
-
-
-
Verify ADB Installation:
-
Open a command line interface (CLI):
- Using the Windows Search Bar (Windows OS):
- Click the Start button or the magnifying glass icon in the taskbar.
- Type "cmd" (without quotes) in the search bar.
- Click on the "Command Prompt" result.
- To run as administrator, right-click on "Command Prompt" in the search results and select "Run as administrator".
- Using Spotlight Search (macOS):
- Click the magnifying glass icon in the menu bar (or press Cmd+Space).
- Type "Terminal" and double-click it to open.
- Using the Windows Search Bar (Windows OS):
-
Type adb and press Enter.
adb
-
If adb is installed correctly, you should see the ADB help message.
-
-
Enable USB Debugging on your Android Device:
- Go to "Settings" on your Android device.
- Scroll down and select "About Phone".
- Find "Build Number" and tap it 7 or more times to unlock Developer Options.
- Go back to the main "Settings" page, and now you'll see "Developer Options".
- Select "Developer Options".
- Scroll down to "USB Debugging" and toggle it on.
Bundan sonra, sadece komut satırında çalışacağız. benim durumumda, bu terminal olacak.
İletişim kurmak
Sonraki adım mobil cihazınızı bilgisayarınıza bağlamaktır.Bu iki parçadan oluşan nispeten basit bir adımdır:
- Kablosuz bağlantı;
- Kablosuz bağlantı.
Wire Bağlantı:
Mobil cihazınızı bilgisayarınıza kablo (USB A/USB C veya USB A/micro USB, vb.) kullanarak bağlamanız gerekir.
Sonrasında, terminali açın ve aşağıdaki komutu yazın:
adb devices
Şu anda, aşağıdaki komutu kullanarak TCP/IP modunu etkinleştirmeye hazırız:
adb tcpip 5555
Eğer zaten terminaldeysek, Wi-Fi ağındaki mobil cihazın IP adresini, mobil cihazı görmeden kontrol edebiliriz.
Kablosuz bağlantı kurarken daha sonra ihtiyacımız olacak IP adresini bulmak için aşağıdaki komutu çalıştıralım:
adb -d shell "ip route | awk '/wlan0/ {print \$9}'"
Kablosuz Bağlantı:
Şimdi cihazınızın IP adresine sahip olduğunuzda, kablosuz bağlantıya geçme zamanıdır. Artık kablolu bağlantıya ihtiyacınız yok. adb tcpip 5555
çalıştırdığınızda, USB kablosunu güvenle bağlayabilirsiniz.
Akıllı telefonunuzun ve bilgisayarınızın aynı Wi-Fi ağında olduğundan emin olun.
adb connect <DEVICE_IP>:5555
Örneğin, cihazınızın IP 10.0.0.108
ise:
adb connect 10.0.0.108:5555
Her şey yolunda giderse, şöyle bir mesaj göreceksiniz:
Let's Talk About The Problem Again
HakkındaBir adım geri dönelim ve çözdüklerimizi hatırlayalım. Çocuğunuz sessiz bir video izlerken huzurlu bir şekilde uykuya dalar - belki bir yatak hikayesi veya biraz rahatlatıcı sesler. Ama iki saat sonra? YouTube'un otomatik oynaması girer, yüksek sesli reklamlar veya yüksek enerjili çizgi film sesleri onları uyandırır. Onlar groggy. Sen groggy. Herkes gününü zaten bozulmuş başlar. Neye ihtiyacımız vardı sessiz bir koruyucusu - görünmez ve güvenilir bir şey. Arka planta ses miktarını hafifçe düşüren bir sistem, oynatmayı durdurmadan, sinir bozucu pop-upları parlatmadan ve kullanıcısını uyandırmadan. İşte bu senaryo ne yapar.
Görüntülü Görüntülü Görüntülü Görüntü
İşte her şeyin nasıl bağlandığını gösteren hızlı bir diagram:
Bilgisayarınız (Python senaryosunu çalıştırıyor) Wi-Fi üzerinden ADB aracılığıyla Android aygıtına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır.Bilgisayarınız (Python scriptini çalıştırıyor) Wi-Fi üzerinden ADB üzerinden Android aygıtına bağlanır, ses miktarını düzenli olarak izler ve gerektiğinde azaltır.
The Script That Does the Magic
Türkçe Dublaj izleÇözümün çekirdeği, Android cihazınızla Wi-Fi üzerinden ADB üzerinden iletişim kuran bir Python senaryosudur.
Her 30 saniyede, şu anki müzik akışı hacmi kontrol eder. eğer hacim 5'in üzerinde ise (Android genellikle 15 noktalı bir ölçekte kullanır), senkron yavaşça aşağıya indirilir - bir kerede bir adım, kısa kesintilerle. eğer hacim zaten 5 veya daha düşükse, sadece bekler - hacim tekrar yükselirse sessizce bekler.
En iyi kısmı? Manuel değişikliklere saygı gösterir. Birisi ses seviyesini kendisi düşürürse, senaryo fark eder ve rahatsız etmez. Sessizdir. Adaptatiftir. Görünmezdir - iyi bir yatıştırma asistanının olması gerektiği gibi.
The Script’s Evolution: From Tiny Hack to Reliable Tool
Türkçe Altyazılı izleBu senaryoyu ilk yazdığımda birkaç satır uzunluğunda değildi.
Böyle bir şey görünüyor:
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'")
Ama yakında, gerçeklik girdi. aygıt gecenin ortasında bağlanmazsa ne olur? ADB bir zamanlama atarsa ne olur? telefon eşleştirilmezse ne olur? senaryo herkes uyurken çökerse ne olur?
Böylece senaryo gelişti.
- Bazen cihaz bağlanmadı. Öyleyse
adb connect ip:port
ekledim. - Bazen ADB gece yarısı çöktü. Ben istisna işleme ve retries ekledim.
- Logging? Evet, bunu da ekledim.
- File logging ve konsol logging? Tabii ki.
- Volume mid-sleep değişiklikleri? Şimdi, senkron da bunu izler - ve sadece gerektiğinde müdahale eder.
- Frekans izleme? Yüksek vs. düşük hacim seviyeleri için farklı ar
Birkaç satır senaryo olarak başlayan şey, telefonunuzu gözetleyen küçük bir bekçi haline geldi - bu yüzden yapmanıza gerek yok.
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.")
Bugün, senkron üretim düzeyinde ve açık kaynaklıdır.Ama bu satırı ADB_DEVICE = "10.0.0.108:5555" "Setting Up Your Connection"'dan IP adresinizle senkronizasyonda değiştirmek için emin olun.
Skript çalıştırmak: Cron gibi iki kolay seçenek
Skript çalıştırmak için iki ana yolu vardır:
- Python ile doğrudan
Python 3 yüklü ise, sadece çalıştırabilirsiniz:
python3 reduce_volume.py
Hemen başlar ve arka planda işini sessizce yapar.
- Standalone Executable olarak
Python yüklü olmayan biriyle paylaşmak ister misiniz?
Skript'i macOS için bağımsız bir
.app
veya Windows için.exe
olarak dönüştürebilirsiniz, PyInstaller:pyinstaller --onefile reduce_volume.py
Bu, bir çift tıklama ile başlatılabilecek taşınabilir bir uygulama yaratır - Python gerekmez.
- Eğer fancy iseniz cron iş veya görev zamanlayıcısı ile de zamanlayın.
Bir Şey Daha: Uzaktan ADB Sınırlamaları
Wifi üzerinden ADB'nin kırılgan olabileceğini belirtmek önemlidir.
Uzaktan bağlantınız kesilirse:
- Telefon yeniden başlatılır.
- Wi-Fi ağı değişir.
- Geliştirici Modu veya USB Debugging devre dışı bırakılır.
- Aygıt ADB aktivitesi olmadan çok uzun sürer (bazı sistemler otomatik olarak aktif olmayan bağlantıları başlatır).
- Ve diğer birçok ...
Öyleyse, senkron çalışmayı durdurursa, sadece " Bağlantınızı ayarlamak" adımlarını tekrarlayın:
-
Connect the mobile device with a wire to your personal computer.
-
Run the command
adb tcpip 5555
adb tcpip 5555
-
And run
adb connect <DEVICE_IP>:5555
adb connect 10.0.0.108:5555
ve işinize geri döneceksiniz.
Son Düşünceler
Bu hack, çocuğunuzun eğlencesini sessizleştirmekle ilgili değildir. uykularını - ve aklınızı - beklenmedik teknoloji sürprizlerinden korumakla ilgilidir.
Bu küçük bir senaryo olabilir, ama ailem ve benim için, hayatımı değiştiren bir şeydi. Artık 2 AM YouTube uyanıklığı yok. Artık korkunç sabahlar yok. Sadece huzurlu geceler ve ince bir parental otomasyon.
- Bu biraz bir hack mı? Tabii.
- Bu güvenilir mi? Kesinlikle.
- Bu yasal mı? Teknik olarak evet, ancak gri bir bölgede çalışır (ADB erişimi ve otomatik kontrolü Google tarafından nihai kullanıcılar için resmi olarak desteklenmiyor).
- Ama ne biliyorsunuz? Yorgun bir ebeveyn (veya kendiniz) daha iyi uyumaya yardımcı olduğu sürece - buna değer.
- Bu ince.
- Bu görünmez.
- Ve işe yarıyor.
Kaynak kodu, tek tıkla kurulum veya geliştirilmiş bir sürüm istiyorsanız bana bildirin.
And hey — sleep well. You’ve earned it.
İyi bir uyku.P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir program ayarlayabilir, farklı profillere adapte olabilir, cihaz aktivitesini izleyebilir, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, eğer belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak.
P.S. Bu çözüm geliştirilebilir ve genişletilebilir - örneğin, bir zamanlama ayarlayabilir, farklı profillere uyum sağlayabilir, cihaz aktivitesini izleyebilir, vb. Ama temel biçiminde bile, zaten ana sorunu çözüyor: uykuya dalmanıza yardımcı olur - ve huzur içinde uyuyun. ve evet, belirli bir isteğiniz veya fikriniz varsa, size yardımcı olmaktan mutluluk duyuyorum ve aynı zamanda bu başka bir makale için bir konu olacak.