148 lines
5.1 KiB
Markdown
148 lines
5.1 KiB
Markdown
# Historique Session - 30 Décembre 2025
|
|
|
|
## Résumé
|
|
Session de développement pour aligner le payload MQTT discovery de Pilot v2 avec la spécification Home Assistant et le format v1 qui fonctionne.
|
|
|
|
## Objectif
|
|
Faire fonctionner la découverte automatique Home Assistant pour le device "asus" sur le broker MQTT 10.0.0.3:1883.
|
|
|
|
## Problèmes identifiés et résolus
|
|
|
|
### 1. Configuration MQTT ✅
|
|
- **Problème**: Device configuré avec $hostname, broker à 10.0.0.3:1883
|
|
- **Solution**: Configuration validée dans `pilot-v2/config.yaml`
|
|
- **Résultat**: Hostname "asus" correctement expansé
|
|
|
|
### 2. Device Info non configurable ✅
|
|
- **Problème**: manufacturer, model, sw_version hardcodés
|
|
- **Solution**: Ajout de ces champs dans `config/mod.rs` avec valeurs par défaut
|
|
- **Commit**: `df871dd` - "Fix Home Assistant MQTT discovery compliance"
|
|
|
|
### 3. Payload discovery non conforme ✅
|
|
- **Problème initial**: Plusieurs champs manquants par rapport à v1
|
|
- **Corrections apportées**:
|
|
- ✅ Ajout `payload_available: "online"` et `payload_not_available: "offline"`
|
|
- ✅ Suppression device_class "power" incorrect pour cpu_usage
|
|
- ✅ Ajout puis suppression du champ `"type"` (non requis par HA spec)
|
|
- ✅ Topics de découverte: `homeassistant/{component}/{node_id}/{entity_name}/config`
|
|
- ✅ Entity naming: `{metric}_{device}` (ex: cpu_usage_asus)
|
|
|
|
### 4. Topics MQTT restructurés ✅
|
|
- **Sensors**:
|
|
- State topic: `pilot/{device}/{metric}` (sans /state/)
|
|
- Availability: `pilot/{device}/{metric}/available`
|
|
- **Switches**:
|
|
- State topic: `pilot/{device}/{metric}/state` (avec /state)
|
|
- Availability: `pilot/{device}/{metric}/available`
|
|
- Command topic: `pilot/{device}/cmd/{action}/set`
|
|
|
|
### 5. Fonction publish_switch_state ajoutée ✅
|
|
- **Raison**: Sensors et switches ont des formats de topics différents
|
|
- **Fichier**: `pilot-v2/src/mqtt/mod.rs`
|
|
- **Fonction**: Ajoute `/state` à la fin du topic pour les switches
|
|
|
|
## Structure du payload final (conforme HA)
|
|
|
|
```json
|
|
{
|
|
"name": "cpu_usage_asus",
|
|
"unique_id": "asus_cpu_usage",
|
|
"state_topic": "pilot/asus/cpu_usage",
|
|
"availability_topic": "pilot/asus/cpu_usage/available",
|
|
"payload_available": "online",
|
|
"payload_not_available": "offline",
|
|
"device": {
|
|
"identifiers": ["asus"],
|
|
"name": "asus",
|
|
"manufacturer": "Asus",
|
|
"model": "Laptop",
|
|
"sw_version": "2.0.0",
|
|
"suggested_area": "Bureau"
|
|
},
|
|
"unit_of_measurement": "%",
|
|
"icon": "mdi:chip"
|
|
}
|
|
```
|
|
|
|
**Topic de publication**: `homeassistant/sensor/asus/cpu_usage_asus/config`
|
|
|
|
## Commits créés
|
|
|
|
1. **df871dd** - Fix Home Assistant MQTT discovery compliance
|
|
- Ajout payload_available/not_available
|
|
- Device info configurable
|
|
- Correction device_class
|
|
|
|
2. **60b622c** - Align MQTT discovery with v1 format and HA specification
|
|
- Restructuration topics (sensors vs switches)
|
|
- Fonction publish_switch_state
|
|
- Entity naming corrigé
|
|
|
|
3. **ff3fc65** - Remove 'type' field from discovery payload per HA spec
|
|
- Suppression du champ "type" non requis
|
|
|
|
## Problème en cours ⚠️
|
|
|
|
### Connexion MQTT refuse (Connection refused os error 111)
|
|
- **Symptôme**: `rumqttc` ne parvient pas à se connecter au broker 10.0.0.3:1883
|
|
- **Tests effectués**:
|
|
- ✅ `nc -zv 10.0.0.3 1883` → Port ouvert
|
|
- ✅ `telnet 10.0.0.3 1883` → Connexion réussie
|
|
- ❌ Pilot v2 → Connection refused
|
|
- **Note importante**: L'utilisateur a confirmé avoir VU le device dans HA, mais il est maintenant déconnecté
|
|
- **Hypothèse**: Une instance précédente a réussi à se connecter et publier la découverte, puis s'est déconnectée
|
|
|
|
### Actions à faire après redémarrage
|
|
|
|
1. Vérifier que le broker MQTT est bien démarré
|
|
2. Vérifier s'il y a des logs du broker expliquant les refus de connexion
|
|
3. Tester si une autre application (Python v1) arrive à se connecter depuis "asus"
|
|
4. Vérifier les pare-feu locaux
|
|
5. Essayer de relancer Pilot et vérifier les logs détaillés
|
|
|
|
## Fichiers modifiés
|
|
|
|
```
|
|
pilot-v2/src/ha/mod.rs - Structure discovery, topics, payload
|
|
pilot-v2/src/mqtt/mod.rs - Fonction publish_switch_state
|
|
pilot-v2/src/runtime/mod.rs - Utilisation publish_switch_state
|
|
pilot-v2/src/config/mod.rs - Device info configurable
|
|
pilot-v2/config.yaml - Configuration asus
|
|
config/config.example.yaml - Documentation device info
|
|
```
|
|
|
|
## État actuel
|
|
|
|
- ✅ Payload discovery 100% conforme à HA spec
|
|
- ✅ Tous les topics correctement formatés
|
|
- ✅ Code compilé sans erreur
|
|
- ✅ Device détecté dans HA (confirmation utilisateur)
|
|
- ❌ Problème de connexion MQTT persistant
|
|
|
|
## Commandes utiles pour debug
|
|
|
|
```bash
|
|
# Vérifier si Pilot tourne
|
|
ps aux | grep pilot-v2
|
|
|
|
# Tester la connexion MQTT
|
|
nc -zv 10.0.0.3 1883
|
|
|
|
# Lancer Pilot avec logs
|
|
RUST_LOG=debug ./pilot-v2/target/release/pilot-v2
|
|
|
|
# Voir les logs
|
|
tail -f /tmp/pilot_reconnect.log
|
|
|
|
# Tuer toutes les instances
|
|
pkill -9 pilot-v2
|
|
```
|
|
|
|
## Prochaines étapes
|
|
|
|
1. **Résoudre le problème de connexion MQTT**
|
|
2. Vérifier que le device reste "online" dans HA
|
|
3. Tester les commandes (shutdown, reboot, etc.)
|
|
4. Désactiver dry_run mode si les tests sont concluants
|
|
5. Configurer le service systemd pour démarrage automatique
|