Vue normale

Reçu aujourd’hui — 8 janvier 2026

Comment trouver des fèves de cacao festives dans Disney Dreamlight Valley

7 janvier 2026 à 23:32

Un nouveau portail est apparu dans la Plaza, vous emmenant dans un merveilleux pays des neiges festif dans Disney Dreamlight Valley pendant le Festival Flottant d’Hiver. Il y a beaucoup à explorer, mais d’abord les choses essentielles : vous devrez traquer des Grains de Cacao Festifs. Cet ingrédient essentiel est requis pour presque toutes les […]

Le post Comment trouver des fèves de cacao festives dans Disney Dreamlight Valley est apparu en premier sur Moyens I/O.

Reçu hier — 7 janvier 2026

Résoudre l’énigme du pilier du Festival Flottant d’Hiver dans Disney Dreamlight Valley

7 janvier 2026 à 22:24

Avez-vous déjà trouvé que vous erriez sur l’île du Festival Flottant d’Hiver dans Disney Dreamlight Valley, essayant de résoudre une énigme qui semble se cacher à la vue de tous ? L’énigme du Pilier correspond certainement à cette description. Contrairement à d’autres énigmes éparpillées sur l’île, celle-ci manque d’instructions, laissant de nombreux joueurs perplexes. Si […]

Le post Résoudre l’énigme du pilier du Festival Flottant d’Hiver dans Disney Dreamlight Valley est apparu en premier sur Moyens I/O.

Résoudre le puzzle de la fontaine de chocolat du festival flottant d’hiver dans Disney Dreamlight Valley

7 janvier 2026 à 21:16

Le Festival Flottant d’Hiver dans Disney Dreamlight Valley a transformé la Place en un pays des merveilles hivernal magique. Avec un portail spécial à visiter, cet événement festif est rempli de défis, y compris le fascinant puzzle de la Fontaine de Chocolat. En vous concentrant sur les puzzles dispersés sur l’île, chacun présente son propre […]

Le post Résoudre le puzzle de la fontaine de chocolat du festival flottant d’hiver dans Disney Dreamlight Valley est apparu en premier sur Moyens I/O.

Les meilleures lampes frontales pour le vélo, le Gravel et le VTT nocturne

Par :Sophie
7 janvier 2026 à 17:05

Rouler à vélo de nuit impose une vigilance accrue. Si l’éclairage avant et arrière classique reste indispensable pour voir la route et être vu par les autres usagers, il montre parfois ses limites dans certains environnements : routes sinueuses, zones boisées, intersections mal éclairées ou sorties sportives nocturnes.

Dans ces situations, la lampe frontale montée sur casque devient un complément particulièrement efficace. Contrairement à un phare fixé sur le vélo, elle suit naturellement le mouvement de la tête et permet d’éclairer précisément là où porte le regard. Un simple coup d’œil à gauche ou à droite suffit pour éclairer un bas-côté, un chemin, une entrée de forêt ou un véhicule arrivant de côté.

Utilisée en complément d’un éclairage vélo classique, la lampe frontale améliore nettement la vision périphérique, l’anticipation des dangers et la visibilité latérale auprès des autres usagers de la route. Elle apporte un réel gain de sécurité, notamment lors des sorties nocturnes en milieu rural, en forêt, en gravel ou en VTT.

Dans cet article, nous allons voir pourquoi et comment utiliser une lampe frontale pour le vélo, quels sont les cas d’usage les plus pertinents, et surtout comment choisir une lampe frontale suffisamment puissante, fiable et compatible avec un casque, pour rouler de nuit dans les meilleures conditions de sécurité.

Pourquoi utiliser une lampe frontale pour le vélo nocturne ?

Lorsqu’on roule de nuit à vélo, l’éclairage avant et arrière reste absolument indispensable et obligatoire. Cependant, dans certaines situations, ces éclairages fixes atteignent vite leurs limites, notamment lorsque l’environnement est sombre, sinueux ou imprévisible.

C’est là que la lampe frontale montée sur casque prend tout son sens. Contrairement à un phare de guidon, elle suit naturellement le regard, ce qui permet d’éclairer précisément là où l’on observe, sans être limité par l’axe du vélo.

Une lampe frontale ne remplace jamais un éclairage vélo avant et arrière classique. Elle constitue un complément de sécurité et de confort, particulièrement efficace pour améliorer la vision périphérique et l’anticipation.

Les 7 meilleurs modèles de lampes frontales

