Connexion
Pour récupérer votre compte, veuillez saisir votre adresse email. Vous allez recevoir un email contenant une adresse pour récupérer votre compte.
Inscription
En vous inscrivant, vous acceptez les conditions d'utilisation du site et de nous vendre votre âme pour un euro symbolique. Amusez vous, mais pliez vous à la charte.

Un Rédacteur Factornews vous demande :

 
TEST

Les expériences à la con du week-end : épisode 17 - La Razer Base Station V3 Chroma... sur Mac

billou95 par billou95,  email  @billou_95
Supports : PC / Mac
Il y a un peu plus d'un mois, alors que j'arpentais les allées business de la Gamescom avec mes deux camarades de salon, je me suis arrêté chez Razer pour découvrir un produit qui a immédiatement fait tilt dans mon petit coeur de bidouilleur qui possède plein de trucs connectés dans son appartement, la Base Station V3 Chroma. Et si vous avez suivi nos pérégrinations en audio ou à l'écrit, vous avez déjà une petite idée de ce qui m'intéresse dans ce produit et de ce que j'imaginais faire avec, puisqu'il s'agit d'un support "connecté" pour casque audio. L'heure du test est enfin arrivée, et je me suis dit que vu que j'avais envie de voir jusqu'où la bidouille allait me mener, une petite expérience à la con du week-end serait la bienvenue.
Test réalisé sur un matériel fourni par le constructeur

Mais alors finalement, ça ressemble à quoi cette Base Station V3 Chroma ? Après l'assemblage de la base et de son mât à l'aide des deux vis fournies, on se retrouve avec un support pour casque tout bête, posé sur une base antidérapante de 150 mm. À l'arrière, on dispose d'un port USB-C pour la connexion à un PC ou un Mac, de deux ports USB-A 3.1 sur un hub intégré 5 Gb/s et à l'avant d'une bande LED verticale à douze zones d’éclairage individuelles compatibles avec la "norme" Chroma RGB de Razer.

Enfin, la base intègre un DSP 7.1 qui permet d'activer un son surround simulé sur n'importe quel casque. Mais ce qui le différencie vraiment de son prédécesseur, c'est son détecteur d'état du casque, via le chapeau posé sur le mât de la base qui vient appuyer sur ce qui nous a tout l'air d'être une touche de clavier insérée dans le tube. Ainsi, la base repère les états, posé ou retiré, puis les transmet au système. Le tout passe évidemment par l'application maison Razer Synapse qui se charge de piloter ce système de détection ainsi que les LED.

À voir sur la photo, l'espace entre le mât et le chapeau qui vient pousser un switch mécanique lorsqu'on pose le casque
 
Razer vend ce système comme permettant des automatisations, comme par exemple diffuser certaines couleurs sur la Chroma RGB de la base, activer un profil de jeu particulier sur Synapse puis lancer un jeu lorsqu'on retire le casque de la base. Sur le papier, la liste des fonctionnalités listées par le fabricant est la suivante :
  • activer un profil Synapse personnalisé (qui permet de configurer automatiquement la précision ou la configuration des boutons sur une souris Naga, des contrôles sur un clavier Huntsman, etc.)
  • changer les couleurs de la Chroma RGB (sur la base et/ou tout autre périphérique Razer compatible et configuré sur Synapse)
  • configurer des macros clavier (sur un périphérique Razer compatible et configuré sur Synapse)
  • basculer l'entrée audio utilisée
  • lancer un jeu
Quelques fonctions rigolotes, mais quand même un peu trop liées à l'écosystème Razer. Je m'attendais à pouvoir pousser un peu les automatisations, pour par exemple contrôler mes éclairages Philips Hue, couper la musique en cours, etc. Qu'à cela ne tienne, je me suis tout de même lancé dans l'aventure pour voir si je ne pouvais pas tordre les fonctionnalités à mon avantage. J'installe Synapse pour macOS avant de brancher la base sur mon Mac. Et là, c'est le drame.
 
Circulez, y'a rien à voir sur Mac

Le constat est sans appel : comme à peu près 90 % du catalogue Razer, la Base Station V3 Chroma n'est pas reconnue par l'application Synapse pour Mac. Pire encore, alors que la V2 comportait encore une compatibilité Apple sur sa fiche produit, elle a carrément disparu de la V3. Bon, ça commence mal cette histoire. Pourtant, j'ai de l'espoir, car lorsque j'ai branché le périphérique, il a immédiatement été détecté comme un clavier par macOS. Malgré tout, la configuration s'est arrêtée là, l'OS ne sachant pas identifier son layout, et pour cause.

