TigerTag Firebase

Referenz für Drittanbieter-IntegrationenTigerTag Firebase Integration

Verbinden Sie Home Assistant, eine ESP32-Waage oder ein Python-Skript mit einem TigerTag-Konto.

Dieses Repository beschreibt, wie sich ein beliebiger Client mit den eigenen TigerTag-Zugangsdaten des Nutzers anmeldet, dessen Filamentspulen und Racks in Firestore liest und Spulengewichte zurückschreibt. Was hier dokumentiert ist, ist das, was bereitgestellt ist, und jede Änderung daran wird im Changelog festgehalten.

0.1.3Neueste veröffentlichte Vertragsversion (CHANGELOG, 2. Mai 2026)
1 hGültigkeitsdauer eines idToken: vor Ablauf erneuern
5 minEmpfohlenes minimales Abfrageintervall
3 MonateMindestvorlauf für eine Abkündigung, bevor ein Feld umbenannt oder entfernt wird

So verbindet sich ein Client mit TigerTag

Jeder Client folgt denselben vier Schritten: die öffentliche Firebase-Konfiguration abrufen, sich als Nutzer anmelden, die Firestore-REST-API mit dem Token des Nutzers aufrufen und dieses Token aktuell halten.

  1. 1

    Öffentliche Konfiguration abrufen

    Ein einziger GET liefert die Konfiguration des Firebase-Projekts. Der apiKey ist absichtlich öffentlich: Er identifiziert das Projekt, nicht den Aufrufer. Speichern Sie ihn zwischen; eine wöchentliche Aktualisierung genügt.

    01-firebase-config.md
  2. 2

    Als Nutzer anmelden

    E-Mail und Passwort des Nutzers liefern eine UID, ein idToken für 1 Stunde und ein refreshToken. Google Sign-In benötigt einen Browser, daher verwenden Clients ohne Oberfläche ein Passwort.

    02-authentication.md
  3. 3

    Firestore lesen und schreiben

    Senden Sie das idToken als Bearer-Token. Spulen liegen in users/{uid}/inventory, Racks in users/{uid}/racks; Gewichte sind Nettogramm, Datumsangaben Unix-Millisekunden.

    03-data-model.md
  4. 4

    Token aktuell halten

    Erneuern Sie das idToken, bevor die Stunde abläuft, und ersetzen Sie beide gespeicherten Tokens. Bei permission-denied einmal erneuern und den Lesevorgang einmal wiederholen.

    idToken erneuern

Die drei Aufrufe aus der Dokumentation

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}

Die Werte in geschweiften Klammern stammen aus dem vorherigen Aufruf: apiKey und projectId aus der Konfiguration, uid und idToken aus der Anmeldung.

In diesem Repository dokumentierte Integrationen

Jeder Leitfaden in docs/clients behandelt die Authentifizierung, die gelesenen oder geschriebenen Daten, die Feldzuordnung und den Code. Die folgenden Ausschnitte sind aus den Leitfäden übernommen.

Komponentenentwurf

Home Assistant

Eine benutzerdefinierte Home-Assistant-Komponente, die pro Spule einen Sensor bereitstellt, mit dem Restgewicht in Gramm als Zustand. Der Leitfaden behandelt auch die Inventare von Freunden, Paginierung und Token-Speicherung; Config Flow und Sensor sind Gerüste, eine vollständig lauffähige Komponente muss noch geschrieben werden.

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

ESP32 / Arduino

