Recycler un vieux smartphone en contrôleur de chauffage connecté

L’an dernier, dans le cadre du dispositif CEE “Coup de Pouce” du gouvernement, j’ai bénéficié de l’installation de thermostats connectés Tiko D-Box entièrement gratuite.
L’objectif est double : faire des économies d’énergie en optimisant la consommation de chauffage pièce par pièce et délester le réseau en cas de pic de consommation en coupant temporairement le chauffage, tout cela de façon transparente.
Comme vous le savez, je suis toujours chaud pour tester de nouveaux gadgets, surtout quand c’est gratuit !

Un thermostat Tiko D-Box relié à un radiateur

Avant l’installation de Tiko, mon chauffage était contrôlé par un système Flash Piloteco constitué d’un module gestionnaire situé dans le tableau électrique et d’un boîtier de commande au mur. Ce système repose sur les fils pilote des radiateurs pour planifier le mode de chauffage et d’activer le délestage grâce à un signal envoyé par le compteur Linky. Quand à la température, elle se réglait sur chaque radiateur.

Hormis la planification un peu hasardeuse à programmer, c’était terriblement simple à utiliser puisqu’il suffisait d’appuyer sur un bouton du boitier Piloteco pour changer le mode de chauffage d’une zone ou de changer la température directement sur le radiateur.

Le système Tiko n’apporte finalement qu’une seule fonctionnalité supplémentaire, à savoir permettre de régler et piloter le chauffage depuis une application mobile, à distance et sans même avoir besoin d’être à la maison, en plus de fournir des informations détaillées sur la consommation.

Capture d'écran de l'application Tiko

L’inconvénient, c’est qu’il faut désormais installer une application mobile sur un smartphone et partager ses identifiants de connexion à quiconque souhaite pouvoir régler le chauffage. De plus, même si les boîtiers D-Box disposent de leur propre connexion 4G, on reste tributaire d’un serveur connecté à Internet.

J’ai donc eu l’idée de ressortir mon vieux smartphone, un iPhone 5S qui dormait dans un tiroir, pour le réinitialiser, y installer l’application Tiko et le fixer au mur à la place du boîtier Piloteco. Ainsi, n’importe qui pourrait régler le chauffage à sa guise sans avoir besoin d’installer quoi que ce soit ni de partager mes identifiants.

Malheureusement, la dernière version d’iOS compatible avec l’iPhone 5S est la 12.5.7 or l’application Tiko requiert iOS 14 au minimum.

L'Application Tiko dans l'App Store sous iOS 12.5.7

J’ai donc décidé de développer ma propre application, avec une interface simplifiée, optimisée pour l’iPhone 5S et qui regrouperait toutes les commandes ainsi que les informations principales sur un seul écran.

Je me suis donc tourné vers la technologie Next.js / React puisque c’est celle que j’utilise au quotidien et l’I.A. Claude Code pour m’assister dans le développement, surtout pour générer la partie interface et régler les bugs de compatibilité avec iOS 12.5.7 car ce n’est pas le plus fun à faire.
Quant à l’API Tiko, faute d’avoir pu trouver une documentation officielle, j’ai fait de l’ingénierie inversée sur la version web de l’application en inspectant les requêtes GraphQL avec mon navigateur.

Sur un seul et même écran, il est désormais possible pour chaque pièce de visualiser et ajuster la température, l’humidité et définir le mode du chauffage.

Capture d'écran de l'application Tiko Control Panel sur iPhone 5S

Le mode sombre a été choisi car la colle de l’écran de l’iPhone a un peu jaunit avec le temps et ce défaut n’est pas visible en mode sombre.

Pour que l’interface fonctionne en plein écran et qu’elle reste ouverte au déverrouillage de l’iPhone, je l’ai simplement ajoutée à l’écran d’accueil d’iOS à partir de Safari.

L’application ne requérant pas beaucoup de ressources pour fonctionner, je l’ai installée sur mon NAS Synology. Un Raspberry Pi aurait aussi très bien pu faire l’affaire.

Script de démarrage de l'application dans DSM

Pour fixer l’iPhone au mur, rien de plus simple : j’ai récupéré mon ancienne coque que j’ai collée à la néoprène sur un cache pour boîtier d’encastrement qu’il suffit d’installer à la place du boîtier Piloteco. Même pas besoin de vis !

