Apple TV Controller
Contrôlez votre Apple TV depuis le terminal ou via des raccourcis iOS. Basé sur pyatv.
Sur cette page
Démarrage rapide (5 min)
Prérequis
- Python 3.9+
- Apple TV sur le même réseau Wi-Fi que votre Mac
- Nom de votre Apple TV (visible dans Réglages > Général > Informations > Nom)
1 Installation
git clone https://github.com/srimko/apple-tv-controller.gitcd apple-tv-controllerpip install -e .2 Configuration assistée
atv setupL'assistant interactif va :
- Scanner les Apple TV sur le réseau
- Vous faire choisir votre Apple TV
- Lancer l'appairage (entrez le code PIN affiché sur la TV)
- Sauvegarder le device par défaut
Pas de résultat ? Voir Dépannage > Aucune Apple TV trouvée
3 Tester
atv testatv statusVous êtes prêt ! Continuez avec le tutoriel ci-dessous.
Tutoriel : Votre premier scénario
Un scénario est une séquence d'actions automatisées. Exemple : lancer Netflix et sélectionner un profil.
Option 1 : Enregistrer interactivement (recommandé)
atv record netflix_profil1L'assistant interactif vous permet de choisir les actions, ajouter des pauses, et tester en temps réel.
Option 2 : Éditer manuellement
atv listatv referenceEditez scenarios.json :
{
"netflix_profil1": {
"description": "Lancer Netflix et sélectionner le 1er profil",
"steps": [
{"action": "launch", "app": "netflix"},
{"action": "wait", "seconds": 4},
{"action": "select"}
]
}
}
Exécuter un scénario
atv run netflix_profil1Si vous avez configuré un device par défaut avecatv setup, vous n'avez pas besoin de spécifier-d.
Ajuster le timing
Si ça va trop vite, augmentez le wait ou ajoutez un delay :
{
"netflix_profil1": {
"description": "Lancer Netflix (version lente)",
"steps": [
{"action": "launch", "app": "netflix"},
{"action": "wait", "seconds": 5},
{"action": "down", "delay": 1.0},
{"action": "select"}
]
}
}
Comprendre les paramètres
| Paramètre | Description | Défaut |
|---|---|---|
action | L'action à exécuter (obligatoire) | - |
wait + seconds | Pause fixe en secondes | - |
delay | Pause après l'action | 0.5s |
repeat | Nombre de répétitions | 1 |
Scénarios prêts à l'emploi
Copiez ces scénarios dans votre scenarios.json.
Netflix - Sélectionner un profil
{
"netflix_profil1": {
"description": "Netflix - Premier profil",
"steps": [
{"action": "launch", "app": "netflix"},
{"action": "wait", "seconds": 4},
{"action": "select"}
]
},
"netflix_profil2": {
"description": "Netflix - Deuxième profil",
"steps": [
{"action": "launch", "app": "netflix"},
{"action": "wait", "seconds": 4},
{"action": "right"},
{"action": "select"}
]
}
}
YouTube - Accueil
{
"youtube_home": {
"description": "Ouvrir YouTube sur l'accueil",
"steps": [
{"action": "launch", "app": "youtube"},
{"action": "wait", "seconds": 3},
{"action": "menu"},
{"action": "menu"}
]
}
}
Fermer toutes les apps
{
"close_apps": {
"description": "Fermer les apps en arrière-plan",
"steps": [
{"action": "home_double"},
{"action": "wait", "seconds": 1},
{"action": "swipe_up", "repeat": 5, "delay": 0.3}
]
}
}
Routine du soir
{
"bonne_nuit": {
"description": "Fermer les apps et éteindre",
"steps": [
{"action": "scenario", "name": "close_apps"},
{"action": "wait", "seconds": 1},
{"action": "home"}
]
}
}
L'action scenario permet d'inclure un scénario dans un autre.
Intégration Raccourcis iOS
Déclenchez vos scénarios depuis votre iPhone avec l'app Raccourcis.
1 Lancer le serveur HTTP
Sur votre Mac (laissez le terminal ouvert) :
atv server2 Trouver l'IP de votre Mac
ipconfig getifaddr en0Exemple : 192.168.1.50
3 Tester avec curl
curl http://192.168.1.50:8888/healthcurl http://192.168.1.50:8888/scenarioscurl -X POST "http://192.168.1.50:8888/scenario/netflix_profil1?device=Salon"4 Créer le raccourci iOS
- Ouvrir l'app Raccourcis sur iPhone
- Appuyer sur + (nouveau raccourci)
- Ajouter une action > chercher "Obtenir le contenu de l'URL"
- Configurer :
- URL :
http://192.168.1.50:8888/scenario/netflix_profil1?device=Salon - Appuyer sur Afficher plus
- Méthode :
POST
- URL :
- Renommer le raccourci (ex: "Netflix Salon")
- Optionnel : Ajouter à l'écran d'accueil
5 Utiliser
- Tap sur l'icône de l'écran d'accueil
- Ou dire "Dis Siri, Netflix Salon"
Endpoints disponibles
| Méthode | URL | Description |
|---|---|---|
| GET | /health | Vérifier que le serveur tourne |
| GET | /scenarios | Lister les scénarios |
| POST | /scenario/{nom}?device=Salon | Exécuter un scénario |
| POST | /shutdown | Arrêter le serveur |
Référence des commandes
Utilisez atv --help pour voir toutes les commandes disponibles.
Commandes CLI
| Commande | Description |
|---|---|
atv setup | Assistant de configuration interactif |
atv config | Voir/modifier la configuration |
atv scan | Scanner les Apple TV sur le réseau |
atv test | Tester la connexion |
atv status | Afficher l'état de l'Apple TV |
atv wake | Allumer l'Apple TV |
atv sleep | Éteindre (veille) |
atv launch <app> | Lancer une application |
atv apps | Lister les applications installées |
atv run <scenario> | Exécuter un scénario |
atv list | Lister les scénarios |
atv record <name> | Enregistrer un scénario interactivement |
atv reference | Afficher la référence des actions |
atv server | Lancer le serveur HTTP |
Options globales
| Option | Description |
|---|---|
-d, --device | Nom de l'Apple TV |
--help | Afficher l'aide |
Définissez la variable d'environnementATV_DEVICEou utilisezatv configpour éviter de spécifier-dà chaque fois.
Actions de scénario
Utilisez atv reference pour voir la documentation complète des actions.
| Action | Paramètres | Description |
|---|---|---|
launch | app | Lancer une application |
wait | seconds | Pause fixe |
scenario | name | Exécuter un sous-scénario |
| Navigation | repeat, delay | up/down/left/right/select/menu/home/home_double |
| Swipe | repeat, delay | swipe_up/down/left/right |
| Lecture | delay | play/pause/play_pause |
Dépannage
Aucune Apple TV trouvée
Symptôme : atv scan ne retourne rien.
Solutions :
- Vérifiez que l'Apple TV est allumée
- L'écran doit être actif (pas en veille profonde)
- Essayez d'appuyer sur la télécommande physique d'abord
- Vérifiez le réseau
- Mac et Apple TV doivent être sur le même réseau Wi-Fi
- Certains routeurs isolent les appareils - désactivez cette option
- Vérifiez le pare-feu Mac
- Préférences Système > Sécurité > Pare-feu
- Ajoutez Python aux exceptions
Erreur d'appairage
Symptôme : Le PIN ne fonctionne pas ou l'appairage échoue.
Solutions :
- Assurez-vous d'entrer le code rapidement - Le PIN expire après ~30 secondes
- Supprimez les anciens credentials :
rm credentials.jsonatv setupConnexion impossible depuis iPhone
Symptôme : "Connexion impossible" dans Raccourcis iOS.
Solutions :
- Vérifiez que le serveur tourne :
curl http://localhost:8888/health - Vérifiez l'IP :
ipconfig getifaddr en0 - Testez depuis le Mac avec l'IP externe
- Vérifiez le pare-feu (désactivez temporairement pour tester)
- Vérifiez que iPhone et Mac sont sur le même Wi-Fi
Erreur 405 Method Not Allowed
Symptôme : Le raccourci retourne "405 Method Not Allowed".
Solution : Vous utilisez GET au lieu de POST. Dans le raccourci, changez Méthode de "GET" à "POST".
Fichiers de configuration
| Fichier | Description |
|---|---|
config.json | Configuration (device par défaut) |
credentials.json | Credentials d'appairage (ne pas partager) |
apps.json | Alias des applications |
scenarios.json | Vos scénarios |
config.json
Configuration générale :
{
"default_device": "Salon"
}
Gérez ce fichier avecatv configouatv setup.
apps.json
Alias pour les bundle IDs des applications :
{
"netflix": "com.netflix.Netflix",
"youtube": "com.google.ios.youtube",
"disney": "com.disney.disneyplus",
"prime": "com.amazon.aiv.AIVApp"
}
Utilisez atv apps pour voir les bundle IDs.
Variable d'environnement
Vous pouvez aussi définir le device par défaut via la variable ATV_DEVICE :
export ATV_DEVICE="Salon"