> ## Documentation Index
> Fetch the complete documentation index at: https://docs.plato.ae/llms.txt
> Use this file to discover all available pages before exploring further.

# Dépannage

> Diagnostiquer les problèmes de pilote, d'imprimante, de file d'attente, Redis, HTTPS et de console.

# Dépannage

Commencez par le plus petit chemin :

1. Santé du processus du pilote.
2. Accessibilité TCP du pilote à l’imprimante.
3. État de la file d'attente.
4. Configuration de l'imprimante de la console.
5. HTTPS ou problèmes de confiance du navigateur.

## Pilote non joignable

Vérifier:

```sh theme={null}
curl http://localhost:8080/health
```

Si la santé locale échoue :

* Confirmez que `plato-printer.exe` est en cours d'exécution.
* Confirmez que `config.json` est valide JSON.
* Confirmez que `server.port` n’est pas déjà utilisé.
* Vérifiez les journaux de démarrage de `Port already in use`.

Si le service de santé local passe mais que POS ne peut pas l'atteindre :

* Ouvrez le pare-feu Windows pour `server.port`.
* Utilisez l'adresse réseau du pilote indiquée dans la bannière de démarrage.
* Confirmez que le périphérique POS est sur le même réseau ou sur le même VLAN autorisé.

## Imprimante hors ligne

Appel:

```sh theme={null}
curl -X POST http://localhost:8080/status \
  -H "Content-Type: application/json" \
  -d '{"ip_address":"192.168.1.50","port":"9100","validate":true}'
```

Causes courantes :

| Dernière erreur                        | Signification                                                | Réparer                                                                                     |
| -------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| `Connection Refused`                   | L'hôte est joignable mais le port est fermé.                 | Vérifiez le port de l'imprimante et les paramètres TCP bruts.                               |
| `Connection Timeout`                   | Impossible d'atteindre l'adresse IP/le port de l'imprimante. | Vérifiez l'IP, le réseau, le VLAN, le pare-feu et l'alimentation de l'imprimante.           |
| `Printer open timed out after 2000ms`  | La connexion TCP n'a pas abouti.                             | Vérifiez le chemin réseau de l'imprimante.                                                  |
| `Printer write timed out after 6000ms` | Le socket s'est ouvert mais n'a pas vidé l'écriture.         | Redémarrez l'imprimante, vérifiez le tampon, le réseau ou le micrologiciel de l'imprimante. |
| `TCP connection closed`                | L'imprimante a fermé le socket de manière inattendue.        | Revérifiez le port brut de l’imprimante et la taille de la charge utile de la tâche.        |

## Emplois bloqués

Inspecter les files d'attente :

```sh theme={null}
curl http://localhost:8080/queue-status
```

Lire:

* `waiting` : tâches prêtes mais non actives.
* `active` : impression en cours.
* `delayed` : tâches futures planifiées ou avec nouvelle tentative retardée.
* `failed` : travaux ayant échoué conservés par BullMQ.
* `totalPending` : attente et retard sur toutes les imprimantes.
* `isProcessing` : il existe au moins un travail actif.

Si les tâches ayant échoué sont réessayées indéfiniment, corrigez d'abord la connexion de l'imprimante. La file d'attente sera automatiquement récupérée une fois que l'imprimante sera accessible.

## Demande d'impression acceptée mais rien ne s'imprime

Si `/print` renvoie `{ "ok": true, "queued": true }`, le conducteur a accepté le travail.

Vérifications suivantes :

1. `GET /queue-status`.
2. `POST /status` avec `validate: true`.
3. IP de l'imprimante et port dans la configuration de la console.
4. Le modèle d'imprimante prend en charge le raster ESC/POS sur TCP.
5. L'imprimante a du papier et n'est pas en pause.

## Adresse de l'imprimante manquante

Le pilote actuel nécessite à la fois :

```json theme={null}
{
  "ip_address": "192.168.1.50",
  "port": "9100"
}
```

Dans la console, cela signifie généralement que l'adresse IP ou le port de l'imprimante physique est manquant. Le pilote URL n'est pas le même que l'IP de l'imprimante.

## HTTPS échoue

Vérifier:

```sh theme={null}
curl http://localhost:8080/ca.crt
curl https://plato-printer.local/health
```

Corrections probables :

* Installez le certificat CA sur l'appareil POS.
* Faites en sorte que `plato-printer.local` soit résolu sur la machine pilote.
* Ouvrez le port `443`.
* Confirmez que `assets/certs` existe.
* Confirmez que Caddy a démarré dans les journaux.

## Échec du maillage

Vérifier:

```sh theme={null}
curl http://localhost:8080/mesh-status
```

Si le maillage est désactivé, définissez :

```json theme={null}
{
  "features": {
    "meshEnabled": true
  }
}
```

Si HTTPS est utilisé, le maillage utilise :

```txt theme={null}
wss://plato-printer.local/mesh
```

## Redis ne parvient pas à démarrer

Le démarrage de Redis intégré peut échouer si :

* La version binaire Redis configurée est manquante ou corrompue.
* Le port Redis configuré est déjà utilisé.
* Windows bloque le binaire téléchargé.
* La version détectée de Redis ne correspond pas à `redis.version`.

Correctifs :

* Exécutez le script du bundle pour préparer `redis-binaries`.
* Remplacez `redis.port`.
* Supprimez le mauvais dossier `redis-binaries/<version>` et reconstruisez-le.
* Utilisez `redis.mode: "external"` avec un serveur Redis connu et en bon état.

## Réinitialisation sécurisée

Pour une réinitialisation locale pendant le développement :

```sh theme={null}
pnpm --filter @plato/pc-printer clean
```

Cela supprime `dist`, `output`, `logs`, `plato-printer.zip` et `dump.rdb`.

En production, ne supprimez pas `dump.rdb`, sauf si vous souhaitez intentionnellement effacer les files d'attente persistantes et l'état connu du registre de l'imprimante.
