Sommaire
L'essentiel
- Zap pilote la télé directement sur le Wi-Fi, sans compte ni serveur.
- Un pilote par famille de télé (Samsung, LG, Android TV, Roku, Philips, Panasonic, Fire TV), écrit en Swift et en Kotlin.
- L’appairage Samsung a été mesuré sur une vraie télé : délai de 30 secondes, nouvel essai automatique.
- La télé est retrouvée par son adresse MAC quand la box change son adresse, sans nouvelle autorisation.
- Widgets, écran verrouillé et Centre de contrôle répondent tout de suite grâce à des connexions sondées et doublées.
Zap transforme un iPhone ou un téléphone Android en télécommande de télévision. Pas de compte, pas de serveur : chaque appui part du téléphone vers la télé, sur le Wi-Fi de la maison. Derrière un écran simple se cache l’un des projets les plus techniques du portfolio : des protocoles réseau peu documentés, un appairage capricieux et des widgets qui doivent répondre même sur l’écran verrouillé.
Ce que fait Zap, et pour qui
Zap s’adresse à tous ceux qui cherchent la télécommande entre les coussins du canapé. Le téléphone, lui, est toujours à portée de main : autant qu’il serve à monter le volume, changer de source ou ouvrir Netflix.
L’application a d’abord été conçue pour les télévisions Samsung connectées (Tizen). Elle propose onze styles de télécommande : un style Standard et dix télécommandes réelles de Samsung, LG, Philips, Hisense, Sony et TCL, redessinées d’après leurs photos officielles de face (forme, couleurs, place de chaque touche). L’application et les widgets prennent les couleurs du style choisi.



Le parcours de l’utilisateur tient en quatre étapes :
- Recherche : Zap cherche les télés présentes sur le Wi-Fi. L’adresse de la télé peut aussi être saisie à la main.
- Autorisation : à la première connexion, la télé demande d’autoriser le téléphone, ou affiche un code à recopier selon la marque.
- Télécommande : l’écran affiche le style choisi, le nom de la télé et son état (allumée, en veille ou éteinte).
- Au quotidien : les widgets de l’écran d’accueil, de l’écran verrouillé et du Centre de contrôle évitent même d’ouvrir l’application.
Les fonctionnalités
- Onze styles de télécommande, avec un écran de personnalisation.
- Applications de la télé : Zap lit la liste des applications installées sur une télé Samsung et les ouvre d’un geste (Netflix, YouTube, Prime Video, Disney+…).
- Clavier : le clavier du téléphone écrit dans les champs de texte de la télé (recherche, navigateur, identifiants).
- Raccourcis : source, guide TV, liste des chaînes, chaîne précédente, sous-titres, langue audio, avance et retour rapides.
- Plusieurs télés : chaque télé de la maison garde sa propre clé d’autorisation, et l’on passe de l’une à l’autre depuis le haut de l’écran.
- État en direct : allumée, en veille ou éteinte, avec réveil de la télé par le réseau.
- Sur iPhone : widgets d’écran d’accueil en plusieurs tailles, widget « une touche » au choix, croix de direction et volume sur l’écran verrouillé, commandes du Centre de contrôle et activité en direct.
- Sur Android : télécommande dans une notification permanente visible sur l’écran verrouillé, widgets d’écran d’accueil et tuiles des réglages rapides.
- Vie privée : aucun compte, aucune publicité, aucune donnée personnelle collectée.



