TigerTag Firebase

Referentie voor integraties van derdenTigerTag Firebase Integration

Verbind Home Assistant, een ESP32-weegschaal of een Python-script met een TigerTag-account.

Deze repository beschrijft hoe elke client inlogt met de eigen TigerTag-inloggegevens van de gebruiker, diens filamentspoelen en rekken in Firestore leest en spoelgewichten terugschrijft. Wat hier gedocumenteerd is, is wat er draait, en elke wijziging daarin wordt vastgelegd in de changelog.

0.1.3Nieuwste uitgebrachte versie van het contract (CHANGELOG, 2 mei 2026)
1 hGeldigheidsduur van een idToken: vernieuw het voordat het verloopt
5 minAanbevolen minimale polling-interval
3 maandenMinimale aankondigingstermijn voordat een veld wordt hernoemd of verwijderd

Hoe een client verbinding maakt met TigerTag

Elke client volgt dezelfde vier stappen: de openbare Firebase-configuratie ophalen, inloggen als de gebruiker, de Firestore REST API aanroepen met het token van de gebruiker, en dat token geldig houden.

  1. 1

    Haal de openbare configuratie op

    Eén GET geeft de configuratie van het Firebase-project terug. De apiKey is bewust openbaar: hij identificeert het project, niet de aanroeper. Sla hem in de cache op; wekelijks vernieuwen is genoeg.

    01-firebase-config.md
  2. 2

    Log in als de gebruiker

    Het eigen e-mailadres en wachtwoord van de gebruiker leveren een UID, een idToken van 1 uur en een refreshToken op. Google Sign-In heeft een browser nodig, dus headless clients gebruiken een wachtwoord.

    02-authentication.md
  3. 3

    Lees en schrijf in Firestore

    Stuur het idToken mee als Bearer-token. Spoelen staan in users/{uid}/inventory, rekken in users/{uid}/racks; gewichten zijn netto grammen, datums Unix-milliseconden.

    03-data-model.md
  4. 4

    Houd het token geldig

    Vernieuw het idToken voordat het uur om is en vervang beide opgeslagen tokens. Bij een permission-denied vernieuw je één keer en probeer je de leesactie één keer opnieuw.

    Het idToken vernieuwen

De drie aanroepen, uit de documentatie

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}

De waarden tussen accolades komen uit de vorige aanroep: apiKey en projectId uit de configuratie, uid en idToken uit het inloggen.

Integraties die in deze repository zijn gedocumenteerd

Elke handleiding in docs/clients behandelt de authenticatie, de gegevens die worden gelezen of geschreven, de veldtoewijzing en de code. De fragmenten hieronder komen uit de handleidingen.

Schets van een component

Home Assistant

Een custom component voor Home Assistant die per spoel één sensor aanbiedt, met het resterende gewicht in grammen als status. De handleiding behandelt ook de inventarissen van vrienden, paginering en de opslag van tokens; de config flow en de sensor zijn skeletten, en een volledig werkend component moet nog worden geschreven.

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

ESP32 / Arduino

Voor een weegschaal of NFC-apparaat: zoek een spoel op aan de hand van de gescande RFID-UID (uid, daarna twin_uid), bereken het nettogewicht en schrijf weight_available en last_update met een update mask. De handleiding eindigt met een volledige ESP32-sketch (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Volledige client

Python CLI

Een minimale Python-client op basis van Pyrebase4: hij logt in, toont je spoelen en geeft weer hoeveel spoelen elke vriend heeft. De handleiding bevat het volledige script en een voorbeelduitvoer.

pip install -r requirements.txt
python tigertag_client.py
Volledig script

Spoolman bridge

Een eenrichtingsbrug van TigerTag naar een Spoolman-instantie: merken worden leveranciers, elke combinatie van merk, materiaal en kleur wordt een filament, en elk inventarisdocument wordt een spoel, aangemaakt of bijgewerkt via de REST API van Spoolman. Draai het vanuit cron, systemd of 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
Apparaatcontract

TigerScale

Het contract dat een TigerScale of compatibele weegschaal volgt om online te verschijnen in Tiger Studio Manager en de mobiele TigerTag-app: elke 30 seconden een heartbeat-document, een gewichtsupdate bij elke stabiele meting, en twin-tags die in één atomaire batch worden geschreven.

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

Bouw je voor een ander platform? Een nieuwe handleiding hoort in docs/clients, een optioneel werkend voorbeeld in examples/. CONTRIBUTING.md

Het account van de gebruiker, de regels van de gebruiker

Er is geen gedeelde sleutel om te beschermen en geen mastertoken dat kan uitlekken: een client kan precies wat zijn gebruiker kan, en Firestore dwingt dat af op de server.

Geen serviceaccount

Elke client logt in met de eigen inloggegevens van de eindgebruiker. Lever de firebase-admin SDK of een beheerderssleutel nooit mee in een client van derden.

Security Rules beslissen

Firestore Security Rules controleren elk verzoek aan de hand van request.auth.uid: eigenaars lezen en schrijven hun eigen documenten, vrienden mogen de inventaris en rekken lezen, en alles wat niet is toegestaan wordt geweigerd. De openbare kopie van de regels staat in rules/firestore.rules.

Eén band per vriendschap

Het accepteren van een vriendschapsverzoek schrijft aan beide kanten een document. Zolang users/{friend}/friends/{you} bestaat, mag je de inventaris en rekken van die vriend lezen, alleen-lezen; het verwijderen ervan beëindigt de toegang onmiddellijk.

04-friend-system.md

Beleefd pollen

Poll hooguit elke 5 minuten, nooit vaker dan elke 30 seconden, schrijf alleen als een waarde verandert, en geef een limiet mee bij het lezen van lijsten (200 spoelen, 50 rekken). Firebase App Check wordt niet afgedwongen.

05-rate-limiting.md

Een openbaar contract voor integrators

De repository wordt behandeld als een openbaar contract: wijzigingen die clients raken komen in dezelfde release in deze repository terecht, en de changelog legt elke wijziging vast als Added, Changed, Deprecated, Removed, Fixed of Security.

Verandert niet zonder aankondiging

  • Documentpaden zoals users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} en users/{uid}/friends/{friendUid}.
  • De naam en betekenis van elk gedocumenteerd veld: weight_available is netto grammen, last_update is Unix-milliseconden, deleted: true betekent soft-deleted.
  • Het toegangsmodel voor vrienden, en de Firebase Auth-endpoints waarmee een client inlogt.
  • De apiKey en projectId, tenzij het hele project verhuist, wat minstens 6 maanden van tevoren wordt aangekondigd.