Für eine Waage oder ein NFC-Gerät: eine Spule anhand der gescannten RFID-UID suchen (uid, dann twin_uid), das Nettogewicht berechnen und weight_available und last_update mit einer Update-Maske schreiben. Der Leitfaden endet mit einem vollständigen ESP32-Sketch (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Vollständiger Client

Python CLI

Ein minimaler Python-Client auf Basis von Pyrebase4: Er meldet sich an, listet Ihre Spulen auf und zeigt, wie viele Spulen jeder Freund hat. Der Leitfaden enthält das gesamte Skript und einen Beispiellauf.

pip install -r requirements.txt
python tigertag_client.py
Vollständiges Skript

Spoolman bridge

Eine Einweg-Brücke von TigerTag zu einer Spoolman-Instanz: Marken werden zu Herstellern, jede Kombination aus Marke, Material und Farbe wird zu einem Filament, und jedes Inventardokument wird zu einer Spule, die über die REST-API von Spoolman angelegt oder aktualisiert wird. Ausführbar per cron, systemd oder 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
Gerätevertrag

TigerScale

Der Vertrag, dem eine TigerScale oder kompatible Waage folgt, um in Tiger Studio Manager und der mobilen TigerTag-App online zu erscheinen: alle 30 Sekunden ein Heartbeat-Dokument, bei jeder stabilen Messung eine Gewichtsaktualisierung und Zwillings-Tags, die in einem einzigen atomaren Batch geschrieben werden.

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

Sie entwickeln für eine andere Plattform? Ein neuer Leitfaden gehört nach docs/clients, ein optionales lauffähiges Beispiel nach examples/. CONTRIBUTING.md

Das Konto des Nutzers, die Regeln des Nutzers

Es gibt keinen gemeinsamen Schlüssel zu schützen und kein Master-Token, das durchsickern könnte: Ein Client kann genau das tun, was sein Nutzer tun kann, und Firestore setzt das auf dem Server durch.

Kein Dienstkonto

Jeder Client meldet sich mit den eigenen Zugangsdaten des Endnutzers an. Liefern Sie niemals das firebase-admin SDK oder einen Admin-Schlüssel in einem Drittanbieter-Client aus.

Die Security Rules entscheiden

Die Firestore Security Rules prüfen jede Anfrage anhand von request.auth.uid: Eigentümer lesen und schreiben ihre eigenen Dokumente, Freunde dürfen Inventar und Racks lesen, und alles nicht Erlaubte wird abgelehnt. Die öffentliche Kopie der Regeln liegt in rules/firestore.rules.

Eine Verbindung pro Freundschaft

Wird eine Freundschaftsanfrage angenommen, entsteht auf jeder Seite ein Dokument. Solange users/{friend}/friends/{you} existiert, dürfen Sie Inventar und Racks dieses Freundes lesen, nur lesend; das Löschen beendet den Zugriff sofort.

04-friend-system.md

Rücksichtsvolles Abfragen

Fragen Sie höchstens alle 5 Minuten ab, nie in kürzeren Abständen als 30 Sekunden, schreiben Sie nur, wenn sich ein Wert ändert, und geben Sie bei Listenabfragen ein Limit an (200 Spulen, 50 Racks). Firebase App Check wird nicht erzwungen.

05-rate-limiting.md

Ein öffentlicher Vertrag für Integratoren

Das Repository wird als öffentlicher Vertrag behandelt: Änderungen, die Clients betreffen, erscheinen in diesem Repository mit demselben Release, und das Changelog verzeichnet jede einzelne als Added, Changed, Deprecated, Removed, Fixed oder Security.

Ändert sich nicht ohne Ankündigung

  • Dokumentpfade wie users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} und users/{uid}/friends/{friendUid}.
  • Name und Bedeutung jedes dokumentierten Feldes: weight_available ist Nettogramm, last_update Unix-Millisekunden, deleted: true bedeutet vorläufig gelöscht (Soft Delete).
  • Das Zugriffsmodell für Freunde und die Firebase-Auth-Endpunkte, über die sich ein Client anmeldet.
  • Der apiKey und die projectId, es sei denn, das gesamte Projekt zieht um, was mindestens 6 Monate im Voraus angekündigt wird.

Kann sich ändern: defensiv programmieren

  • Nachschlagetabellen erhalten neue Marken und Materialien; numerische IDs werden nur angehängt und nie wiederverwendet.
  • Komfort-HTTPS-Endpunkte unter cdn.tigertag.io können die Form ihrer Anfragen und Antworten weiterentwickeln.
  • Neue Collections und neue Felder kommen immer nur hinzu: Ignorieren Sie unbekannte Felder und bleiben Sie kompatibel.