ProduitPuissance (lumens)Autonomie estiméeModes principauxPourquoi ce choix
Lampe frontale Silva Free 2000 M~2000 lmVariable selon modeMultiple (spot/flood/etc.)Très puissante, idéale pour zones très sombres ou forêt
Ledlenser HF8R Core~1600 lmBonne (>2–3 h fort)Low/Med/High/BoostFort faisceau et bon confort sur casque
Sigma Buster 800 HL~800 lmMoyenne5-6 modes (standard/clignotant)Excellente option milieu de gamme pratique
Sigma Buster 400 HL~400 lmCorrectePlusieurs modesOption budget & légère pour sorties moins techniques
Petzl Lampe frontale Actik Core~600 lm~3–8 h selon modeMulti-mode + rougeFiabilité reconnue et ajustable selon besoins
Lampe frontale Silva Explore 5~1000 lmBonneMulti-modeBon compromis puissance/poids rechargeable
Lampe frontale Silva Smini~250–300 lmBonne3 modesLéger et confortable, mais plus orienté trail léger

Lampe frontale et vélo : dans quels cas est-ce vraiment utile ?

L’utilisation d’une lampe frontale sur casque est particulièrement pertinente dans des contextes bien précis.

🌲 Zones boisées et routes peu éclairées

Dans les passages forestiers, sur des routes bordées d’arbres ou en milieu rural, une lampe frontale permet :

  • d’éclairer les bas-côtés,
  • de repérer des animaux pouvant déboucher sur la route,
  • d’anticiper un danger venant de côté (chemins, fossés, clairières).

En tournant légèrement la tête, tu peux vérifier immédiatement ton environnement, sans dépendre uniquement de l’éclairage du vélo.

🚗 Carrefours et intersections mal visibles

Aux intersections peu éclairées ou dans les virages serrés :

  • la lampe frontale te permet d’éclairer rapidement sur la gauche ou la droite,
  • elle améliore ta visibilité auprès des automobilistes arrivant de côté.

Quand tu tournes la tête, le faisceau lumineux se dirige dans leur champ de vision, ce qui renforce la perception de ta présence.

🚴‍♂️ VTT, gravel et sorties sportives nocturnes

Pour le VTT ou le gravel de nuit :

  • la lampe frontale complète parfaitement le phare de guidon,
  • elle améliore la lecture du terrain dans les virages et les passages techniques,
  • elle permet d’éclairer une trajectoire différente de celle du vélo (regard → action).

C’est d’ailleurs une configuration très appréciée en VTT nocturne : Phare puissant sur le cintre + lampe frontale sur le casque.

Sécurité : un vrai plus, mais jamais seul

Il est essentiel de rappeler que :

  • l’éclairage avant du vélo assure la visibilité de la route,
  • l’éclairage arrière garantit que tu sois vu de loin,
  • la lampe frontale améliore la perception et la visibilité directionnelle.

Elle renforce :

  • la visibilité latérale,
  • l’anticipation,
  • la communication visuelle avec les autres usagers.

C’est donc un outil de sécurité complémentaire, pas un substitut !

Lampe frontale sur casque : quels avantages concrets ?

✔ Éclairage orienté selon le regard
✔ Vision périphérique améliorée
✔ Meilleure détection des dangers latéraux
✔ Efficace dans les zones naturelles et sombres
✔ Visibilité accrue pour les autres usagers lorsqu’on tourne la tête

Quels critères pour bien choisir une lampe frontale pour le vélo ?

Toutes les lampes frontales ne sont pas adaptées à un usage vélo. Voici les critères essentiels à privilégier.

🔦 Puissance lumineuse

Pour un usage nocturne à vélo, vise au minimum 800 à 1000 lumens.
Pour les zones boisées, VTT ou routes totalement non éclairées :
👉 1000 à 2000 lumens offrent un vrai confort visuel.

🔋 Autonomie réelle

La puissance est inutile si l’autonomie est trop faible.
Idéalement :

  • 2 à 4 heures à puissance élevée,
  • modes intermédiaires pour préserver la batterie sur les longues sorties.

⛑ Compatibilité avec le casque

Un point crucial :

  • sangle stable,
  • bon maintien sur casque vélo (route ou VTT),
  • poids contenu pour éviter les douleurs cervicales.

Certaines lampes acceptent aussi des supports dédiés casque, un vrai plus.

🌧 Résistance et fiabilité

Pour une utilisation vélo :

  • certification IPX6 ou IPX7 recommandée,
  • résistance à la pluie, aux projections et à la boue,
  • bouton facile à manipuler avec des gants.