Le cœur du problème : chaque marque parle sa propre langue
Il n’existe pas de protocole commun pour piloter une télévision. Chaque fabricant a le sien, souvent peu ou pas documenté. Zap a commencé par Samsung, puis le code s’est organisé autour d’une connexion commune et d’un pilote par famille de télé, écrit deux fois : en Swift pour l’iPhone et ses widgets, en Kotlin pour Android.
- Samsung (Tizen) : une connexion WebSocket chiffrée ; après accord sur la télé, celle-ci remet une clé à présenter ensuite à chaque connexion.
- LG (webOS) : WebSocket « SSAP » sur le port 3000, ou 3001 chiffré pour les modèles récents, plus une seconde connexion « pointeur » pour les flèches.
- Android TV et Google TV : protocole « Android TV Remote v2 », messages Protobuf sur TLS, appairage par un code à six caractères affiché sur la télé.
- Roku : protocole HTTP « ECP », sans appairage.
- Philips : API JointSPACE, code à quatre chiffres, puis authentification « Digest ».
- Panasonic : commandes SOAP, chiffrées sur les modèles récents après un code à quatre chiffres.
- Fire TV : interface non documentée par Amazon, en HTTPS, avec un code à quatre chiffres.
Pour que l’interface reste la même partout, l’application ne connaît qu’un seul vocabulaire de touches (les codes Samsung « KEY_… »). Chaque pilote le traduit pour sa marque : un code de touche Android, un bouton du pointeur LG, une commande Roku. Même le texte demande de l’attention : les télés LG et Roku ne savent qu’ajouter ou effacer des caractères, alors Zap efface seulement ce qui a changé depuis le dernier envoi, puis tape la suite.
L’appairage, mesuré sur une vraie télé
La première connexion est le moment le plus délicat : si elle échoue, l’utilisateur abandonne. Sur une télé Samsung réelle, le comportement a été mesuré plutôt que deviné :
- la demande « Autoriser ? » expire 30 secondes après l’ouverture de la connexion ;
- juste après une demande non acceptée, toute nouvelle connexion est refusée aussitôt, pendant un court moment ;
- pendant qu’une demande est affichée, la télé met en attente les autres connexions ;
- un « Autoriser » choisi trop tard est tout de même retenu : la connexion suivante est acceptée sans nouvelle demande.
Zap en tient compte. Si la demande expire, l’application réessaie une fois, une seconde plus tard, avant d’afficher un message lisible. Pendant un appairage (accepter sur la télé, recopier un code), elle patiente jusqu’à trois minutes au lieu d’abandonner au premier délai.
Autre point de sécurité : la télé présente un certificat auto-signé. Zap ne l’accepte que pour l’adresse de la télé enregistrée, jamais de façon générale.
Trouver la télé, puis la retrouver
La recherche interroge toutes les adresses du réseau sur une liste de ports qui signalent une télé : 8001 pour Samsung, 3000 et 3001 pour LG, 6466 et 6467 pour Android TV, 8060 pour Roku, entre autres. Pour aller vite, des centaines de tentatives de connexion partent en même temps. Les télés Android s’annoncent aussi par Bonjour, ce qui donne leur nom. Chaque télé trouvée est ensuite reconnue en interrogeant son interface : nom, modèle, adresse matérielle, état.
Le vrai piège arrive plus tard : la box donne parfois une nouvelle adresse à la télé. Sans précaution, il faudrait l’ajouter à nouveau, et la télé redemanderait une autorisation… avec la télécommande qu’on ne trouve plus. Quand la télé ne répond plus à son adresse, Zap la cherche sur le Wi-Fi, la reconnaît à son adresse MAC ou à son numéro de série, et garde sa clé d’autorisation.
Pour allumer une télé éteinte, Zap envoie un paquet « Wake-on-LAN » construit à partir de l’adresse MAC de la télé, à condition que l’allumage par le réseau soit activé dans ses réglages.
Widgets et écran verrouillé : répondre tout de suite
Un widget n’a d’intérêt que s’il réagit immédiatement. Or un widget iPhone tourne dans un processus séparé, souvent endormi, et la connexion à la télé peut être morte sans le savoir. Plusieurs mécanismes règlent ce problème :
- les télés enregistrées et leurs clés sont partagées entre l’application et les widgets (App Group), et le code des pilotes est le même des deux côtés ;
- une connexion restée sans échange est sondée, avec une réponse en quelques millisecondes, au lieu d’attendre l’échec d’un envoi ;
- une télé Samsung déjà autorisée répond en environ 0,2 seconde ; au-delà de 3 secondes, Zap ouvre une seconde connexion sans fermer la première et garde la plus rapide ;
- sur Android, un service de premier plan garde la connexion ouverte derrière la notification de l’écran verrouillé.


La pile technique
- Interface : React Native et Expo, en TypeScript ; les télécommandes sont dessinées en SVG à partir de la position relative de chaque touche.
- Module natif : un module Expo en Swift (iPhone) et en Kotlin (Android) pour le réseau local, l’appairage et les pilotes de chaque marque.
- Widgets : WidgetKit, commandes du Centre de contrôle et activité en direct sur iPhone ; widgets, notification et tuiles des réglages rapides sur Android.
- Mises à jour : EAS Update, pour livrer des corrections sans repasser par les stores.
Ce que ce projet montre
Zap a été conçu et développé de bout en bout par Ahmed : dessin des onze télécommandes, application iOS et Android, module natif réseau, widgets et activité en direct, page de présentation. Le projet demandait de sortir du confort de React Native : lire des protocoles peu documentés, écrire du Swift et du Kotlin natifs, mesurer le comportement d’un vrai appareil et en tirer des règles fiables. Ces compétences servent à toute application qui doit parler à un appareil du réseau local.
Vous avez une application qui doit piloter un appareil, fonctionner sans serveur ou vivre dans des widgets ? Me contacter pour en parler. La vidéo et toutes les captures de l’application sont sur la page de Zap.
Questions fréquentes
Zap a-t-il besoin d’internet ou d’un compte ?
Non. Zap parle directement à la télé sur le Wi-Fi de la maison. Il n’y a aucun compte, et aucune touche ne passe par un serveur.
Comment l’application communique-t-elle avec la télé ?
Avec le protocole réseau local de chaque fabricant, dans un module natif écrit en Swift et en Kotlin. Après l’autorisation donnée sur la télé, la clé remise par la télé est gardée sur le téléphone.
Pouvez-vous développer une application qui pilote un appareil du réseau local ?
Oui, c’est le cœur de Zap : recherche sur le Wi-Fi, appairage, connexion fiable et widgets. Décrivez-moi l’appareil et son protocole via le formulaire de contact.