Mais ça m'a permis de me rassurer sur deux points. Le premier, c'est que mon intuition initiale sur le fonctionnement du chapeau poussoir de la base était bonne, il y a bien un switch derrière le mécanisme. Le second, c'est que si macOS a "vu" un clavier là-dedans, je pourrais peut-être tirer quelque chose de la base en passant par la case rétro-ingénierie. Dans mon boulot, j'adore bidouiller des trucs et me lancer dans des projets bizarres. J'ai par exemple créé un robot de test de portiques d'embarquement à grand renfort de Python, OpenCV et PySerial, ou conçu une stack applicative interfacée avec une appli en serverless et hébergée sur des vieilles bécanes tournant 24/7 sous Windows XP Embedded, avec tout ce que ça comporte de galères.
 
Ce genre de défis, c'est mon dada au quotidien et je vois ici un nouveau terrain de jeu. Je me suis donc d'abord attaqué au diagnostic du périphérique. Pour ça, j'ai utilisé la bibliothèque magique hid pour Python, qui se base sur hidapi et qui permet d'interroger le système sur ses périphériques HID (claviers, souris et tout périphérique d'interface humain-machine branché en USB). Une fois la liste des périphériques affichée, je me suis rendu compte que la Razer Base Station V3 Chroma apparaissait en clair dans le système, et ce sans pilote spécifique installé !

À partir de là, j'ai récupéré ses VID (Vendor ID) et PID (Product ID) et j'ai bricolé un script pour rester en écoute sur le périphérique, puis j'ai manuellement posé et retiré le casque plusieurs fois pour identifier les trames de données qui transitaient sur le port USB et isoler des patterns. Quelques minutes plus tard, j'étais capable d'afficher deux messages dans mon script Python lorsque je posais ou retirais mon casque. Pour la partie Chroma RGD, là j'ai joué les fainéants, car plusieurs projets GitHub comme razer-macos ont déjà "reverse-engineeré" toute cette partie-là, qui est commune à tous les périphériques de la marque. Ouf !

 
Et puis de toute façon, vous le savez si vous suivez mes tests matos, faire mumuse avec les lumières n'était pas ma priorité. Bref, avec ce premier proof of concept en place, j'avais déjà finalement tout le boulot le plus compliqué de fait. Il "restait juste" à faire une belle application macOS qui viendrait se loger dans la barre des menus et permettrait de lancer des actions au retrait ou à la pose du casque. Et pour cela, j'ai vite opté pour du vibe coding, pour plusieurs raisons. D'abord, ça fait très longtemps que j'avais envie de me lancer dans un petit projet IA, mais je m'étais toujours dit qu'il fallait que je trouve quelque chose d'original à faire, plutôt que de reproduire l'existant. Et puis je n'ai aucune notion de Swift ou autre langage orienté Apple. Enfin, et c'est aussi le but de cet article, je ne voulais pas passer plus d'une journée de taf, soit huit heures, sur ce programme, mais plutôt voir ce que je pouvais faire en un week-end seulement. Je fais donc bouffer à l'IA une belle spécification fonctionnelle et les indications sur le périphérique, les données techniques que j'avais extraites de mon POC, etc.
 
Je vous passe les détails et les allers-retours avec l'IA lors des problèmes au build de l'application, les hallucinations et une UI en sortie parfois douteuse, mais je suis assez rapidement arrivé à faire une première itération d'application vibe codée en Swift, proposant un menu Actions simples qui permettait d'effectuer plusieurs actions lorsqu'elle détecte que le casque a été retiré ou posé sur la base. Et ce sans toucher au firmware car je ne souhaitais pas risquer de briquer le périphérique pendant mon bricolage. Mieux encore, cette mouture allait déjà plus loin que ce que proposait Synapse, le tout en utilisant strictement les API système offertes par macOS et sans dépendre de librairies tierces :
  • lancer ou fermer une application (ou un jeu)
  • changer les couleurs de la Chroma RGB
  • basculer l'entrée et/ou la sortie audio utilisée
  • ajuster le volume sonore
  • ouvrir un lien Internet
  • arrêter la musique en cours (sur un lecteur audio ou directement dans le navigateur)
  • afficher une notification système personnalisée
  • suspendre l'activité (mettre le Mac en veille)


Et pour le fun, quelques fonctionnalités geek qui me serviraient pour me connecter à ma maison connectée :
  • lancer une commande shell
  • exécuter un AppleScript
  • appeler n'importe quelle API (avec ou sans authentification/payload)
Avec un panel d'actions pareil, j'avais déjà de quoi m'amuser. Par exemple, en me connectant à mon compte IFTTT, j'aurais même pu aller taper sur Google Home et jouer avec mes éclairages Hue, ma télé Android TV et autres (avec un peu d'huile de coude). Seulement voilà, un petit truc me triturait l'esprit. Razer parle d'automatisation dans sa fiche produit, mais dans les faits, ce ne sont que des actions liées entre elles. Et si on allait plus loin pour proposer de véritables automatisations sous conditions ? Deux heures de vibe coding plus tard, j'ajoutais un menu Automatisations qui reprenait les déclencheurs (casque retiré/posé) et la liste d'actions ci-dessus, mais rajoutait une ou plusieurs conditions obligatoires pour l'exécution de ces actions :
  • si telle ou telle application est ouverte/fermée
  • si le volume est supérieur/inférieur à telle valeur
  • si la sortie ou l'entrée audio correspond à tel ou tel périphérique
  • si un périphérique particulier est connecté à l'un des ports USB du hub de la base
  • si tel ou tel port USB du hub de la base est utilisé
  • avant ou après le lever/coucher du soleil
  • avant ou après une heure précise
Avec ça, je décuplais les possibilités de mon application. Oh et oui, j'ai également réussi à isoler les deux ports USB du hub de la base (ça n'était pas une mince affaire à cause de leurs ID) et les périphériques branchés dessus. Ce qui me permettait de configurer des automatisations rigolotes comme "si j'ai fini ma journée de travail après 18h00, que Microsoft Teams est ouvert et que je repose le casque sur la base, alors tu bascules sur la sortie audio de mon écran et tu ouvres le site de Factor dans mon navigateur".

Une petite automatisation "Factor en fin de journée"

Quelques heures de bidouille plus tard, j'ai même ajouté des statistiques, un mode debug qui me permet de simuler les changements d'état du casque, une journalisation complète et surtout une API interne à l'application. Grâce à ça, les données sur la base sont exposées à la demande (état du casque retiré ou posé, date de dernier changement d'état, état des périphériques branchés sur les ports USB), ce qui permet de l'interfacer directement avec un Home Assistant ou autre logiciel tiers et ainsi d'en faire un VRAI produit connecté.
 
