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

1 Installation

git clone https://github.com/srimko/apple-tv-controller.git
cd apple-tv-controller
pip install -e .

2 Configuration assistée

atv setup

L'assistant interactif va :

  1. Scanner les Apple TV sur le réseau
  2. Vous faire choisir votre Apple TV
  3. Lancer l'appairage (entrez le code PIN affiché sur la TV)
  4. Sauvegarder le device par défaut
Pas de résultat ? Voir Dépannage > Aucune Apple TV trouvée

3 Tester

atv test
atv status
Vous ê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_profil1

L'assistant interactif vous permet de choisir les actions, ajouter des pauses, et tester en temps réel.

Option 2 : Éditer manuellement

atv list
atv reference

Editez 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_profil1
Si vous avez configuré un device par défaut avec atv 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ètreDescriptionDéfaut
actionL'action à exécuter (obligatoire)-
wait + secondsPause fixe en secondes-
delayPause après l'action0.5s
repeatNombre de répétitions1

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 server

2 Trouver l'IP de votre Mac

ipconfig getifaddr en0

Exemple : 192.168.1.50

3 Tester avec curl

curl http://192.168.1.50:8888/health
curl http://192.168.1.50:8888/scenarios
curl -X POST "http://192.168.1.50:8888/scenario/netflix_profil1?device=Salon"

4 Créer le raccourci iOS

  1. Ouvrir l'app Raccourcis sur iPhone
  2. Appuyer sur + (nouveau raccourci)
  3. Ajouter une action > chercher "Obtenir le contenu de l'URL"
  4. Configurer :
    • URL : http://192.168.1.50:8888/scenario/netflix_profil1?device=Salon
    • Appuyer sur Afficher plus
    • Méthode : POST
  5. Renommer le raccourci (ex: "Netflix Salon")
  6. Optionnel : Ajouter à l'écran d'accueil

5 Utiliser

Endpoints disponibles

MéthodeURLDescription
GET/healthVérifier que le serveur tourne
GET/scenariosLister les scénarios
POST/scenario/{nom}?device=SalonExécuter un scénario
POST/shutdownArrêter le serveur

Référence des commandes

Utilisez atv --help pour voir toutes les commandes disponibles.

Commandes CLI

CommandeDescription
atv setupAssistant de configuration interactif
atv configVoir/modifier la configuration
atv scanScanner les Apple TV sur le réseau
atv testTester la connexion
atv statusAfficher l'état de l'Apple TV
atv wakeAllumer l'Apple TV
atv sleepÉteindre (veille)
atv launch <app>Lancer une application
atv appsLister les applications installées
atv run <scenario>Exécuter un scénario
atv listLister les scénarios
atv record <name>Enregistrer un scénario interactivement
atv referenceAfficher la référence des actions
atv serverLancer le serveur HTTP

Options globales

OptionDescription
-d, --deviceNom de l'Apple TV
--helpAfficher l'aide
Définissez la variable d'environnement ATV_DEVICE ou utilisez atv config pour éviter de spécifier -d à chaque fois.

Actions de scénario

Utilisez atv reference pour voir la documentation complète des actions.

ActionParamètresDescription
launchappLancer une application
waitsecondsPause fixe
scenarionameExécuter un sous-scénario
Navigationrepeat, delayup/down/left/right/select/menu/home/home_double
Swiperepeat, delayswipe_up/down/left/right
Lecturedelayplay/pause/play_pause

Dépannage

Aucune Apple TV trouvée

Symptôme : atv scan ne retourne rien.

Solutions :

  1. 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
  2. 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
  3. 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 :

  1. Assurez-vous d'entrer le code rapidement - Le PIN expire après ~30 secondes
  2. Supprimez les anciens credentials :
rm credentials.json
atv setup

Connexion impossible depuis iPhone

Symptôme : "Connexion impossible" dans Raccourcis iOS.

Solutions :

  1. Vérifiez que le serveur tourne : curl http://localhost:8888/health
  2. Vérifiez l'IP : ipconfig getifaddr en0
  3. Testez depuis le Mac avec l'IP externe
  4. Vérifiez le pare-feu (désactivez temporairement pour tester)
  5. 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

FichierDescription
config.jsonConfiguration (device par défaut)
credentials.jsonCredentials d'appairage (ne pas partager)
apps.jsonAlias des applications
scenarios.jsonVos scénarios

config.json

Configuration générale :

{
  "default_device": "Salon"
}
Gérez ce fichier avec atv config ou atv 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"