TigerTag Firebase

Référence d'intégration tierceTigerTag Firebase Integration

Connectez Home Assistant, une balance ESP32 ou un script Python à un compte TigerTag.

Ce dépôt décrit comment n'importe quel client se connecte avec les identifiants TigerTag de l'utilisateur, lit ses bobines de filament et ses racks dans Firestore, et y réécrit le poids des bobines. Ce qui est documenté ici est ce qui est déployé, et chaque modification est consignée dans le changelog.

0.1.3Dernière version publiée du contrat (CHANGELOG, 2 mai 2026)
1 hDurée de vie d'un idToken : rafraîchissez-le avant son expiration
5 minIntervalle d'interrogation minimal recommandé
3 moisPréavis minimal de dépréciation avant qu'un champ soit renommé ou supprimé

Comment un client se connecte à TigerTag

Tous les clients suivent les mêmes quatre étapes : récupérer la configuration Firebase publique, se connecter en tant qu'utilisateur, appeler l'API REST de Firestore avec le jeton de l'utilisateur, et garder ce jeton à jour.

  1. 1

    Récupérer la configuration publique

    Un seul GET renvoie la configuration du projet Firebase. L'apiKey est publique par conception : elle identifie le projet, pas l'appelant. Mettez-la en cache ; un rafraîchissement hebdomadaire suffit.

    01-firebase-config.md
  2. 2

    Se connecter en tant qu'utilisateur

    L'e-mail et le mot de passe de l'utilisateur renvoient un UID, un idToken valable 1 heure et un refreshToken. Google Sign-In exige un navigateur : les clients sans interface utilisent donc un mot de passe.

    02-authentication.md
  3. 3

    Lire et écrire dans Firestore

    Envoyez l'idToken comme jeton Bearer. Les bobines se trouvent dans users/{uid}/inventory, les racks dans users/{uid}/racks ; les poids sont en grammes nets, les dates en millisecondes Unix.

    03-data-model.md
  4. 4

    Garder le jeton à jour

    Rafraîchissez l'idToken avant la fin de l'heure et remplacez les deux jetons stockés. En cas de permission-denied, rafraîchissez une fois et relancez la lecture une fois.

    Rafraîchir l'idToken

Les trois appels, tirés de la documentation

GET  https://tigertag-cdn.web.app/__/firebase/init.json

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={apiKey}
     { "email": "user@example.com", "password": "…", "returnSecureToken": true }

GET  https://firestore.googleapis.com/v1/projects/{projectId}/databases/(default)/documents/users/{uid}/inventory
     Authorization: Bearer {idToken}

Les valeurs entre accolades proviennent de l'appel précédent : apiKey et projectId de la configuration, uid et idToken de la connexion.

Intégrations documentées dans ce dépôt

Chaque guide de docs/clients couvre l'authentification, les données lues ou écrites, la correspondance des champs et le code. Les extraits ci-dessous sont copiés des guides.

Ébauche de composant

Home Assistant

Un composant personnalisé Home Assistant qui expose un capteur par bobine, dont l'état est le poids restant en grammes. Le guide couvre aussi les inventaires des amis, la pagination et le stockage des jetons ; le config flow et le capteur sont des squelettes, et un composant entièrement fonctionnel reste à écrire.

{
  "domain": "tigertag",
  "name":   "TigerTag",
  "version": "0.1.0",
  "requirements": ["pyrebase4>=4.5.0"],
  "config_flow": true,
  "iot_class": "cloud_polling"
}
Sketch Arduino

ESP32 / Arduino

Pour une balance ou un appareil NFC : retrouver une bobine à partir de l'UID RFID scanné (uid, puis twin_uid), calculer le poids net et écrire weight_available et last_update avec un masque de mise à jour. Le guide se termine par un sketch ESP32 complet (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Client complet

Python CLI

Un client Python minimal basé sur Pyrebase4 : il se connecte, liste vos bobines et affiche le nombre de bobines de chaque ami. Le guide contient le script entier et un exemple d'exécution.

pip install -r requirements.txt
python tigertag_client.py
Script complet

Spoolman bridge

Une passerelle à sens unique de TigerTag vers une instance Spoolman : les marques deviennent des fournisseurs, chaque combinaison marque, matériau et couleur devient un filament, et chaque document d'inventaire devient une bobine, créée ou mise à jour via l'API REST de Spoolman. À lancer depuis cron, systemd ou Docker.

pip install -r requirements.txt
export TIGERTAG_EMAIL=you@example.com
export TIGERTAG_PASSWORD=yourpassword
export SPOOLMAN_URL=http://192.168.1.10:7912
export DRY_RUN=1                    # dry-run mode
python3 sync.py
Contrat d'appareil

TigerScale

Le contrat que suit une TigerScale ou une balance compatible pour apparaître en ligne dans Tiger Studio Manager et l'application mobile TigerTag : un document de heartbeat toutes les 30 secondes, une mise à jour du poids à chaque mesure stable, et des tags jumeaux écrits en un seul lot atomique.

users/{uid}/scales/{mac}          ← heartbeat, every 30 s
users/{uid}/inventory/{spoolId}   ← weight_available + last_update

Vous développez pour une autre plateforme ? Un nouveau guide va dans docs/clients, un exemple exécutable facultatif dans examples/. CONTRIBUTING.md

Le compte de l'utilisateur, les règles de l'utilisateur

Aucune clé partagée à protéger, aucun jeton maître susceptible de fuir : un client peut faire exactement ce que son utilisateur peut faire, et Firestore l'impose côté serveur.

Pas de compte de service