Referenzdokumentation

Die Kerndokumente, auf denen jede Integration aufbaut, in der Reihenfolge, in der ein Client sie braucht.

Teil des TigerTag-Ökosystems

Dieser Leitfaden behandelt das Cloud-Konto. Die Chips, die Apps und die SDKs haben eigene Repositorys.

Das TigerTag-Protokoll

Das offene NFC-Chipformat für Filamentspulen und Harzflaschen, seine Spezifikation und die Referenzdatenbank.

Öffnen

Tiger Studio Manager

Die Desktop-App (Electron), die dasselbe Inventar verwaltet; die Dokumentation wird anhand ihrer Releases geprüft.

Repository

TigerTag-SDKs

TigerTag-Chips offline lesen, prüfen, erstellen und patchen, in JavaScript oder Python, unter Apache-2.0.

Fragen

Brauche ich ein Dienstkonto oder einen Admin-Schlüssel?

Nein. Jeder Client meldet sich mit der eigenen TigerTag-E-Mail und dem Passwort des Endnutzers an, und die Firestore Security Rules entscheiden, was dieser Nutzer lesen oder schreiben darf. Es gibt keinen gemeinsamen Admin-Schlüssel, und das firebase-admin SDK darf niemals in einem Drittanbieter-Client verwendet werden.

Warum ist der Firebase-apiKey öffentlich?

Der apiKey identifiziert das TigerTag-Firebase-Projekt, nicht den Aufrufer. Ohne gültiges idToken, das man durch Anmeldung als echter Nutzer erhält, gewährt er keinerlei Zugriff; die Zugriffskontrolle erfolgt über die Authentifizierung und die Security Rules.

Können sich Home Assistant oder ein ESP32 mit Google anmelden?

Nicht direkt: Google Sign-In erfordert eine Browser-Weiterleitung. Ein Nutzer, der bisher nur Google verwendet hat, legt zuerst über die Passwort-vergessen-Funktion der Desktop- oder Mobil-App ein Passwort für das Konto fest und meldet sich dann mit E-Mail und Passwort an.

Wie oft darf meine Integration abfragen?

Höchstens alle 5 Minuten für einen Sensor, alle 15 Minuten für eine Rack-Übersicht und nie in kürzeren Abständen als 30 Sekunden. Eine Waage schreibt nur, wenn sich ein Gewicht ändert. Listenabfragen sollten ein Limit angeben: 200 für das Inventar, 50 für Racks.

Kann meine Integration die Spulen eines Freundes lesen?

Ja, nur lesend. Sind zwei Nutzer befreundet, hat jeder unter users/{uid}/friends ein Dokument für den anderen, und die Regeln erlauben einem Freund, Inventar und Racks zu lesen. Jeder der beiden kann die Freundschaft jederzeit beenden, was den Zugriff sofort aufhebt.

Was, wenn die Produktion von dieser Dokumentation abweicht?

Die Dokumentation gilt: Eine Abweichung bedeutet, dass eine Regression ausgeliefert wurde. Eröffnen Sie ein Issue im Repository mit der Seite, dem gelesenen oder geschriebenen Pfad und der Antwort, ohne Tokens und private Schlüssel.

Unter welcher Lizenz darf ich den Code wiederverwenden?

Die Security Rules und alle Code-Ausschnitte in der Dokumentation stehen unter Apache-2.0, und für Ausschnitte, die Sie in Ihr eigenes Projekt einfügen, wird auf die Namensnennung verzichtet. Die Dokumentation selbst steht unter CC-BY-4.0. Name, Logo und Dienst von TigerTag fallen nicht unter diese Lizenzen.

Starten Sie Ihre Integration

Wählen Sie in den Schnelllinks des README den Leitfaden für Ihre Plattform und folgen Sie ihm von der Anmeldung bis zum ersten Lesezugriff.

Schnelllinks öffnen