Kan veranderen: programmeer defensief

  • Referentietabellen krijgen nieuwe merken en materialen; numerieke id's worden alleen toegevoegd en nooit hergebruikt.
  • Handige HTTPS-endpoints op cdn.tigertag.io kunnen de vorm van hun verzoeken en antwoorden aanpassen.
  • Nieuwe collecties en nieuwe velden zijn altijd aanvullend: negeer de velden die je niet kent en blijf compatibel.

Referentiedocumentatie

De kerndocumenten waarop elke integratie voortbouwt, in de volgorde waarin een client ze nodig heeft.

Onderdeel van het TigerTag-ecosysteem

Deze handleiding gaat over het cloudaccount. De chips, de apps en de SDK's hebben hun eigen repository's.

Het TigerTag-protocol

Het open NFC-chipformaat voor filamentspoelen en harsflessen, de specificatie ervan en de referentiedatabase.

Openen

Tiger Studio Manager

De desktopapp (Electron) die dezelfde inventaris beheert; de documentatie wordt getoetst aan de releases ervan.

Repository

TigerTag-SDK's

Lees, verifieer, maak en wijzig TigerTag-chips offline, in JavaScript of Python, onder Apache-2.0.

Vragen

Heb ik een serviceaccount of een beheerderssleutel nodig?

Nee. Elke client logt in met het eigen TigerTag-e-mailadres en -wachtwoord van de eindgebruiker, en Firestore Security Rules bepalen wat die gebruiker mag lezen of schrijven. Er is geen gedeelde beheerderssleutel, en de firebase-admin SDK mag nooit in een client van derden worden gebruikt.

Waarom is de Firebase-apiKey openbaar?

De apiKey identificeert het Firebase-project van TigerTag, niet de aanroeper. Zonder geldig idToken, verkregen door in te loggen als een echte gebruiker, geeft hij nergens toegang toe; de toegangscontrole gebeurt via authenticatie en de Security Rules.

Kan Home Assistant of een ESP32 inloggen met Google?

Niet rechtstreeks: Google Sign-In vereist een doorverwijzing in de browser. Een gebruiker die altijd alleen Google heeft gebruikt, stelt eerst een wachtwoord in voor het account via de wachtwoord-vergeten-functie van de desktop- of mobiele app, en logt daarna in met e-mail en wachtwoord.

Hoe vaak mag mijn integratie pollen?

Hooguit elke 5 minuten voor een sensor, elke 15 minuten voor een overzicht van rekken, en nooit vaker dan elke 30 seconden. Een weegschaal schrijft alleen als een gewicht verandert. Bij het lezen van lijsten hoort een limiet: 200 voor de inventaris, 50 voor rekken.

Kan mijn integratie de spoelen van een vriend lezen?

Ja, alleen-lezen. Als twee gebruikers vrienden zijn, heeft elk van hen een document voor de ander onder users/{uid}/friends, en de regels laten een vriend de inventaris en rekken lezen. Elk van beide gebruikers kan de vriendschap op elk moment beëindigen, wat de toegang onmiddellijk afsluit.

Wat als de productie afwijkt van deze documentatie?

De documentatie heeft voorrang: een verschil betekent dat er een regressie is uitgerold. Open een issue in de repository met de pagina, het pad dat je las of schreef en het antwoord, met tokens en privésleutels verwijderd.

Onder welke licentie mag ik de code hergebruiken?

De Security Rules en elk codefragment in de documentatie vallen onder Apache-2.0, en naamsvermelding is niet vereist voor fragmenten die je in je eigen project plakt. De documentatie zelf valt onder CC-BY-4.0. De naam, het logo en de dienst TigerTag vallen niet onder deze licenties.

Begin je integratie

Kies de handleiding voor jouw platform in de snelkoppelingen van de README, en volg die van het inloggen tot je eerste leesactie.

Open de snelkoppelingen