Le problème reste maintenant d’alimenter l’iPhone en continu pour éviter qu’il ne se décharge.

J’ai découpé un vieux chargeur USB avec l’espoir de le faire rentrer dans le boîtier d’encastrement mais il s’est avéré trop volumineux.

J’ai donc décidé de l’installer directement dans le tableau électrique, en le branchant au disjoncteur divisionnaire du gestionnaire Piloteco. Ce dernier n’étant plus relié à son boîtier de commande mural, j’ai tout simplement réutilisé ses 2 fils du boîtier pour y acheminer le 5 V jusqu’à l’iPhone.

Tableau électrique avec le chargeur USB

À l’autre bout du fil, pour que l’iPhone se mette en charge, il ne suffit pas de lui fournir du 5 V via le port USB. Il faut également injecter une tension de +2.0 V dans les pins data D+ et D-.
Il est très facile de faire un réducteur de tension de 5 V en 2 V avec 2 résistances : la valeur de la résistance entre GND et D+/D- doit être égale à 2/3 la valeur de celle entre +5V et D+/D- (par exemple 220 ohms et 330 ohms). Comme je n’avais que des 220 ohms en stock, j’ai fait un montage de 220 et 2 × 220 en série ce qui donne une tension de 1.67 V mais qui s’avère au final être suffisant pour mettre l’iPhone en mode charge.

Diagramme du réducteur de tension pour le chargeur USB

Voilà comment réaliser une interface pour chauffage connecté, tactile, moderne et simple à utiliser, en utilisant exclusivement des pièces de récupération.

Montage mural de l'iPhone 5S avec l'application Tiko Control Panel

Si vous souhaitez vous aussi faire cette installation, le code de l’application est sur GitHub : https://github.com/LenweSaralonde/TikoControlPanel

L’application est optimisée pour un usage en plein écran sur un iPhone 5S/SE et un logement de 6 pièces donc vous aurez peut-être besoin de l’adapter selon vos besoins.

N’hésitez pas à me faire part de vos retours !

Créer un contrôleur ARGB avec Arduino Nano

J’ai récemment monté un nouveau PC trouvé dans les poubelles avec des ventilateurs RGB vraiment sympas, mais malheureusement, la carte mère est un peu ancienne et ne dispose pas de header ARGB. Plutôt que d’acheter un contrôleur ARGB tout fait, j’ai décidé d’en fabriquer un moi-même avec un Arduino Nano qui traînait dans mes tiroirs. Voici comment j’ai procédé !

Câblage

L’avantage de l’Arduino Nano, outre sa taille facile à glisser dans un boîtier, est qu’il fonctionne en 5 V. Il est donc facile de l’alimenter avec un câble Molex ou en USB.

Le câblage est très simple, le seul composant additionnel requis est une résistance de 470 ohms. Le pin D2 transmet le signal ARGB aux ventilateurs et le pin D3 est connecté au bouton Reset du PC qui servira plus tard à contrôler l’éclairage. Il est possible d’alimenter l’Arduino en 5V depuis l’alimentation du PC ou bien d’utiliser en câble USB.

Schéma de câblage de l'Arduino Nano

L’Arduino peut être collé facilement avec un adhésif double face. Pour ma part j’ai utilisé une bande Command 3M ce qui permet de le détacher pour le reprogrammer puis le replacer par la suite. L’important est que l’adhésif soit suffisamment épais pour éviter tout court-circuit avec le métal du boitier.

Code

Pour piloter les LEDs, j’ai utilisé la bibliothèque FastLED, qui est une référence pour contrôler des LEDs adressables. Elle supporte une tonne de modèles de LEDs (WS2812B, WS2811, APA102, etc.) et offre des fonctions très pratiques pour créer des animations.

Installation de FastLED

Dans l’IDE Arduino :

  1. Croquis → Inclure une bibliothèque → Gérer les bibliothèques
  2. Rechercher « FastLED »
  3. Installer la dernière version

Exemple simple

Voici un bout de code pour tester que tout fonctionne. Les LEDs devraient toutes s’allumer en blanc. Pensez à modifier le nombre de LED et le type (les WS2812B sont très répandues).

