Tricount (propriété de bunq) n'a aucune API publique documentée. Cette
intégration s'appuie sur tricount-api,
un package tiers qui reverse-engineer l'API mobile de Tricount à des fins
éducatives. Conséquences à accepter avant d'utiliser ce projet :
- Aucune garantie que ceci respecte les CGU de Tricount/bunq.
- Un changement d'API côté bunq peut casser l'intégration sans préavis,
et sans possibilité de hotfix côté ce projet tant que
tricount-apilui-même n'est pas mis à jour. - Pas de rate limiting documenté par la lib sous-jacente — l'intégration ne
fait aucun appel en rafale ni en parallèle par prudence, mais reste
dépendante du comportement de
tricount-apisur ce point.
Si tu veux une solution supportée officiellement, utilise l'app Tricount.
Même principe que l'intégration voix→Yazio : le pipeline Assist de Home Assistant (satellite vocal + agent de conversation) est déjà en place, ce projet ajoute le "skill" Tricount qui manque.
Voix → satellite Assist → agent de conversation
│
└─ script.tricount_add_expense ──▶ service tricount_voice.add_expense
(create_transaction, écriture directe)
Contrairement à Yazio, il n'y a pas d'étape de recherche/sélection ambiguë avant écriture (pas de base produit à matcher) — seulement des noms de tricount et de membres à résoudre. L'écriture est donc directe, sans confirmation orale systématique, tant que tricount et membres sont résolus sans ambiguïté. En cas d'échec (tricount ou membre introuvable, ambiguïté, API indisponible), le service renvoie une erreur exploitable et crée une notification persistante Home Assistant — pas de silence, pas de crash.
custom_components/tricount_voice/— intégration HA : config flow (génère des credentials device, pas de compte bunq requis), options flow pour ajouter des tricounts par token de partage, service natiftricount_voice.add_expense.custom_components/tricount_voice/tricount_adapter/— lib Python pure (credentials, résolution de tricount/membre par nom dicté, appels àtricount-api), vendée dans l'intégration, testée (pytest) sans dépendance à Home Assistant.homeassistant/scripts_tricount_voice.yaml— l'entitéscript.*à exposer à Assist.
- HACS → menu ⋮ → Dépôts personnalisés → ajouter
https://github.com/Aldorus/tricount-voice-ha, catégorie Intégration. - Installer « Tricount Voice » depuis HACS, redémarrer Home Assistant.
- Ajouter l'intégration : Paramètres → Appareils et services → Ajouter une intégration → « Tricount Voice ». Aucune saisie requise à cette étape — des credentials device sont générés automatiquement.
- Ajouter un tricount : sur l'intégration créée, ouvrir les Options, coller le token de partage du tricount (dans le lien d'invitation : Partager → Copier le lien) et un alias court à dire à voix haute (ex: "Colocs"). Répéter pour chaque tricount à connecter.
- Fusionner
homeassistant/scripts_tricount_voice.yamldansscripts.yaml, recharger les scripts. - Exposer l'entité à Assist : Paramètres → Voix → Exposer, activer
script.tricount_add_expense.
- Copier
custom_components/tricount_voice/dansconfig/custom_components/. - Suivre les étapes 2 à 6 ci-dessus.
"Ajoute une dépense de 45 dollars à l'épicerie dans le Tricount Colocs, payée par moi, séparée entre tout le monde."
tricount_aliaspeut être omis si un seul tricount est configuré.payerpeut être omis (défaut : "moi", résolu vers le "Payeur par défaut" configuré pour ce tricount).split_amongpeut être omis (défaut : tous les membres du tricount).
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
.venv/bin/pytest- Lecture des soldes par la voix ("combien je dois à qui") —
get_balancesexiste déjà dans l'adaptateur mais n'est pas exposé en service, prévu pour v2. - Édition/suppression de transaction par la voix — surface d'erreur trop grande pour du vocal (risque de supprimer la mauvaise dépense).
- Pièces jointes/reçus, remboursements, multi-devises avec conversion.
- Publication HACS formelle avec config flow UI complet — objectif v1 = usage perso fonctionnel.
- Pas testé dans une vraie instance Home Assistant (config flow, options flow) — seule la logique métier (
tricount_adapter) est couverte par des tests automatisés, contre un double du clienttricount-api(pas d'accès réseau réel dans les tests). - La résolution de membre par nom dicté est un matching texte simple (normalisation accents/casse/pluriel + égalité ou inclusion) — pas de tolérance aux fautes de prononciation au-delà de ça.