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.

Capture d'écran de l'interface de gestion du NAS Synology avec le planificateur de tâches

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 !

Tagués avec : , , ,

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 !

Tagués avec : , , , ,

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 !

Tagués avec : , ,

Soirée Warcraft 30 World Tour à Londres pour les 30 ans du jeu

Pour célébrer les 30 ans de la licence Warcraft, Blizzard a organisé le Warcraft 30 World Tour, une tournée mondiale de soirées exceptionnelles pour les fans, dans 6 grandes villes du monde : Londres, Séoul, Toronto, Sydney, São Paulo et Boston.

Le samedi 22 février 2025 s’est tenue le premier événement, à Londres au One Marylebone, à laquelle j’ai eu le privilège de participer, accompagné de Lina, Embu et Olivier.

Olivier, Embu, Lenwë et Lina

Des places très limitées

L’inscription aux soirées se fait par l’intermédiaire d’une billetterie gratuite. Les places, en quantité très limitée (seulement 500 pour la soirée de Londres), sont mise à disposition par vagues dans la logique du premier arrivé, premier servi. La plateforme de billetterie est très rudimentaire et ne propose pas de système de file d’attente aléatoire comme pour la BlizzCon ou le Hellfest. Il nous a donc fallu être très rapides pour cliquer à la seconde précise de l’ouverture de la billetterie pour avoir eu une chance d’obtenir le précieux sésame. Fort heureusement, les limites du système ne semblent pas avoir été exploitées par des scalpers puisqu’à ma connaissance, aucune revente de billet n’a eu lieu sur le marché noir.

Le précieux sésame a été obtenu !

Les créateurs de contenu présents sur le Discord des partenaires de Blizzard ont quant à eux pu recevoir des invitations.

Déroulement de la soirée

Le programme de la soirée était plutôt bien garni. Ce programme est plus ou moins le même pour les autres soirées de la tournée.

Tout d’abord, il était possible de rencontrer des membres importants de l’équipe de production de World of Warcraft comme Holly Longdale, Ion Hazzikostas et Maria Hamilton, ainsi que de Hearthstone avec Cora Georgiou et Christian Scharling.

Christian Scharling, Cora Georgiou,  Ion Hazzikostas et Holly Longdale

Un jeu du type de « roue de la fortune » permettait de gagner un lot supplémentaire (en plus de ceux du goody bag) déterminé en fonction du numéro obtenu. Plus le numéro est faible, plus le lot est important. Les gagnants ont ainsi pu être récompensés par des lots allant d’une mini peluche, un plaid WoTLK Classic, une édition collector de The War Within à un système de watercooling AIO pour PC customisé avec le logo des 30 ans de Warcraft.

Parmi les autres activités on pouvait aussi retrouver un « bar à patches ». Concrètement, on pouvait choisir une écharpe et un patch à faire broder dessus. Malheureusement, les deux couturières se sont retrouvées très vite débordées et on a fini par écouler le stock d’écharpes et de patches restants en quittant la soirée.

Écharpe avec patch exclusif "Warcraft 30"

Il y avait aussi l’incontournable photo booth, dans le même esprit que celui que l’on peut retrouver dans tous les mariages et autres soirées d’entreprise mais avec des accessoires bien plus badass !

Des petits fours, sandwiches et boissons sans alcool étaient distribuées aux invités tout le long de la soirée. Des cocktails alcoolisés étaient également disponibles contre £15.

Olivier présente un sandwich "Blizzard bite" et un cocktail

Beaucoup de créateurs de contenu, essentiellement anglophones, étaient présents. Le nombre d’invités étant limité, ils étaient très accessibles et échanger avec eux se faisait très naturellement, loin du stress des grosses conventions.

Un petit plateau TV était aussi installé pour y faire quelques interviews des invités.

En milieu de soirée, le DJ Kristian Nairn, plus connu pour son rôle de Hodor dans Games of Thrones, nous a offert un set personnalisé qui nous a permis d’éliminer quelques calories sur le dancefloor.

Le DJ Kristian Nairn

Enfin, la soirée s’est conclue en beauté par un concert du groupe de metal nain italien Wind Rose. 🤘

Concert de Wind Rose, avec des pioches de nain gonflables

Des goodies à gogo

Comme à son habitude, Blizzard a régalé ses invités avec un goody bag plutôt bien garni :

  • Un T-shirt exclusif « Warcraft est. 1994 » avec les dates de la tournée ;
  • Un pin’s exclusif « Warcraft 30 » ;
  • Une mini peluche ;
  • Des pièces de transmogrification dorées pour World of Warcraft ;
  • Des paquets de cartes pour Hearthstone ;
  • Un bon de réduction de -10% sur le Gear Store.
Le goody bag et son contenu

Conclusion

Je crois qu’on peut dire à l’unanimité que cette soirée était une réussite et qu’elle restera dans les mémoires des rares privilégiés qui ont pu y participer.

L’évènement ressemblait davantage à une soirée presse, avec son lot de cadreurs, photographes et journalistes, que d’une véritable fête comme l’inoubliable soirée anniversaire des 10 ans de WoW à Paris en 2014. On regrette le manque d’animation proposée, l’absence de concours cosplay, de concours de danse et autres mini jeux qui auraient pu davantage renforcer l’ambiance festive.

Le nombre de cosplayers se comptait sur les doigts d’une main, alors que cette soirée aurait pu être l’occasion de les mettre en avant. Dommage.

Enfin, même si on a pu croiser beaucoup de créateurs anglophones comme Esfand (aka « le streamer qui ressemble à Seb du Grenier »), MrGM, BelluarGaming ou encore TheKexman, il y avait très peu de créateurs européens comme la cosplayeuse suisse Kenika en tant qu’Ysera, également rencontrée à la BlizzCon. Côté francophone, seul le couple de streamers Les Goules et leur équipe avaient fait le déplacement.

Kenika en cosplay d'Ysera avec Lina

Big up à Lugia, notre CM francophone qui a parfaitement accompli son rôle de maître des cérémonies.

Tagués avec : , , , ,

Road trip en Californie avec Zoltan

Après ce vlog épique à la BlizzCon 2023, voici l’intégralité du vlog de notre road trip en Californie avec Zoltan en novembre 2023, sous la forme d’une série en 10 épisodes. Au programme : plage, grands espaces et même une visite chez Blizzard !

Tagués avec : , ,
Top