#include <FastLED.h>

#define NUM_LEDS 8         // 8 LEDs
#define DATA_PIN 2         // Pin de données
#define LED_TYPE WS2812B   // Type de LED
#define COLOR_ORDER GRB    // Ordre des couleurs (important !)

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(255);
}

Réglage de la colorimétrie

Ce premier test a été plutôt… décevant. Pour du blanc pur (255, 255, 255), j’ai obtenu une couleur dans les bleu-rose.

Après quelques recherches, j’ai découvert que les LEDs WS2812B bon marché (comme celles de mes ventilateurs) ont souvent des composantes RGB très mal équilibrées.

La solution : FastLED.setCorrection()

FastLED dispose d’une fonction pratique qui permet de corriger automatiquement ces déséquilibres : FastLED.setCorrection(). Il suffit de lui passer une valeur hexadécimale qui compense les défauts de vos LEDs.

FastLED.setCorrection(0xFFD750);  // Ma correction personnalisée

Pour trouver la bonne valeur, il n’y a qu’une seule solution : faire des essais successifs jusqu’à trouver une bonne valeur d’équilibre. Cela demande beaucoup de patience mais le résultat final sera à la hauteur de vos attentes !

Astuce : Déterminer automatiquement le nombre de LEDs

Au début, je n’étais pas sûr du nombre de LEDs de mes ventilateurs. Il n’existe pas de documentation détaillée pour mes ventilateurs donc j’ai créé un petit programme de test qui allume chaque LED une par une :

#include <FastLED.h>

#define MAX_LEDS 255        // Maximum possible
#define DATA_PIN 2
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define DELAY_MS 200        // Délai entre chaque LED (en millisecondes)

CRGB leds[MAX_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, MAX_LEDS);
  FastLED.setBrightness(100);  // Luminosité moyenne pour le test
  FastLED.clear();
  FastLED.show();
}

void loop() {
  // Allume chaque LED successivement en rouge
  for (int i = 0; i < MAX_LEDS; i++) {
    FastLED.clear();           // Éteint toutes les LEDs
    leds[i] = CRGB::Red;       // Allume la LED courante en rouge
    FastLED.show();
    delay(DELAY_MS);
    
    // Si vous voyez cette LED s'allumer, notez son numéro !
    // Le comptage commence à 0, donc LED 0 = première LED
  }
  
  // Pause avant de recommencer
  FastLED.clear();
  FastLED.show();
  delay(2000);
}

Création d’une animation « Fleurs de cerisier »

Une fois la base fonctionnelle, je voulais créer quelque chose de visuellement agréable. J’ai opté pour un effet « fleurs de cerisier » (sakura) avec des tons roses qui se déplacent doucement le long des LEDs.

Le concept

L’idée est simple : générer aléatoirement des couleurs dans les tons roses pastel, puis les faire circuler d’une LED à l’autre avec des transitions fluides. Ça donne l’impression de pétales qui flottent au vent.

Génération des couleurs

CRGB generateBlossomColor() {
  byte hue = random(220, 256);    // Teintes rose-rouge
  byte sat = random(50, 130);     // Saturation basse = effet pastel
  byte val = random(200, 255);    // Luminosité douce
  return CHSV(hue, sat, val);
}

J’utilise le modèle HSV (Teinte, Saturation, Valeur) plutôt que RGB car c’est beaucoup plus intuitif pour créer des palettes de couleurs. Les valeurs aléatoires donnent un côté organique très sympa.

Animation fluide avec interpolation

Le secret d’une animation fluide, c’est l’interpolation. Au lieu de changer brutalement de couleur, je fais une transition progressive :

CRGB color1 = colors[i];
CRGB color2 = colors[i + 1];
leds[i] = color1 % (255 * (1 - position)) + color2 % (255 * position);

La variable position varie de 0 à 1, créant une transition en douceur. J’incrémente cette position à chaque frame avec un petit FADE_STEP de 0.003, ce qui donne une animation très lente et hypnotique.

Contrôle de la luminosité avec le bouton du boîtier