⚙ Qualité du faisceau

Un bon faisceau doit être :

  • suffisamment large pour l’environnement,
  • assez concentré pour voir loin,
  • avec plusieurs modes (large / spot / mix).

À qui s’adresse vraiment ce type de lampe ?

Les lampes frontales pour le vélo sont particulièrement recommandées pour :

  • cyclistes nocturnes réguliers,
  • amateurs de VTT et gravel,
  • cyclistes en zones rurales ou boisées,
  • personnes cherchant un complément de sécurité visuelle avancé.

Conclusion

La lampe frontale montée sur casque ne remplace en aucun cas un éclairage vélo avant et arrière réglementaire. En revanche, utilisée en complément, elle devient un véritable atout pour les sorties nocturnes, en particulier dans les environnements sombres, boisés ou peu prévisibles.

En suivant naturellement le regard, elle permet d’améliorer la vision périphérique, d’anticiper les dangers latéraux et de mieux communiquer visuellement avec les autres usagers de la route. Qu’il s’agisse de repérer un animal aux abords de la chaussée, de sécuriser une intersection mal éclairée ou d’optimiser la lecture du terrain en VTT ou en gravel, la lampe frontale apporte un gain réel en confort et en sécurité.

Pour être efficace à vélo, le choix d’une lampe frontale doit se faire avec attention : puissance suffisante, autonomie adaptée, faisceau bien maîtrisé et compatibilité avec un casque sont des critères essentiels. Une lampe trop faible ou mal fixée perd rapidement tout son intérêt.

En combinant un éclairage vélo classique performant et une lampe frontale bien choisie, il est possible de rouler de nuit avec une visibilité renforcée, une meilleure anticipation et une sérénité accrue, quelles que soient les conditions de roulage.

Cet article original intitulé Les meilleures lampes frontales pour le vélo, le Gravel et le VTT nocturne a été publié la première sur SysKB.

Disney Dreamlight Valley : Guide des énigmes et de l’événement du Festival Flottant d’Hiver

7 janvier 2026 à 16:32

Un nouvel événement est arrivé dans le monde enchanteur de Disney Dreamlight Valley. Le Festival Flottant d’Hiver est là, apportant une délicieuse gamme de récompenses que les joueurs peuvent gagner. Avec des énigmes astucieuses qui vous attendent, cela promet d’être une expérience magique remplie d’émerveillement et d’excitation. Puisque cet événement tourne autour d’énigmes cachées, vous […]

Le post Disney Dreamlight Valley : Guide des énigmes et de l’événement du Festival Flottant d’Hiver est apparu en premier sur Moyens I/O.

007 First Light Exigences PC : Configurations Minimales et Recommandées

7 janvier 2026 à 12:40

Alors que l’excitation monte pour la prochaine sortie de 007 First Light, les fans de la série emblématique James Bond se préparent pour une aventure passionnante. Développé par IO Interactive, connu pour la célèbre franchise Hitman, ce jeu promet d’offrir une expérience immersive mettant en avant l’espionnage, l’intrigue et, bien sûr, l’action. Prévu pour le […]

Le post 007 First Light Exigences PC : Configurations Minimales et Recommandées est apparu en premier sur Moyens I/O.

Reçu — 5 janvier 2026

Guide pour créer et rejoindre des DreamTeams dans Disney Dreamlight Valley

5 janvier 2026 à 17:48

Explorer le monde enchanteur de Disney Dreamlight Valley peut sembler un peu écrasant—surtout si vous êtes seul. Heureusement, la fonctionnalité **DreamTeams** offre un moyen de se connecter avec d’autres et rend votre aventure beaucoup plus fluide. Ce n’était pas toujours une partie du jeu, alors si vous n’êtes pas sûr de la façon de s’impliquer, […]

Le post Guide pour créer et rejoindre des DreamTeams dans Disney Dreamlight Valley est apparu en premier sur Moyens I/O.

Reçu — 4 janvier 2026

Govee Unveils Three Smart Lights at CES 2026: Floor Lamp 3, Ceiling Light Ultra, and Sky Ceiling Light

4 janvier 2026 à 13:18
At CES 2026, Govee is unveiling a new generation of core lighting technologies, alongside a preview of three flagship products that push lighting beyond simple automation and into a more adaptive, expressive role in the home. At the core of Govee’s new lineup are three platform-level innovations: LuminBlend+, AI Lighting Bot 2.0, and DaySync. Together, they define how future Govee products will handle color accuracy, personalization, and time-aware lighting behavior. […]