Chaque client se connecte avec les identifiants de l'utilisateur final. N'embarquez jamais le SDK firebase-admin ni aucune clé d'administration dans un client tiers.

Les Security Rules décident

Les Firestore Security Rules vérifient chaque requête par rapport à request.auth.uid : les propriétaires lisent et écrivent leurs propres documents, les amis peuvent lire l'inventaire et les racks, et tout ce qui n'est pas autorisé est refusé. La copie publique des règles se trouve dans rules/firestore.rules.

Un lien par amitié

Accepter une demande d'ami écrit un document de chaque côté. Tant que users/{friend}/friends/{you} existe, vous pouvez lire l'inventaire et les racks de cet ami, en lecture seule ; le supprimer coupe l'accès immédiatement.

04-friend-system.md

Interrogation raisonnable

Interrogez au plus toutes les 5 minutes, jamais en dessous de 30 secondes, n'écrivez que lorsqu'une valeur change, et passez une limite aux lectures de listes (200 bobines, 50 racks). Firebase App Check n'est pas imposé.

05-rate-limiting.md

Un contrat public pour les intégrateurs

Le dépôt est traité comme un contrat public : les changements qui touchent les clients arrivent dans ce dépôt dans la même version, et le changelog consigne chacun d'eux sous Added, Changed, Deprecated, Removed, Fixed ou Security.

Ne changera pas sans préavis

  • Les chemins de documents tels que users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} et users/{uid}/friends/{friendUid}.
  • Le nom et la signification de chaque champ documenté : weight_available est en grammes nets, last_update en millisecondes Unix, deleted: true signifie une suppression logique.
  • Le modèle d'accès des amis, et les endpoints Firebase Auth avec lesquels un client se connecte.
  • L'apiKey et le projectId, sauf si le projet entier déménage, ce qui serait annoncé au moins 6 mois à l'avance.

Peut changer : soyez prudent

  • Les tables de référence s'enrichissent de nouvelles marques et de nouveaux matériaux ; les identifiants numériques ne font que s'ajouter et ne sont jamais réutilisés.
  • Les endpoints HTTPS de commodité sur cdn.tigertag.io peuvent faire évoluer la forme de leurs requêtes et réponses.
  • Les nouvelles collections et les nouveaux champs sont toujours additifs : ignorez les champs que vous ne connaissez pas et restez compatible.

Documentation de référence

Les documents de base sur lesquels repose toute intégration, dans l'ordre où un client en a besoin.

Partie de l'écosystème TigerTag

Ce guide couvre le compte cloud. Les puces, les applications et les SDK ont leurs propres dépôts.

Le protocole TigerTag

Le format ouvert de puce NFC pour les bobines de filament et les flacons de résine, sa spécification et la base de données de référence.

Ouvrir

Tiger Studio Manager

L'application de bureau (Electron) qui gère le même inventaire ; la documentation est vérifiée par rapport à ses versions.

Dépôt

SDK TigerTag

Lire, vérifier, créer et modifier des puces TigerTag hors ligne, en JavaScript ou en Python, sous Apache-2.0.

Questions

Ai-je besoin d'un compte de service ou d'une clé d'administration ?

Non. Chaque client se connecte avec l'e-mail et le mot de passe TigerTag de l'utilisateur final, et les Firestore Security Rules décident de ce que cet utilisateur peut lire ou écrire. Il n'existe aucune clé d'administration partagée, et le SDK firebase-admin ne doit jamais être utilisé dans un client tiers.

Pourquoi l'apiKey Firebase est-elle publique ?

L'apiKey identifie le projet Firebase de TigerTag, pas l'appelant. Sans idToken valide, obtenu en se connectant en tant qu'utilisateur réel, elle ne donne accès à rien ; le contrôle d'accès repose sur l'authentification et sur les Security Rules.

Home Assistant ou un ESP32 peuvent-ils se connecter avec Google ?

Pas directement : Google Sign-In nécessite une redirection dans un navigateur. Un utilisateur qui n'a jamais utilisé que Google définit d'abord un mot de passe sur son compte, via la procédure de mot de passe oublié de l'application de bureau ou mobile, puis se connecte avec son e-mail et son mot de passe.

À quelle fréquence mon intégration peut-elle interroger ?

Au plus toutes les 5 minutes pour un capteur, toutes les 15 minutes pour une vue d'ensemble des racks, et jamais en dessous de 30 secondes. Une balance n'écrit que lorsqu'un poids change. Les lectures de listes doivent passer une limite : 200 pour l'inventaire, 50 pour les racks.

Mon intégration peut-elle lire les bobines d'un ami ?

Oui, en lecture seule. Lorsque deux utilisateurs sont amis, chacun possède un document pour l'autre sous users/{uid}/friends, et les règles permettent à un ami de lire l'inventaire et les racks. Chacun des deux peut mettre fin à l'amitié à tout moment, ce qui coupe l'accès immédiatement.

Et si la production ne correspond pas à cette documentation ?

La documentation fait foi : un écart signifie qu'une régression a été livrée. Ouvrez une issue sur le dépôt avec la page, le chemin lu ou écrit et la réponse, en retirant les jetons et les clés privées.

Sous quelle licence puis-je réutiliser le code ?

Les Security Rules et tous les extraits de code de la documentation sont sous Apache-2.0, et l'attribution n'est pas exigée pour les extraits collés dans votre propre projet. La documentation elle-même est sous CC-BY-4.0. Le nom, le logo et le service TigerTag ne sont pas couverts par ces licences.

Démarrez votre intégration

Choisissez le guide de votre plateforme dans les liens rapides du README, et suivez-le de la connexion jusqu'à votre première lecture.

Ouvrir les liens rapides