La dernière amélioration, et pas des moindres : pouvoir contrôler la luminosité sans avoir à reprogrammer l’Arduino. J’ai utilisé le bouton Reset de mon boîtier (celui qui sert normalement à réinitialiser le PC mais qui fait double emploi avec le bouton Power) pour cycler entre différents niveaux de luminosité.

Connexion du bouton

Le bouton reset de la plupart des boîtiers PC a deux fils : un signal et une masse. Je les ai connectés à la pin D3 de l’Arduino (avec la résistance pull-up interne activée) et au GND.

pinMode(BUTTON_PIN, INPUT_PULLUP);

Niveaux de luminosité

J’ai défini 6 niveaux de luminosité : 100%, OFF, 20%, 40%, 60%, 80%. À chaque pression sur le bouton, on passe au niveau suivant.

const uint8_t brightnessLevels[] = { 255, 0, 51, 102, 153, 204 };

Sauvegarde en EEPROM

Enfin, le niveau de luminosité est sauvegardé dans l’EEPROM de l’Arduino. Comme ça, quand j’éteins et rallume mon PC, la luminosité reste celle que j’avais choisie !

EEPROM.update(EEPROM_BRIGHTNESS_ADDR, brightnessIndex);

Le code complet

Voici le code complet que j’utilise actuellement sur mon PC. N’oubliez pas d’adapter NUM_LEDS selon votre configuration ! Il est disponible dans ce gist : https://gist.github.com/LenweSaralonde/3ded8133064a41106923e75b11ee9269

Résultat final

Le résultat est franchement stylé, surtout pour du matériel d’entrée de gamme et issue en grande partie de récupération.

Ça claque, hein ?

Personnalisation

Il est possible de modifier très simplement le code pour donner un tout autre style :

Autres effets de couleurs :

  • Bleu glacier : hue = random(140, 180)
  • Coucher de soleil : hue = random(0, 40)
  • Arc-en-ciel : hue = random(0, 255)

Vitesse d’animation :

  • Animation rapide : FADE_STEP = 0.01
  • Animation ultra lente : FADE_STEP = 0.001

Il est aussi possible d’utiliser le bouton pour switcher entre différents patterns et couleurs. La seule limite est votre imagination !

Ajout du RGBs sur une Nintendo 64 PAL (EUR) avec le N64 RGB de Tim Worthington

Une sortie vidéo RGBs permet d’obtenir la meilleure qualité d’image possible sur une console de jeux vidéo rétro car les signaux des trois couleurs primaires ainsi que de la synchronisation sont séparés sur 4 fils différents.

Ce qui représente pour nous le Saint Graal au XXIè siècle était en réalité une bidouille des constructeurs comme Nintendo et SEGA dans les années 80 afin de rendre les consoles compatibles avec nos téléviseurs SECAM, en injectant directement le signal RGB vers le tube cathodique par la prise Péritel.

Dans les années 90, la plupart des téléviseurs supportant désormais le standard PAL, les constructeurs ont commencé à retirer la sortie RGBs de leurs machines. C’est ce choix qu’à fait Nintendo pour sa Nintendo 64.

Les premiers modèles de Nintendo 64 NUS-001(FRA) vendus en France sont équipés d’une puce vidéo capable de sortir un signal RGBs nativement, un mod très simple permet de rétablir la sortie RGBs en ajoutant quelques composants passifs mais cette version est très recherchée par les collectionneurs et les prix s’envolent.

L’autre modèle, beaucoup plus répandu (et donc beaucoup moins cher), est la version européenne PAL NUS-001(EUR). Son chipset vidéo produit des signaux composite et s-vidéo mais pas de RGB. Il est toutefois possible de fabriquer un câble s-video PAL mais beaucoup de téléviseurs CRT d’entrée de gamme ainsi que l’OSSC ne disposent pas d’entrée s-video.

Le N64 RGB est un mod qui a été inventé par l’australien Tim Worthington. Doté d’une puce vidéo moderne, il permet de rétablir une sortie RGB avec quelques extras comme un filtre deblur et la possibilité de reset la console avec la manette.

Le mod est disponible sur sa boutique en ligne pour 60 dollars australiens (soit environ 35 €) mais les frais de port (et de douane) sont très élevés. Heureusement, il est aussi disponible sur Mod in France qui le propose pour environ 50 € avec les frais de port et une livraison rapide.