Reçu — 25 décembre 2025
Reçu — 4 novembre 2025

TestFlight Status Checker : être alerté des ouvertures de bêta d’applications pour Apple sur TestFlight

Par :Aerya
4 novembre 2025 à 09:04

Chez Apple, les développeurs peuvent proposer leurs applications en version bêta avant de les mettre sur l’AppStore. Pour y accéder, outre avoir TestFlight sur son périphérique et un code d’invitation, il faut surtout que la limite de bêta-testeurs ne soit pas atteinte.

Si jamais on arrive trop tard, EloneMusk (… ouais… je sais…) a créé Test-Flight-Subscription pour être alerté par email de l’ouverture d’accès à des bêtas.

L’email et le mot de passe à renseigner dans la configuration ne sont PAS ceux de votre compte Apple mais bien ceux d’un compte GMAIL (hardcodé avec Gmail dans app.py).
Il faudra utiliser un compte Gmail avec un mot de passe d’application (chercher app password dans les paramètres Gmail), accessible une fois le 2FA activé sur le dit compte si ce n’est pas encore fait.

services:
  testflight-checker:
    build:
      context: https://github.com/EloneMusk/Test-Flight-Subscription.git
      dockerfile: Dockerfile
    container_name: testflight-checker
    restart: always
    ports:
      - 7654:8000
    environment:
      EMAIL_USER: moi@gmail.com
      EMAIL_PASSWORD: ent iur henf ued

testflight1

Pratique.
Pour découvrir des applications en bêta, on peut par exemple parcourir le SubReddit dédié ou le dépôt GitHub Awesome Testflight App List.

Il a trouvé sa place dans tout mon petit bordel ^^

testflight2

Et… j’y ajoute mon workflow de mise à jour automatique si le dépôt GitHub évoluait, ce qui donne :

