Ups - qnap - nut

Bonjour,

Mon QNAP n’arrive pas à se connecter à mon NUT


QNAP + NUT (Home Assistant) : Guide de configuration
Connecter un QNAP en esclave réseau UPS via Raspberry Pi

:warning: Problème connu : L’interface QTS ne permet pas de saisir le nom de l’UPS, le username ou le
password. Ces valeurs sont hardcodées dans le firmware QNAP. Ce guide documente le contournement complet.

Architecture
L’architecture cible est la suivante :

UPS (USB)

Raspberry Pi → Home Assistant OS → Addon NUT (netserver)

QNAP NAS → Esclave réseau UPS (QTS)

Le problème : pourquoi ça ne fonctionne pas par défaut
Deux raisons principales expliquent l’échec silencieux de QTS :

  1. Le nom de l’UPS est hardcodé
    QTS cherche systématiquement un UPS nommé « qnapups » — peu importe ce que vous configurez dans l’interface. Ce nom est inscrit en dur dans les scripts internes du firmware (/etc/init.d/usb_ups.sh) et dans /etc/config/ups/upsmon.conf.
    Si votre serveur NUT expose un UPS avec un autre nom (ex: « eaton », « myups »), QTS ne le trouvera jamais.

  2. Les credentials sont hardcodés
    QTS utilise le username « admin » et le password « qnap-ups » (ou « 123456 » selon les versions firmware). Ces valeurs ne sont pas configurables depuis l’interface graphique.
    Le fichier de référence est : /etc/config/ups/upsd.users sur le QNAP.

Solution complète
Étape 1 — Configurer l’addon NUT sur le Pi
Dans Home Assistant → Paramètres → Modules complémentaires → NUT → Configuration :

mode: netserver

devices:
  - name: qnapups          # ← Obligatoire : doit s'appeler qnapups
    driver: usbhid-ups
    port: auto

users:
  - username: admin
    password: qnap-ups     # ← Vérifier dans /etc/config/ups/upsd.users sur le QNAP
    instcmds:
      - all
    actions:
      - set
    upsmon: slave

:light_bulb: Vérifier le vrai password utilisé par votre QNAP :
cat /etc/config/ups/upsd.users
Le champ « password » est celui à utiliser côté NUT.

Étape 2 — Exposer le port 3493 sur le réseau
Par défaut, l’addon NUT tourne dans un container Docker isolé. Le port doit être publié vers l’hôte.
Dans HA → Addon NUT → onglet « Réseau » : saisir 3493 dans le champ hôte en face de 3493/tcp, puis Enregistrer et Redémarrer l’addon.

Vérification depuis le Pi (terminal VS Code ou addon Terminal) :

netstat -tlnp | grep 3493

Doit afficher : 0.0.0.0:3493

Étape 3 — Corriger la configuration upsmon du QNAP
Le fichier /etc/config/ups/upsmon.conf contient la ligne MONITOR utilisée par QTS. Elle pointe par défaut sur localhost au lieu du Pi.

Éditer le fichier :

vi /etc/config/ups/upsmon.conf

Changer la ligne MONITOR :

AVANT (défaut) :

MONITOR qnapups@localhost 1 admin 123456 master

APRÈS :

MONITOR qnapups@192.168.1.10 1 admin change_me slave

↑ ↑

IP du Pi HA Password du upsd.users QNAP

Redémarrer le service UPS sur le QNAP :

/etc/init.d/ups.sh restart

Vérifications
Depuis le QNAP (SSH)

Test de connectivité TCP

curl 192.168.1.10:3493

→ Doit retourner une erreur HTTP/0.9 (normal, NUT parle son propre protocole)

Test de récupération des données

upsc qnapups@192.168.1.10

→ Doit afficher les données UPS (battery.charge, ups.status, etc.)

Test d’authentification

/usr/sbin/upsmon -D 2>&1 | head -10

→ Doit afficher : Logged into UPS qnapups@192.168.1.10

Dans l’interface QTS
Panneau de configuration → Système → Alimentation → UPS → Rafraîchir la page.
Les champs Etat, Capacité batterie, Temps de protection et Modèle doivent être remplis.

Diagnostic avancé
Le port 3493 n’est pas joignable depuis le QNAP
• Vérifier que l’addon NUT est bien démarré dans HA
• Vérifier que le port est bien mappé : HA → Addon NUT → onglet Réseau
• Tester depuis un PC Windows : Test-NetConnection -ComputerName 192.168.1.10 -Port 3493

ERR ACCESS-DENIED dans les logs upsmon
• Le username ou password ne correspond pas à ce qui est configuré dans l’addon NUT
• Vérifier /etc/config/ups/upsd.users sur le QNAP pour le vrai password
• S’assurer que l’addon NUT accepte le password (longueur minimum, caractères spéciaux)

upsmon tourne mais QTS affiche toujours ‹ – ›
• Le nom de l’UPS dans la ligne MONITOR n’est pas « qnapups »
• QTS utilise /sbin/upsc qnapups@localhost en interne — le nom est hardcodé
• Renommer l’UPS en « qnapups » côté NUT est obligatoire

Trouver les vraies valeurs hardcodées de votre firmware

Username et password utilisés par QTS :

cat /etc/config/ups/upsd.users

Ligne MONITOR active :

cat /etc/config/ups/upsmon.conf | grep MONITOR

Script de démarrage UPS (pour comprendre la logique) :

cat /etc/init.d/usb_ups.sh | grep -E ‹ qnapups|upsmon|upsc ›

Note sur la limitation de QTS
Ce comportement n’est pas un bug à proprement parler, mais une limitation de conception.
L’interface « Esclave réseau UPS » de QTS a été conçue pour fonctionner avec un autre QNAP
en mode serveur (qui utilise également « qnapups » comme nom d’UPS).

Elle n’a pas été prévue pour s’intégrer avec des serveurs NUT tiers.
Une feature request peut être soumise à QNAP pour permettre de configurer
le nom d’UPS, le username et le password depuis l’interface graphique.

Récapitulatif des changements
Paramètre Côté Pi (addon NUT) Côté QNAP
Nom de l’UPS qnapups (obligatoire) MONITOR qnapups@…
IP du serveur Bind sur 0.0.0.0:3493 192.168.1.10 (IP du Pi)
Username admin admin (hardcodé)
Password 123456 change_me (depuis upsd.users)
Rôle master slave