Le kit comprend un PCB à coller sur le radiateur, des connecteurs à souder sur le chipset vidéo de la N64 et sur le PCB ainsi qu’une nappe pour relier les deux. Il vous faudra prévoir quelques fils de câblage en plus pour relier le PCB au multi-out de la console, ainsi qu’à la manette et au bouton reset.

⚠️ Avant d’acheter, vous devrez vérifier quelle puce vidéo est installée dans votre console car certaines sont plus petites et nécessitent un adaptateur. Le câblage est également différent selon le modèle.

Les instructions sur le site de Tim Worthington sont relativement simples à comprendre et les connecteurs désormais fournis avec le kit rendent l’installation très facile, même avec un fer à souder d’entrée de gamme. Astuce : la Patafix pour maintenir les composants en place c’est super pratique !

⚠️ Le câblage de la nappe peut être inversé, auquel cas il faudra souder le connecteur sur le PCB du N64 RGB à l’envers par rapport à celui soudé à la puce graphique de la console. En cas d’erreur, n’essayez pas de déssouder le connecteur du PCB au risque de l’endommager de façon irréversible. À la place, démontez la nappe en glissant une lame de cutter sous les broches en plastique et tirez sur les fils, ils viendront très facilement et vous pourrez les réordonner en suivant le bon câblage.

Ce mod prend moins d’une heure à installer et le résultat est juste parfait. Pour ma part, j’utilisais un upscaler chinois doté d’une entrée s-vidéo à 20 € mais avec un désentrelacement catastrophique. Je peux désormais utiliser le câble de ma Super Nintendo sur mon OSSC et jouer en 60 FPS sur mon écran OLED.

Et vous, envisagez-vous d’installer ce mod dans votre N64 PAL ? Dites-le nous en commentaire !

Il HACKE ma voiture et la rend AUTONOME ? (Comma.ai)

Rencontre avec Gael Musquet aka RatZillaS aux Geek Faëries qui nous présente le système de conduite autonome de Comma.ai et le logiciel Open Pilot, son installation dans un Toyota C-HR ainsi que les différents hacks que l’on peut effectuer sur un véhicule récent.

Configurer OBS pour exclure le contenu DMCA de vos replays Twitch

Pour éviter de vous faire striker par Twitch pour utilisation de contenu protégés par le DMCA dans les replays et clips de votre chaîne, il est possible d’envoyer à Twitch une deuxième piste audio, séparée du stream, qui sera utilisée pour le replay uniquement qui ne contient aucun contenu audio copyrighté.

L’astuce consiste à créer un périphérique audio virtuel dédié aux applications de contenu audio DMCA (comme Spotify, Deezer etc.) et d’exclure l’audio issu de ce périphérique dans la piste audio de VoD Twitch.

Le tuto suivant est pour Windows 10 et OBS uniquement mais il devrait être possible de trouver des solutions équivalentes si votre setup est différent. Il consiste en une partie « Configuration » qu’il ne sera nécessaire de faire qu’une seule fois, ainsi que de deux petits manipulations « Avant le stream » et « Après le stream » qu’il faudra faire à faire à chaque fois avant de commencer votre live et après pour rétablir le fonctionnement habituel de votre PC.

Configuration

Remarque : Ces instructions ont été mise à jour pour Windows 11 mais certaines captures d’écran ont été faites sous Windows 10. L’apparence de l’interface peut donc être légèrement différente.

1. Acheter et installer les drivers VB Cable

  1. Aller sur https://vb-audio.com/Cable/index.htm .
  2. Installer VB-CABLE Virtual Audio Device (gratuit).
  3. Acheter et installer VB-Cables A+B (Choisissez l’option « P1 – I’m a fan » à 5 € mais vous pouvez donner plus si vous le souhaitez).
  4. (optionnel) Si besoin de plus de canaux, acheter et installer également VB-Cables C+D.

2. Rebooter le PC

Redémarrer une fois l’installation des drivers terminée.