services:
  testflight-checker:
    build:
      context: https://github.com/EloneMusk/Test-Flight-Subscription.git
      dockerfile: Dockerfile
    container_name: testflight-checker
    restart: always
    ports:
      - 7654:8000
    environment:
    environment:
      EMAIL_USER: moi@gmail.com
      EMAIL_PASSWORD: ent iur henf ued
  testflight-autoupdate:
    image: alpine:latest
    container_name: testflight-autoupdate
    restart: always
    environment:
      GITHUB_REPO: https://github.com/EloneMusk/Test-Flight-Subscription.git
      DISCORD_WEBHOOK: https://canary.discord.com/api/webhooks/xxx/xxx
      POLL_INTERVAL: 172800 # secondes
      SERVICE_NAME: testflight-checker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /tmp:/repo
    command: >
      sh -c "
        apk add --no-cache git bash curl docker-cli jq &&
        mkdir -p /repo &&
        cd /repo &&
        git clone --depth 1 \$GITHUB_REPO . || true &&
        REPO_NAME=\$(basename -s .git \$GITHUB_REPO) &&
        DEFAULT_BRANCH=\$(curl -s https://api.github.com/repos/\$(echo \$GITHUB_REPO | sed 's|.*/||;s|.git||') | jq -r .default_branch) &&
        git fetch origin \$DEFAULT_BRANCH &&
        git checkout \$DEFAULT_BRANCH &&
        LAST_COMMIT=\$(git rev-parse HEAD) &&
        while true; do
          git fetch origin \$DEFAULT_BRANCH &&
          NEW_COMMIT=\$(git rev-parse origin/\$DEFAULT_BRANCH) &&
          if [ \"\$NEW_COMMIT\" != \"\$LAST_COMMIT\" ]; then
            echo \"[$(date)] Nouveau commit détecté sur \$DEFAULT_BRANCH, rebuild...\"
            git reset --hard origin/\$DEFAULT_BRANCH &&
            docker compose -f /repo/docker-compose.yml build \$SERVICE_NAME &&
            docker compose -f /repo/docker-compose.yml up -d \$SERVICE_NAME &&
            REPO_LINK=\$GITHUB_REPO &&
            COMMIT_LINK=\"\$GITHUB_REPO/commit/\$NEW_COMMIT\" &&
            curl -H 'Content-Type: application/json' -X POST -d '{\"content\": \"\$REPO_NAME mis à jour automatiquement !\nBranche : \$DEFAULT_BRANCH\nCommit : \$NEW_COMMIT\nDépôt : <\$REPO_LINK|\$REPO_NAME>\nLien du commit : <\$COMMIT_LINK|voir commit>\"}' \$DISCORD_WEBHOOK &&
            LAST_COMMIT=\$NEW_COMMIT
          else
            echo \"[$(date)] Aucun changement sur \$DEFAULT_BRANCH.\"
          fi
          sleep \$POLL_INTERVAL
        done
      "
networks: {}

Loading

Reçu — 23 octobre 2025

Le jeu Fear the Spotlight est gratuit sur l’Epic Games Store pendant une semaine

23 octobre 2025 à 15:01

Pendant une semaine, c'est à dire du 23 au 30 octobre 2025, le jeu Fear the Spotlight est offert sur l'Epic Games Store.

The post Le jeu Fear the Spotlight est gratuit sur l’Epic Games Store pendant une semaine first appeared on Bhmag.
Reçu — 15 octobre 2025

Des vacances au clair de lune (ou comment faire son Geforce Now privé)

15 octobre 2025 à 16:33

Il aura fallu beaucoup trop de temps pour que ça se produise, et je l’aurai travaillé au corps une paire de fois le gaillard, mais voilà, ceci est le premier billet invité de l’unique, l’irremplaçable Pierre-Marie ! Parce que c’était à la fois trop con comme cible de jeu, mais surtout trop rigolo vu le mix de technos abordées, parce qu’on va parler de Pokemon, de Sunshine/Moonlight (le titre ne ment pas), de wakeonlan, de Kubernetes, de Fission. Oui, tout ça en même temps. Vous comprenez mon enthousiasme ?

La puissance des algorithmes de ciblage

Au détour de mon scrolling sur X, je suis tombé sur un post parlant de jeux vidéos (l’algorithme est bien foutu) et sur une injonction à s’inscrire sur PokeMMO.
Pas fan hardcore de Pokémon, j’ai quand même bien poncé les deux premières gen et me suis tenté à la troisième.
Je fais partie des gens qui n’attendent plus grand chose de Game Freak qui, selon moi, ressort en boucle les mêmes jeux sans vraiment d’innovation.
Au contraire, côté développement non officiel, on retrouve des jeux dérivés comme Pokémon Showdown, qui malgré que ce ne soit pas mon style de jeu, attire une grande communauté et qui aurait pu donner des idées à Nintendo pour renouveler la licence.
J’ai, par exemple, plus apprécié le rom hack Pokémon Adventures Red Chapter basé sur l’excellent manga Pokémon La Grande Aventure que le remake Let’s Go Evoli.
Bref, je suis donc allé voir ce qu’était ce PokeMMO, et me suis motivé pour me lancer dessus. Ça tombe bien, je pars 2 semaines en vacances et il faudra bien occuper mes soirées au coin de la clim. (article commencé au mois de Juillet). PokeMMO propose un installer pour Windows, Linux, iOS, Android et même un package pour OS alternatif (j’ai vu pas mal de gens qui installaient ça sur une console portable de type Retroid).
Personnellement, j’ai à ma disposition une PsVita et une Switch, toutes deux libérées et qui me servent lors de mes sessions retrogaming. L’option téléphone/tablette est pour moi rédhibitoire ne possédant pas de manette compatible et aimant beaucoup trop les boutons physiques pour jouer au tactile.
Installer Android sur Switch me semblant trop fastidieux, j’ai décidé de partir sur une autre voie. Étant obligé d’être connecté pour jouer quoi qu’il arrive (le O de MMO, hein), je me penche sur Moonlight, que j’avais déjà testé il y presque 10 ans. Il y a des clients pour Switch et PsVita (et pour beaucoup d’autres OS/appareils) donc ça pourrait correspondre à mes besoins.

Installation de Sunshine/Moonlight

Moonlight, pour vulgariser, c’est un client non-officiel pour le protocole Nvidia Gamestream qui vient se connecter à un ordinateur distant pour le contrôler à distance. Il a la force de supporter les contrôleurs locaux et de transmettre au PC distant à la manière d’un Steam Link. Pour pouvoir streamer vers un client Moonlight, il faut un serveur sur la machine cible. Le logiciel Nvidia GeForce Experience permet cela mais la « nouveauté » par rapport à mon essai d’il y a 10 ans, c’est le serveur Sunshine qui permet de s’affranchir du logiciel de Nvidia.

L’installation de Sunshine se fait via l’installateur dédié à la distribution cible en quelques secondes. Une fois installé, Sushine se configure via une interface web accessible en local. Elle permet de gérer les différents clients (appairage, suppression…), les différentes applications et les options de streaming (encodage, bitrate…).

Le première étape est de créer un couple utilisateur/motdepasse pour protéger l’accès à cette interface.

Interface de configuration de Sunshine: Creation du mot de passe

Par défaut, Sunshine propose deux applications: Bureau et Steam Big Picture (même si Steam n’est pas installé sur le système)

Interface de configuration de Sunshine: Applications

J’installe donc PokeMMO et le configure comme Application dans Sunshine. Je reprends simplement les valeurs trouvées dans le raccourci Bureau qui a été crée lors de l’installation. Il détecte même la miniature automatiquement.

Interface de configuration de Sunshine: Création de l’application PokeMMO

J’installe le client Moonlight sur les deux appareils. Le client détecte automatiquement le PC supportant Sunshine et affiche un code d’appairage à entrer dans Sunshine.

Interface de Moonlight: Détection

Interface de configuration de Moonlight: Appairage

Interface de Sunshine: appairage

L’appairage se déroule sans problème et je peux tester le stream en local.

Interface de Moonlight: Écran d’accueil

Je lance l’application Bureau et ça me permet de confirmer qu’il est bien possible d’ouvrir une session Windows à distance.

Interface de Moonlight: Bureau

Pour le stream distant, il faut juste s’assurer que Upnp est activé sur le routeur et cocher une case dans la configuration de Sunshine.

Interface de configuration de Sunshine: Activation de l’Upnp

(ndr: sinon il faut définir les ports et ouvrir manuellement/créer les redirections de port; l’IP fixe pour le PC de jeu est fortement recommandée dans ce cas)

Fini ?

On aurait pu s’arrêter là, mais bon, je suis pas fan de laisser tourner le PC H24 pendant 2 semaines juste pour l’utiliser quelques heures. Moonlight propose une fonctionnalité bien pratique de Wake On LAN pour démarrer un ordinateur à distance, mais voilà, ça ne fonctionne qu’en réseau local (en même temps c’est dans le nom).
Il faut donc trouver le moyen de le faire fonctionner à distance. J’ai plusieurs dispositifs à ma disposition.
Mon routeur PfSense permet de d’envoyer des paquets WoL mais uniquement via l’interface, pas d’API disponible. Il faudrait se connecter à l’interface via VPN pour lancer la commande. C’est trop lourd et pas assez flexible.
Solution suivante, utiliser le cluster k3s qui tourne à la maison.

Utilisation de k3s

On teste la faisabilité du process en lançant un pod temporaire contenant la commande wakeonlan mais ça ne fonctionne pas car l’appareil ciblé n’est pas sur le LAN du cluster k3s comme l’est le pod.
En cherchant un peu, on trouve qu’il faut configurer le pod pour qu’il tourne dans le réseau hôte, le réseau des nœuds.

kubectl run tmp --rm -it --image nixery.dev/shell/wakeonlan -it --overrides='{"kind":"Pod", "apiVersion":"v1", "spec": {"hostNetwork":\ntrue}}' -- wakeonlan a1:b2:c3:d4:e5:f6

Et ça marche !!

Reste à trouver le moyen de lancer ça simplement, via un appel HTTP par exemple. Je viens justement de déployer un système de micro-services : Fission.
Fission permet de déployer des fonctions de micro-services à la manière d’un système Serverless comme Lambda. Ça me permettrait de recevoir une requête HTTP avec en paramètre l’adresse MAC cible et d’envoyer la requête WoL avec un simple code python.

Installation de Fission

L’installation de Fission est simple si on passe par leur chart Helm. On a juste à surcharger quelques valeurs grâce au fichier values.yml suivant.

## Fission chart configuration
##

## routerServiceType to consider while creating Fission Router service.
## For minikube, set this to NodePort, elsewhere use LoadBalancer or ClusterIP.
##
routerServiceType: ClusterIP

## defaultNamespace represents the namespace in which Fission custom resources will be created by the Fission user.
## This is different from the release namespace.
## Please consider setting `additionalFissionNamespaces` if you want more than one namespace to be used for Fission custom resources.
##
defaultNamespace: fission

# Add Fission helm repo
helm repo add fission-charts https://fission.github.io/fission-charts
# Install CRDs 
kubectl create -k "github.com/fission/fission/crds/v1?ref=v1.21.0"
# Install Fission
helm install fission fission-charts/fission-all -f values.yml -n fission --create-namespace
# Install Fission CLI binary
curl -Lo fission https://github.com/fission/fission/releases/download/v1.21.0/fission-v1.21.0-linux-amd64 && chmod +x fission && sudo mv fission /usr/local/bin/

Configuration de Fission

La documentation fission nous apprend qu’on peut modifier les spécifications des pods. Il y a même un tutoriel pour déployer un exemple.

# On créé un dossier dédié
mkdir wol-fn
cd wol-fn
# On initialise le dossier specs
fission spec init
# On créé l'environnement qui fera touner le code python
fission -n fission env create --spec --name python-wol --image ghcr.io/fission/python-env --builder ghcr.io/fission/python-builder
# On créé le dossier de la fonction
mkdir wol
# On créé un fichier requirements.txt avec le module python dont nous avons besoin
echo "wakeonlan" > wol/requirements.txt
# On créé le fichier contenant le code python à exécuter
touch wol/wol.py

from flask import request
from wakeonlan import send_magic_packet
import re

def main():
    mac = request.args.get('mac')
    if mac is None:
        return "Please send a MAC address"
    else:
        if re.match("[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", mac.lower()):
            send_magic_packet(mac)
            return "Sending magic packet to 255.255.255.255 with broadcast 255.255.255.255 MAC %s port 9" % (mac)
        else:
            return "%s is not a valid MAC format" % (mac)

On créé la spécification pour la fonction qui décrit quel code doit être exécuté et le trigger HTTP qui détermine quelle URL déclenche son exécution.

# On créé la spécification pour la fonction
fission -n fission function create --spec --name wol-fn --env python-wol --src "wol/*" --entrypoint wol.main
# On créé la spécification pour la route.
# Avec les annotations permettant de créer l'ingress rule sur Traefik
fission -n fission route create --spec --name wol-fn-get --method GET --url /wake --function wol-fn --createingress --ingressrule "test.domain.tld=/wake" --ingressannotation "kubernetes.io/ingress.class=traefik" --ingressannotation "traefik.ingress.kubernetes.io/router.entrypoints=websecure" --ingressannotation 'traefik.ingress.kubernetes.io/router.tls="true"' --ingressannotation "traefik.ingress.kubernetes.io/router.tls.certresolver=letsencrypt"

On a maintenant un dossier contenant la fonction et son environnement standard.

wol-fn
├── specs
│   ├── README
│   ├── env-python-wol.yaml
│   ├── fission-deployment-config.yaml
│   ├── function-wol-fn.yaml
│   └── route-wol-fn-get.yaml
└── wol
    ├── requirements.txt
    └── wol.py

On va modifier le fichier env-python-wol.yaml pour ajouter notre configuration spécifique.

---
apiVersion: fission.io/v1
kind: Environment
metadata:
  creationTimestamp: null
  name: python-wol
spec:
  builder:
    command: build
    container:
      name: builder
      resources: {}
    image: ghcr.io/fission/python-builder
    podspec:
      containers:
      - name: builder
        resources: {}
  imagepullsecret: ""
  keeparchive: false
  poolsize: 3
  resources: {}
  runtime:
    container:
      name: python-wol
      resources: {}
    image: ghcr.io/fission/python-env
    podspec:
      containers:
      - name: python-wol
        resources: {}
+     hostNetwork: true
+     dnsPolicy: ClusterFirstWithHostNet
  version: 3

La directive hostNetwork permet comme vu plus haut de faire tourner le pod sur le réseau hôte.
Avec juste cette modification, on a une erreur à l’exécution du code parce que le pod n’arrive pas à aller chercher l’archive contenant le code de la fonction sur le stockage partagé de Fission.

{
    "level": "error",
    "ts": "2025-08-22T15:55:03.884Z",
    "logger": "generic_pool_manager.generic_pool.fetcher_client",
    "caller": "client/client.go:114",
    "msg": "error specializing/fetching/uploading package, retrying",
    "error": "Internal error - error fetching deploy package: failed to download url : Get \"http://storagesvc.fission/v1/archive?id=%2Ffission%2Ffission-functions%2Ffc6798a9-95c3-47cb-8797-28f842162f83\": dial tcp: lookup storagesvc.fission on 9.9.9.9:53: no such host",
    "url": "http://X.X.X.X:8000/specialize",
    "stacktrace": "github.com/fission/fission/pkg/fetcher/client.sendRequest\n\tpkg/fetcher/client/client.go:114\ngithub.com/fission/fission/pkg/fetcher/client.(*client).Specialize\n\tpkg/fetcher/client/client.go:56\ngithub.com/fission/fission/pkg/executor/executortype/poolmgr.(*GenericPool).specializePod\n\tpkg/executor/executortype/poolmgr/gp.go:467\ngithub.com/fission/fission/pkg/executor/executortype/poolmgr.(*GenericPool).getFuncSvc\n\tpkg/executor/executortype/poolmgr/gp.go:553\ngithub.com/fission/fission/pkg/executor/executortype/poolmgr.(*GenericPoolManager).GetFuncSvc\n\tpkg/executor/executortype/poolmgr/gpm.go:242\ngithub.com/fission/fission/pkg/executor.(*Executor).createServiceForFunction\n\tpkg/executor/executor.go:239\ngithub.com/fission/fission/pkg/executor.(*Executor).serveCreateFuncServices.func1\n\tpkg/executor/executor.go:143"
}

On voit qu’il cherche à contacter storagesvc.fission et qu’il n’arrive pas à résoudre ce hostname, ce qui est normal étant donné qu’il s’agit d’un nom interne au cluster et que le pod tourne désormais sur le hostNetwork. La directive dnsPolicy: ClusterFirstWithHostNet permet de forcer d’essayer la résolution en interne au cluster avant de tenter en externe sur le hostNetwork et résout ce problème.

Il ne reste qu’à déployer.

# On vérifie la syntaxe
fission spec validate
# On déploie
fission spec apply --wait
# On test via Fission CLI
fission -n fission function test --name wol-fn --method GET -q "mac=a1:b2:c3:d4:e5:f6"
# On test via HTTP depuis l'extérieur
curl "https://test/domain.tld/wake?mac=a1:b2:c3:d4:e5:f6"

Pour faire simple, ajouter l’URL en raccourci sur le téléphone et en un clic, le PC est démarré. Personnellement, je l’ai intégré dans mon Home Assistant avec un bouton dédié.

Home Assistant Dashboard

Finalisation de la configuration

Celui qu’on adore détester

Il reste deux ou trois détails à régler. Par défaut, depuis Windows 10, quand on arrête le système, il se place en réalité dans un mode de veille prolongée pour permettre un démarrage plus rapide. Hors le *Wake On LAN* ne fonctionne pas sur ce mode de sommeil. Microsoft documente ça très bien ici. Il y est également expliqué comment désactiver ce mode pour pouvoir rétablir un mode d’extinction « normal ».

Je vous les remets à l’identique:

  • Dans Panneau de configuration, ouvrez l’élément Options d’alimentation
  • Sélectionnez le lien Choisir ce que les boutons d’alimentation font
  • Désactivez la case à cocher Activer le démarrage rapide (recommandé)
  • Sélectionnez Enregistrez les paramètres.

Une fois cette modification effectuée, le Wake On LAN est complètement fonctionnel.

La fin

Et donc, puisqu’on a abordé le sujet, comment se passe l’extinction ? Vous vous rappelez ? le but de tout ce foutoir, c’était d’éviter de garder le PC allumé pendant deux semaines. On a parlé du démarrage, mais quid de l’arrêt ?

Le plus simple est de lancer une session Bureau dans Moonlight et d’aller cliquer sur le menu Démarrer puis le bouton Arrêter comme à la maison. Mais on peut aussi déclarer des applications dans Sunshine et il exécutera la commande associée à cette application.

J’ai donc créer une application nommée Shutdown qui lance la commande suivante shutdown /s /f /t 0.

Interface de configuration de Sunshine: Shutdown Application

Quand elle est lancée depuis le client Moonlight, elle éteint le PC distant.

Feedback et Conclusion

Puisque je suis rentré depuis, je peux débriefer ces 2 semaines d’utilisation, ça fonctionne super, le seul défaut que j’ai eu est qu’une fois le Shutdown n’a pas fonctionné et je ne l’ai pas vu tout de suite. Les fois suivantes, j’ai juste eu à bien vérifier le status dans le menu.

Interface de Moonlight: PC démarré

Interface de Moonlight: PC éteint

À part ça, super expérience ! Bien sur je n’ai pas cherché à jouer à des jeux très performants, mais ça a suffi à mes besoins, même en 4G. Je n’ai pas non plus poussé jusqu’à tenter de jouer sur la 4G en voiture, mais je pense que ça aurait pu marcher.
Je continue à l’utiliser, même à la maison, pour jouer dans le canapé plutôt que devant le PC.

Interface de Moonlight: PokeMMO


Alors, avouez que c’est pas mal en termes de bricolages inutiles donc indispensables, il était donc nécessaire de partager ça avec le plus grand nombre ? (enfin au moins les lecteurs de ce blog)

❌