
En coulisse
Tasker : l'application qui fait vraiment tout
par Dominik Bärlocher
Le lecteur Kurt demande : comment lire de la musique avec Tasker dans la voiture ? Ce qui a commencé comme une petite expérience inoffensive a conduit à un maelström de technologie old school et de Bleeding Edge.
Mail du lecteur Kurt : il ne souhaite plus devoir à chaque fois activer manuellement le lecteur audio de sa tablette auto. Sa routine en voiture est toujours la même : monter en voiture, démarrer, activer Poweramp sur son FCC Launcher, partir.
Mon objectif est que Tasker démarre Poweramp en même temps que la radio s'allume.
Le problème est facile à résoudre. De moitié. Car là où les applis Android fonctionnent toujours de la même manière, l'industrie automobile ne s'est pas encore mise d'accord sur les normes. Les voitures construites avant 2016 n'ont pas encore installé d'interface pour Android Auto. Les voitures plus récentes ont leur propre logiciel, qui doit d'abord être configuré pour passer à Android Auto.
Si vous travaillez avec des technologies intelligentes importées de Chine, il y a de fortes chances que vous n'ayez pas affaire à Android Auto, mais à FCC Launcher. Il y a des raisons légales à cela. En Chine, Google et ses services sont soit censurés, soit interdits. C'est pourquoi vous avez des trucs comme la tablette chinoise de Kurt , qui remplace son autoradio. Ou un téléphone portable. Ou une tablette. En d'autres termes, il y a ici une myriade de variables qui ne s'appliquent pas exactement à vos appareils intelligents ou à votre voiture.
Mais Android est et restera toujours Android. Je laisse donc de côté les particularités des voitures et des launchers russes pour me concentrer sur l'automatisation avec une appli : Tasker.
Si vous me posez la question « Est-ce que Tasker peut... », je vous coupe après ces quelques mots et vous réponds « Oui ». En gros, Tasker peut tout faire. La question est généralement « Comment ? ». Car bien que Tasker offre de nombreuses options prêtes à l'emploi, il faut souvent agir avec des interfaces de programmes étrangères, appelées API.
Tasker travaille toujours selon le même schéma : si ..., alors... Ou en langage de programmation : if/then. En d'autres termes, si l'événement logiciel A se produit, alors Tasker exécutera l'automatisme B.
Tasker est donc le point clé du présent projet. Côté matériel, je teste avec les équipements suivants :
Côté des logiciels, j'utilise les applis suivantes. J'ai acheté les applications payantes et travaille avec ces versions :
Après avoir terminé le travail de programmation, je teste les réglages sur deux véhicules :
Les véhicules sont sélectionnés de manière à ce qu'ils soient le plus éloignés possible les uns des autres au niveau logiciel. Avec la Ford, je peux brancher la tablette ou le smartphone et travailler avec Android Auto. Avec la Dodge, je dois me battre contre UConnect. Le logiciel peut aussi faire un certain nombre de choses, mais n'a pas été mis à jour depuis des années et les interfaces modernes lui manquent.
Dans ce projet, je vais automatiser la lecture de musique via Poweramp ou Spotify lors du démarrage dans chaque voiture à peu près moderne dotée d'un système audio au moins semi-intelligent. Vous avez besoin d'une voiture qui peut soit diffuser de la musique depuis votre téléphone via Bluetooth, soit accéder à Android Auto avec un câble.
Dans ce projet, je prendrai également en compte la sécurité routière. Cela est particulièrement important pour la connexion Bluetooth entre la voiture et l'appareil intelligent. L'idée est claire. L'interaction avec le téléphone ou la tablette doit être réduite le plus possible.
Avant de commencer, il faut d'abord comprendre. Nous devons notamment déchiffrer la magie noire du logiciel automobile et développer une compréhension basique de la mécanique automobile. Car dans le contexte du fonctionnement de Tasker, nous devons trouver le profil, c'est-à-dire définir le « if » dans « if/then ». Pour cela, nous devons déterminer ce qui va exactement se passer avec la voiture, car le « if » vient de cette dernière.
Il est possible d'équiper une vieille voiture dotée d'une clé de contact d'un système audio moderne. Lorsque le moteur est arrêté, aucun système n'est alimenté. La montre est peut-être numérique, alors il y a une petite batterie. Mais même pour une montre analogique : batterie.
Lorsque vous tournez la clé de contact, vous arrivez d'abord sur ACC. Ce mode permet d'alimenter certains appareils électroniques grâce à la batterie. Ce mode est suivi par « On », où le moteur est allumé. Entre ACC et ON, le flux de courant vers le système audio est à nouveau interrompu, car le courant est utilisé pour démarrer le moteur.
La Dodge Charger fonctionne différemment. Mais l'allumage et l'interaction du moteur avec l'électronique de bord fonctionnent exactement de la même manière. Pas de courant lorsque le moteur est éteint, courant et démarrage du moteur lorsque le contact est établi.
Cependant, je ne peux pas contrôler le système audio par le câble. Du moins, pas d'une manière utile. Le moyen le plus judicieux et le plus simple de travailler est le Bluetooth. Dès que l'ordinateur de bord de la voiture a démarré, il se connecte à l'appareil intelligent – votre smartphone ou votre tablette – via Bluetooth. Je peux maintenant passer des appels téléphoniques et utiliser la voiture comme une sorte de haut-parleur Bluetooth via une source audio. La différence avec un haut-parleur Bluetooth normal est négligeable.
Quand vous démarrez la Ford, l'ordinateur met le contact. Lorsque le moteur s'arrête, l'ordinateur n'est plus alimenté en courant. Sinon, la batterie se déchargerait en une nuit. Et la bête de 2,8 tonnes ne pourrait aller nulle part le lendemain. Seul un mini-ordinateur qui se souvient essentiellement de l'heure est alimenté.
Après avoir mis le contact et démarré l'ordinateur, je dois allumer manuellement Android Auto sur l'écran. C'est une icône sur l'écran tactile. Une fois que j'ai appuyé sur cette icône, le logiciel du smartphone prend le relais et l'affiche sur l'écran de la voiture.
De ces trois fonctions, nous pouvons faire trois « if ». Si vous voulez faire l'un de ces projets, vous pouvez simplement rechercher le profil et son numéro, comme « Profil n°1 » par exemple, via CTRL/⌘+F.
Tous sont définis sur l'écran « Profiles ». Ce dernier devrait apparaître par défaut lorsque vous démarrez Tasker.
Il est suivi de deux tâches :
Vous pouvez les trouverez dans l'onglet à droite « Profiles ».
Mais tout n'est pas fait avec les « entry tasks » (tâches de démarrage). C'est là qu'entre en jeu l'« exit task » (tâche de fin). Ainsi, après avoir garé la voiture, la musique passe sur le Smart Device avec batterie et continue à jouer.
Les « Profiles » ainsi que les « Tasks » peuvent être modifiés et ne sont pas uniquement destinés à être utilisés dans la voiture. Le profil n°2 fonctionne avec n'importe quel haut-parleur Bluetooth, par exemple.
En termes de flux de travail, il est utile de définir d'abord les « Tasks », puis les « Profiles ». Ce n'est pas une loi, mais après des années de travail avec Spotify, c'est devenu une habitude.
Plus loin dans cet article, Poweramp et ses réglages prendront de l'importance. Dans cet article, j'ai rendu le tout assez simple. J'ai copié environ 60 fichiers MP3 de mon disque dur dans le dossier « Music » du système Android.
Après cela, j'ai mis toutes les chansons dans une playlist que j'ai baptisée « 001 ». Plus tard, dans la mise en place de notre automatisation, ce sera plus simple s'il n'y a pas d'espaces. « Bons titres pour une météo pluvieuse » est moins approprié. En effet, il n'y a pas seulement des espaces dans le nom, mais aussi des caractères spéciaux. Si vous insistez sur le nom de votre playlist, je vous conseille de l'appeler « BonsTitresPour UneMeteoPluvieuse » ou « ChansonsPluie ».
Dans une vieille voiture équipée d'un système audio qui permet de se connecter au smartphone ou à la tablette via USB, on peut régler le profil comme suit : la musique est jouée dès que l'appareil intelligent détecte la présence d'une alimentation électrique.
C'est de loin la version la plus simple d'un « if » dans ce mode d'emploi. Car désormais, nous allons progressivement intégrer davantage de variables et de connaissances programmatiques.
Les Profiles et les Tasks Tasker peuvent être exportés. Vous pouvez importer cette syntaxe dans votre application Tasker. Dans Tasker, les étapes ci-dessus ressemblent à ça :
Profile: Poweramp_on (5)
Restore: no
State: Power [ Source:Any ]
Dans un véhicule semi-intelligent, vous pouvez connecter votre smart device au système audio via Bluetooth. Cependant, il manque une intégration complète dans le logiciel du véhicule. Lors de la connexion, le véhicule transmet un identifiant unique, le nom de la connexion Bluetooth avec une adresse Bluetooth au format 00:11:22:33:FF:EE. La Dodge Charger s'identifie comme étant « UConnect ».
Il est possible d'étendre le profil à n'importe quelle connexion Bluetooth, mais cela n'est pas pratique étant donné le grand nombre de dispositifs Bluetooth. Vous ne voulez pas que la musique commence lorsque vous connectez votre Smartwatch au téléphone.
Cela signifie que la musique ne sera diffusée que lorsque vous connecterez votre smartphone à cette voiture. Ce déclencheur ne fonctionne que sur cette Dodge, pas sur sa cousine de la même série. Parce que l'adresse est unique. Dons, si vous souhaitez obtenir la même fonction pour une autre voiture, vous devez dupliquer le profil et ajuster le nom de la connexion.
Profile: Poweramp_bt_direct (18)
Restore: no
State: BT Connected [ Name:SRS-XB31 Address:00:11:22:33:FF:EE ]
Dans une voiture intelligente, Android Auto ne s'activera pas tant que vous n'aurez pas dit à l'appareil intelligent ou à la voiture de s'activer. Dans la Ford F-150, c'est une icône sur l'écran. Dans d'autres voitures, la commande peut venir du téléphone portable.
Android Auto n'est pas si facile à identifier sur le smartphone ou la tablette. Parce que l'application n'est pas vraiment une appli d'un point de vue technologique. En gros, elle ne fait que modifier l'aperçu à l'écran pour qu'elle soit optimisée pour une utilisation en voiture. Mais dès que quelque chose change sur un système Android, quelque chose est ajusté en arrière-plan. Dans le cas d'Android Auto, il s'agit d'une variable.
%UIMODE
Cette variable est associée à la valeur « car » (voiture) si Android Auto est actif. Et c'est exactement ce que nous pouvons intercepter dans le Profile de Tasker.
Voilà ce que Tasker vous sort :
Profile: Poweramp_androidAuto (24)
Restore: no
State: Variable Value [ %UIMODE ~, car ]
FCC Launcher et Android Auto sont deux applis. Les icônes sont très similaires, mais la FCC peut se passer d'Android Auto et vice versa. Par conséquent, si un setup fonctionne sur le FCC Launcher – salut Kurt ! – alors il faut intercepter l'appli séparément. C'est même un peu plus facile que de surveiller les variables d'Android Auto : FCC Launcher n'est pas intégré à Android aussi profondément. Il se trouve en surface. Retour à l'écran Profiles :
Profile: Poweramp_fcc (25)
Restore: no
Application: FCC Launcher
Nous avons maintenant abordé les variantes probablement les plus utilisées du démarrage d'une voiture. Et si vous avez une autre application ou une variable à laquelle Tasker doit faire attention, vous savez comment faire. Ce n'est pas si difficile.
Poweramp possède une interface de programme ouverte, appelée API. Nous pouvons directement adresser cette API et envoyer des ordres à l'application sans avoir à faire appel à l'interface utilisateur graphique. Dans FCC Launcher, vous verrez l'album dans un grand cercle, mais vous n'aurez pas à interagir directement avec le logiciel.
Cependant, nous ajoutons encore une modification : une période d'attente. Cette dernière est nécessaire, car une connexion Bluetooth prend un certain temps pour faire ses paramètres de sortie audio. Le temps d'attente est également utile avec une connexion câblée, car il permet de sauter le faux démarrage du système audio en mode ACC pendant le démarrage normal du moteur et la musique ne commencera pas à jouer tant que le moteur ne sera pas en marche.
Pour cette tâche, nous passons à l'écran des tâches dans Tasker. Et c'est là qu'on commence vraiment à s'amuser :
Ici, une explication s'impose. Un intent est un ordre que nous envoyons directement à l'API Poweramp. C'est assez complexe à décrire. D'où un petit interlude.
Poweramp vous permet d'envoyer des ordres à l'application depuis Tasker. Pour cela, nous devons remplir trois lignes dans l'écran « Send Intent » de Tasker. Vous pouvez ignorer le reste des lignes sur l'écran à l'apparence assez impressionnante. Ou du moins pour ce projet.
Sur la ligne « Action », la première ligne, nous indiquons à Tasker où se trouve l'API et qu'elle doit lui parler. C'est pourquoi nous y inscrivons la chose suivante :
com.maxmpz.audioplayer.API_COMMAND
Avec « com.maxmpz.audioplayer », nous abordons l'application Poweramp ; c'est le nom interne du système de Poweramp. « API_COMMAND » est la partie qui dit à Poweramp : « Maintenant vient un ordre que tu peux exécuter ».
Dans la ligne « Data », nous devons indiquer à Poweramp que l'application doit fonctionner avec la playlist. Nous l'avons appelé « 001 ». Nous écrivons donc :
content://com.maxmpz.audioplayer.data/playlists/001/files
Si la playlist s'appelait maintenant « HalloKurt », alors on écrirait
content://com.maxmpz.audioplayer.data/playlists/HalloKurt/files
Ainsi, nous indiquons à Poweramp que nous voulons parler à une playlist et à ses fichiers dans Poweramp. Tasker sait maintenant que nous voulons parler à Poweramp et Poweramp sait que nous voulons parler à la playlist « 001 » et à ses fichiers.
De là, nous pouvons directement donner des ordres à la playlist. Maxim Petrov, le seul développeur de Poweramp, a rendu les commandes publiques.
1 Play/Pause
2 Pause
3 Resume
4 Next
5 Previous
6 Next Category
7 Previous Category
8 Repeat
9 Shuffle
10 Start Fast Forward
11 End Fast Forward
12 Begin Rewind
13 End Rewind
14 Stop
15 Seek
16 Request Current Track Position
17 Sleep Timer
20 Open and Play
50 Set Equalizer Preset
51 Set Equalizer nach String
52 Set Equalizer Band
53 Set Equalizer Enabled
100 Stop Service
200 Minimum Time in between Seeks
Comme nous ne voulons pas que la même chanson soit jouée à chaque fois que la musique se met en marche, nous activons le shuffle (la lecture aléatoire). Sur la première ligne avec la mention « Extra », nous inscrivons :
cmd:9
Avec 4a, Poweramp mixe les 60 chansons, mais ne les joue pas encore. Pour ce faire, dans le deuxième champ « Extra » nous inscrivons :
cmd:20
Tasker a besoin d'un élément d'information supplémentaire : il doit encore envoyer l'intent au service. Dans le champ « Target », plus bas sur l'écran, vous devez sélectionner l'option « Service ».
Et voilà. Cliquez sur la flèche retour jusqu'à ce que vous soyez de nouveau sur l'écran « Tasks ».
Dans la syntaxe Poweramp, voilà à quoi cela ressemble:
Poweramp_play (4)
A1: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A2: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data:content://com.maxmpz.audioplayer.data/playlists/001/files Extra:cmd:9 Extra:cmd:20 Extra: Package: Class: Target:Service ]
Avec cet Intent, le smart device joue la playlist de manière aléatoire. En combinaison avec l'ordre Wait ci-dessus, la musique démarre au bout de cinq secondes.
Contrairement à Poweramp, nous pouvons communiquer avec Spotify beaucoup plus facilement.
Voilà à quoi cela ressemble dans Tasker :
Spotify_play (22)
A1: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A2: Media Control [ Cmd:Play [Simulated Only] Simulate Media Button:On Package/App Name:Spotify Use Notification If Available:Off ]
Si vous travaillez souvent avec Bluetooth Audio, vous connaissez certainement le problème du volume. Les appareils Bluetooth ont leur propre contrôle du volume. Les écouteurs Bluetooth ont leur propre contrôle de volume, qui dans le pire des cas est indépendant du contrôle de volume du smartphone. Le téléphone peut alors émettre un volume audio 5, mais l'autoradio devra être réglé à plein volume. Sinon, vous n'entendez rien. De plus, certains autoradios ont tendance, à très haut volume d'émettre une sorte de grésillement en jouant la musique.
En circulation, c'est au mieux pénible et, dans le pire des cas, dangereux. Et bidouiller son téléphone en conduisant est interdit. J'ai donc créé un task qui permet de régler le volume média du téléphone sur le volume maximum après un déclencheur. Ainsi, nous pouvons contrôler le volume de la musique sur la console de la voiture.
Sur l'écran Tasks :
Dans l'exits task, si vous choisissez la version Bluetooth avec toutes ces fonctions, je créerais une sous-tâche de volume média qui ramènerait le volume à environ 5.
Poweramp_play_bt (16)
A1: If [ %BtConnected ~ 1 ]
A2: Wait [ MS:0 Seconds:5 Minutes:0 Hours:0 Days:0 ]
A3: Media Volume [ Level:15 Display:Off Sound:Off ]
A4: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data:content://com.maxmpz.audioplayer.data/playlists/001/files Extra:cmd:9 Extra:cmd:20 Extra: Package: Class: Target:Service ]
Maintenant, nous avons terminé la partie lecture. Il nous reste encore l'exit task à faire. Il est important que la musique s'arrête une fois l'alimentation coupée, que le système Android Auto se désactive ou que la connexion Bluetooth s'interrompe. Il est possible que Poweramp ou Spotify ou toute autre application décide de continuer à jouer de la musique à partir du téléphone ou de la tablette. Nous pouvons éviter cela grâce à l'exit task.
Dans l'écran Tasks, nous créons une nouvelle tâche portant le nom « poweramp_kill ».
Poweramp_kill (8)
A1: Send Intent [ Action:com.maxmpz.audioplayer.API_COMMAND Cat:None Mime Type: Data: Extra:cmd:2 Extra: Extra: Package: Class: Target:Service ]
Spotify peut être fermée de la même manière que l'appli est ouverte. En simulant un clic sur un bouton. Nous le faisons dans le task « spotify_kill »
Spotify_kill (28)
A1: Media Control [ Cmd:Stop Simulate Media Button:On Package/App Name:Spotify Use Notification If Available:Off ]
Après avoir défini les tasks, nous pouvons les combiner à souhait. C'est assez rapide. Dans l'écran « Profiles », vous définissez votre « if ». Donc « si le Bluetooth est connecté » ou « si Android Auto est actif » et ajoutez ensuite un task.
Voilà. Assurez-vous que le profil soit bien actif et il ne vous reste plus qu'à monter en voiture et tout fonctionne parfaitement. Attention, si vous travaillez avec Spotify, la tablette ou le téléphone doivent être en ligne. Sinon, ça ne sert à rien.
La complexité de ce projet n'est pas nécessairement liée au fait de jouer de la musique, mais à la reconnaissance correcte des facteurs environnementaux que nous pouvons et devons prendre en compte. C'est ce que j'aime dans le travail avec Tasker. Après l'e-mail de Kurt, je me suis dit « facile, c'est fait en dix minutes », mais j'ai finalement eu besoin de quelques heures. J'ai passé une grande partie du temps à analyser et à questionner les processus mécaniques d'une voiture. Ainsi, le simple démarrage du véhicule est devenu un processus technologiquement complexe. Bien que les connaissances à ce sujet soient complètement inutiles dans la plupart des cas, je comprends mieux la vie quotidienne.
Même si le projet peut sembler écrasant et infiniment complexe au début, une solide recherche préalable permet finalement de simplifier les choses. Grâce à la variété des fonctions des Tasker, nous pouvons intercepter ou manipuler à peu près n'importe quoi. C'est passionnant, et simplifie grandement notre vie en fin de compte.
N'oublions pas l'importance des API et d'une bonne documentation. Il est beaucoup plus facile d'interagir avec Poweramp qu'avec Spotify. Les commandes complexes comme la lecture aléatoire et ensuite la lecture peuvent être gérées facilement alors que l'interaction avec Spotify ne permet que de lire/mettre sur pause.
En fin de compte, j'espère avoir créé des solutions pratiques pour votre cas de figure. Le problème de Kurt est certainement résolu. Et même si votre cas n'est pas couvert : j'espère vous avoir guidé dans la bonne direction.
Tasker a la particularité intéressante de pouvoir exporter les profils au format XML. J'ai déjà téléchargé ces données sur mon compte GitHub. Ils sont donc disponibles gratuitement pour vous. Amusez-vous bien.
Vous pouvez utiliser et modifier vous-même les données. Si vous en faites quelque chose de cool, dites-le-moi.
Vous avez un autre projet où vous êtes bloqué ? Faites-le-moi savoir. Je serais heureux de vous donner un coup de main.
Voilà. Terminé. Amusez-vous bien et keep on hacking.
Journaliste. Auteur. Hackers. Je suis un conteur d'histoires à la recherche de limites, de secrets et de tabous. Je documente le monde noir sur blanc. Non pas parce que je peux, mais parce que je ne peux pas m'en empêcher.