3. Monitorer les câbles virtuels

  1. Clic droit sur l’icône volume 🔊 dans la barre Démarrer > ⚙️ Paramètres audio ou bien ouvrir les Paramètres puis aller dans Système > Son.
  2. Faire défiler tout en bas de la page pour atteindre Autres paramètres audio dans la section Avancé.
  3. Dans la popup qui s’ouvre, cliquer sur l’onglet Enregistrement.
  4. Sélectionner CABLE Output > clic droit > Propriétés.
  5. Onglet Écouter.
  6. Cocher Écouter ce périphérique.
  7. Dans Lire sur ce périphérique, sélectionner le périphérique audio matériel correspondant aux enceintes ou au casque (par ex « Hauts-parleurs (Realtek High Definition Audio) »).
  8. Recommencer avec les autres câbles virtuels (Cable-A Output etc.).
Refaire la manipulation pour tous les périphériques CABLE Output.

4. Assigner les câbles virtuels aux applications

  1. Lancer les applications à régler (Spotify, navigateur web, Discord, jeu etc.).
  2. Clic droit sur l’icône volume 🔊 dans la barre Démarrer > ⚙️ Ouvrir le mélangeur de volume.
  3. Faire défiler jusqu’à la section Applications.
  4. Assigner la sortie CABLE-A Input pour les applications de musique DMCA qui ne devront pas être dans la VoD Twitch.
  5. (optionnel) Assigner d’autres sorties CABLE-X Input aux autres applications que vous souhaitez régler indépendamment (par exemple pour pouvoir écouter Discord sans qu’il ne soit retransmis sur le stream).
Exemple avec Spotify et le navigateur web Opera configurés en tant qu’application audio DMCA et Discord sur un autre périphérique qui pourra être entièrement exclu du stream.

5. Configurer les pistes OBS

  1. Ouvrir Paramètres.
  2. Dans la catégorie Audio (à gauche) > Dans Périphériques audio globaux, assigner Par défaut à Audio du Bureau et CABLE-A Input à Audio du Bureau 2. Si nécessaire, assigner les autres périphériques CABLE-X Output à Audio Micro/Auxiliaire X.
  3. Dans la catégorie Sortie (à gauche), activez le Mode de sortie avancé . Ensuite, Onglet Streaming, dans Piste audio, cocher la n°1, puis cocher Piste de VOD Twitch et sélectionner la piste n°2.

    La piste audio n°1 sera donc utilisée pour le stream en direct alors que la piste n°2 sera utilisée pour la VoD.
  4. Cliquer sur OK.
  5. Dans le Mélangeur audio > clic droit > Propriétés audio avancées > Décocher la piste n°2 puis cliquer sur OK.
  6. (optionnel) N’hésitez pas à renommer les pistes du mélangeur audio en quelque chose de plus clair comme 1. Audio du Bureau, 2. Audio DMCA, 3. Micro, 4. Discord etc.

6. Tester

Faites des tests ! Suivez la procédure « Avant le stream » ci-dessous, lancez un jeu, Discord, une application DMCA et vérifiez que les vumètres correspondants s’activent correctement.

Faites un essai de stream en écoutant le retour audio depuis un autre appareil (par exemple un smartphone) et vérifiez que l’audio DMCA est présent, puis vérifiez que l’audio DMCA est bien absent du replay.

Avant le stream

Pour que le système fonctionne, il faudra avant chaque stream changer le périphérique de sortie audio par défaut pour sélectionner CABLE Input.

Clic gauche sur l’icône volume 🔊 dans la barre Démarrer, cliquer sur l’icône de sélection du périphérique de sortie :

puis sélectionner CABLE Input (VB-Audio Virtual Cable) comme périphérique de sortie audio par défaut.

Désormais, pour régler le volume du PC, il faudra Ouvrir le mélangeur de volume (clic droit sur l’icône 🔊) puis sélectionner le périphérique de sortie physique. Ne pas utiliser les touches Vol+ / Vol- / Mute du clavier.

Après le stream

Une fois le stream terminé, vous pouvez remettre votre sortie audio habituelle.

Clic gauche sur l’icône volume 🔊 dans la barre Démarrer puis rétablir le périphérique de sortie audio de la carte son (par exemple « Hauts-parleurs (Realtek High Definition Audio) »).

Il est maintenant de nouveau possible de régler le son en cliquant sur l’icône 🔊 du menu Démarrer et en utilisant les touches Vol+ / Vol- / Mute du clavier.