Forcer le mode ventilation « Plein régime » sur un NAS Synology (DSM 7.x) sans passer par l’interface graphique

🎯 Objectif

Sur les NAS Synology, l’interface DSM permet de choisir le mode de ventilation (Silencieux / Frais / Plein régime).
Le problème : ce réglage n’est pas scriptable officiellement, ce qui empêche toute automatisation (cron, plage horaire, charge serveur, etc.).

Dans cet article, nous allons voir comment forcer le mode “Plein régime” et revenir en mode normal, sans passer par l’UI DSM, et sans redémarrage, en reproduisant exactement l’appel interne utilisé par DSM.


❌ Pourquoi les méthodes classiques ne fonctionnent pas

1️⃣ Modifier scemd.xml ne suffit pas

Le démon scemd lit bien ses règles depuis scemd.xml, mais :

  • il n’applique pas dynamiquement un changement de mode
  • redémarrer scemd ne force pas un basculement immédiat
  • DSM garde un état interne du mode de ventilation

👉 Résultat : même avec des seuils ultra-agressifs, les ventilateurs ne passent pas à fond.


2️⃣ L’API existe… mais est refusée

Il existe une API interne :

SYNO.Core.Hardware.FanSpeed

Un appel direct du type :

api=SYNO.Core.Hardware.FanSpeed
method=set
dual_fan_speed=fullfan

renvoie selon les cas :

  • error code 101
  • error code 102
  • error code 3712
  • ou un faux success:true sans effet réel

👉 Conclusion
L’API est bien présente, mais DSM refuse les appels directs hors contexte UI.


✅ La seule méthode fonctionnelle

La clé est là :

DSM ne change jamais le mode ventilation via un appel simple,
mais via une requête composite SYNO.Entry.Request, contenant plusieurs appels internes, exécutés dans un ordre précis.

Nous allons donc reproduire exactement l’appel fait par l’interface graphique DSM.


🔍 Capture de l’appel DSM (principe)

Lors d’un clic sur “Appliquer” quand “Mode plein régime du ventilateur” a été sélectionné dans DSM, le navigateur envoie une requête POST vers :

/webapi/entry.cgi

avec :

  • api=SYNO.Entry.Request
  • method=request
  • un tableau compound[]
  • l’appel FanSpeed inclus dans ce contexte

C’est ce contexte complet qui autorise le changement.


🧠 Principe des scripts

  • Ouverture d’une session API DSM
  • Appel composite SYNO.Entry.Request
  • Changement de dual_fan_speed
  • Fermeture de session

Deux scripts :

  • fan_full.sh → Plein régime
  • fan_cool.sh → Retour mode normal

📄 Script : passage en mode Plein régime

/root/fan_full.sh

#!/bin/sh

DSM_HOST="https://localhost:5000"
USER="login"
PASS="MotDePasse"

SID=$(curl -sk "$DSM_HOST/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=$USER&passwd=$PASS&session=Core&format=sid" \
| sed -n 's/.*"sid":"\([^"]*\)".*/\1/p')

curl -sk -X POST "$DSM_HOST/webapi/entry.cgi" \
-d "api=SYNO.Entry.Request" \
-d "method=request" \
-d "version=1" \
-d "mode=sequential" \
-d "stop_when_error=false" \
-d 'compound=[{"api":"SYNO.Core.Hardware.FanSpeed","method":"set","version":1,"dual_fan_speed":"fullfan"}]' \
-d "_sid=$SID"

curl -sk "$DSM_HOST/webapi/auth.cgi?api=SYNO.API.Auth&method=logout&version=3&_sid=$SID"

📄 Script : retour en mode normal (Cool / Auto)

/root/fan_cool.sh

#!/bin/sh

DSM_HOST="https://localhost:5000"
USER="login"
PASS="MotDePasse"

SID=$(curl -sk "$DSM_HOST/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=$USER&passwd=$PASS&session=Core&format=sid" \
| sed -n 's/.*"sid":"\([^"]*\)".*/\1/p')

curl -sk -X POST "$DSM_HOST/webapi/entry.cgi" \
-d "api=SYNO.Entry.Request" \
-d "method=request" \
-d "version=1" \
-d "mode=sequential" \
-d "stop_when_error=false" \
-d 'compound=[{"api":"SYNO.Core.Hardware.FanSpeed","method":"set","version":1,"dual_fan_speed":"coolfan"}]' \
-d "_sid=$SID"

curl -sk "$DSM_HOST/webapi/auth.cgi?api=SYNO.API.Auth&method=logout&version=3&_sid=$SID"

🔐 Permissions

chmod +x /root/fan_full.sh /root/fan_cool.sh

⏱️ Automatisation (cron DSM)

DSM ne fournit pas crontab en ligne de commande.
Il faut passer par :

Panneau de configuration → Planificateur de tâches

Créer deux tâches :

  • Fan FULL/root/fan_full.sh
  • Fan COOL/root/fan_cool.sh

Exemple :

  • FULL : 08h30
  • COOL : 17h30

✅ Testé et validé : le NAS passe bien à fond, puis revient au mode normal.


⚠️ Remarques importantes

  • Cette méthode ne nécessite aucun reboot
  • Elle fonctionne sur DSM 7.x
  • Elle repose sur un comportement interne de DSM (non documenté)
  • Synology peut théoriquement modifier ce comportement dans le futur

👉 À ce jour, c’est la seule méthode fiable et reproductible.


🧾 Conclusion

Même si DSM expose une API pour la gestion matérielle, le contrôle de la ventilation est volontairement verrouillé hors interface graphique.

En reproduisant l’appel interne exact de DSM, il devient possible de :

  • forcer le mode Plein régime
  • automatiser le refroidissement
  • intégrer cela dans une stratégie serveur avancée

Sans hack kernel.
Sans reboot.
Sans bricolage dangereux.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.