Alors certes, tout n'est pas parfait, mais en moins de huit heures, j'ai quelque chose de non seulement fonctionnel, mais exploitable et stable, car le programme tourne en 24/7 sur mon Mac depuis déjà quelques jours. Évidemment, vibe coding oblige, toute la passe de QA a été zappée (tests aux limites, rétrocompatibilité avec les futurs OS). Subsistent quelques petits bugs comme la gestion de la Chroma RGB qui peut encore être améliorée, une interface qui elle aussi mériterait un petit coup de polish, mais le défi est réussi avec une application qui pèse moins de 3 Mo au sortir de cette expérience à la con du week-end. Et puis de toute manière, je n'avais pas envie d'en faire une version commerciale pour amasser des montagnes de pognon dans les caisses de Factor. Pour ça, il y a notre Tipeee et on vous en remercie.

Si je souhaitais y passer plus de temps, j'intégrerais probablement la gestion de l'énergie sur les ports USB du hub de la base pour par exemple les endormir via une automatisation. Je devrais également trouver le moyen de catcher les notifications d'applications tierces pour, par exemple, changer la Chroma RGB lorsque je reçois un appel sur Teams ou sur WhatsApp.

Exemple de retour de l'appel à l'API interne

Je vous laisse jeter un oeil à mes captures en dessous de l'article pour voir à quoi ressemble l'application plus en détail.
Et pour en revenir au matos en lui-même et à ses fonctionnalités, car c'est à la base la raison pour laquelle je m'étais lancé dans son test, il fonctionne parfaitement et correspond totalement à mes attentes (lorsqu'on a le logiciel et les fonctionnalités pour l'exploiter, coucou les ingés de Razer). Le design est comme toujours impeccable avec du métal brossé et des patins de qualité. J'émets quand même quelques doutes sur la durée de vie du mécanisme en dessous du chapeau. C'est d'ailleurs précisé dans l'emballage via un gros trigger warning que Razer ne sera pas responsable de la casse si l'on s'amuse à démonter et remonter le chapeau de la base régulièrement. Pas glop pour du matériel vendu tout de même 90 euros. À part ça, rien à redire, si ce n'est l'absence de recharge QI sur la base, ce qui me semble bien dommage, tant elle prend de place sur le bureau. Peu importe le casque, il y a forcément un peu de place dessous pour y loger un smartphone à recharger. Razer en garde sûrement sous le capot pour une V4 dans deux ans.

Pour finir, ce qui m'interroge le plus en sortant de ce "test", c'est l'absence de support du machin sur Synapse pour Mac et globalement la pauvreté du support des autres périphériques Razer sur les ordinateurs d'Apple, alors qu'il m'a fallu un peu moins de huit heures pour sortir une application plus efficace que la leur, et cela sans leur documentation interne...

SCREENSHOTS

Rechercher sur Factornews