TigerTag Firebase

Dokumentacja integracji zewnętrznychTigerTag Firebase Integration

Połącz Home Assistant, wagę na ESP32 lub skrypt w Pythonie z kontem TigerTag.

To repozytorium opisuje, jak dowolny klient loguje się własnymi danymi logowania użytkownika do TigerTag, odczytuje jego szpule filamentu i regały w Firestore oraz zapisuje z powrotem wagę szpul. To, co jest tu udokumentowane, jest tym, co działa na produkcji, a każda zmiana jest odnotowywana w dzienniku zmian.

0.1.3Najnowsza wydana wersja kontraktu (CHANGELOG, 2 maja 2026)
1 hCzas ważności idToken: odśwież go, zanim wygaśnie
5 minZalecany minimalny odstęp między odpytywaniami
3 miesiąceMinimalny okres wycofywania przed zmianą nazwy lub usunięciem pola

Jak klient łączy się z TigerTag

Każdy klient wykonuje te same cztery kroki: pobiera publiczną konfigurację Firebase, loguje się jako użytkownik, wywołuje Firestore REST API z tokenem użytkownika i dba o to, by ten token był aktualny.

  1. 1

    Pobierz publiczną konfigurację

    Jedno żądanie GET zwraca konfigurację projektu Firebase. apiKey jest z założenia publiczny: identyfikuje projekt, a nie wywołującego. Zapisz go w pamięci podręcznej; wystarczy odświeżanie raz w tygodniu.

    01-firebase-config.md
  2. 2

    Zaloguj się jako użytkownik

    Własny e-mail i hasło użytkownika zwracają UID, idToken ważny 1 godzinę i refreshToken. Google Sign-In wymaga przeglądarki, dlatego klienci bez interfejsu używają hasła.

    02-authentication.md
  3. 3

    Odczytuj i zapisuj w Firestore

    Wysyłaj idToken jako token Bearer. Szpule znajdują się w users/{uid}/inventory, regały w users/{uid}/racks; wagi to gramy netto, daty to milisekundy Unix.

    03-data-model.md
  4. 4

    Dbaj o aktualność tokena

    Odśwież idToken przed upływem godziny i zastąp oba zapisane tokeny. Przy błędzie permission-denied odśwież raz i ponów odczyt raz.

    Odświeżanie idToken

Trzy wywołania z dokumentacji

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}

Wartości w nawiasach klamrowych pochodzą z poprzedniego wywołania: apiKey i projectId z konfiguracji, uid i idToken z logowania.

Integracje udokumentowane w tym repozytorium

Każdy przewodnik w docs/clients opisuje uwierzytelnianie, dane, które odczytuje lub zapisuje, mapowanie pól i kod. Poniższe fragmenty pochodzą z przewodników.

Szkic komponentu

Home Assistant

Niestandardowy komponent Home Assistant, który udostępnia jeden czujnik na szpulę, a jego stanem jest pozostała waga w gramach. Przewodnik opisuje też inwentarze znajomych, paginację i przechowywanie tokenów; config flow i czujnik są szkieletami, a w pełni działający komponent nie został jeszcze napisany.

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

ESP32 / Arduino

Dla wagi lub urządzenia NFC: wyszukaj szpulę po zeskanowanym UID RFID (uid, a następnie twin_uid), oblicz wagę netto i zapisz weight_available oraz last_update z maską aktualizacji. Przewodnik kończy się kompletnym szkicem dla ESP32 (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Kompletny klient

Python CLI

Minimalny klient w Pythonie oparty na Pyrebase4: loguje się, wyświetla listę Twoich szpul i pokazuje, ile szpul ma każdy znajomy. Przewodnik zawiera cały skrypt i przykładowe uruchomienie.

pip install -r requirements.txt
python tigertag_client.py
Kompletny skrypt

Spoolman bridge

Jednokierunkowy most z TigerTag do instancji Spoolman: marki stają się dostawcami, każde połączenie marki, materiału i koloru staje się filamentem, a każdy dokument inwentarza staje się szpulą, tworzoną lub aktualizowaną przez REST API Spoolmana. Uruchamiaj go z cron, systemd lub Dockera.

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
Kontrakt urządzenia

TigerScale

Kontrakt, którego przestrzega TigerScale lub kompatybilna waga, aby była widoczna online w Tiger Studio Manager i aplikacji mobilnej TigerTag: dokument heartbeat co 30 sekund, aktualizacja wagi przy każdym stabilnym odczycie i bliźniacze tagi zapisywane w jednej atomowej partii.

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

Tworzysz dla innej platformy? Nowy przewodnik trafia do docs/clients, opcjonalny działający przykład do examples/. CONTRIBUTING.md

Konto użytkownika, reguły użytkownika

Nie ma wspólnego klucza do ochrony ani tokena głównego, który mógłby wyciec: klient może dokładnie to, co jego użytkownik, a Firestore egzekwuje to po stronie serwera.

Bez konta usługi

Każdy klient loguje się własnymi danymi logowania użytkownika końcowego. Nigdy nie dołączaj SDK firebase-admin ani żadnego klucza administratora do klienta zewnętrznego.

Decydują Security Rules

Firestore Security Rules sprawdzają każde żądanie względem request.auth.uid: właściciele odczytują i zapisują własne dokumenty, znajomi mogą odczytywać inwentarz i regały, a wszystko, co nie jest dozwolone, jest odrzucane. Publiczna kopia reguł znajduje się w rules/firestore.rules.

Jedna więź na znajomość

Przyjęcie zaproszenia do znajomych zapisuje dokument po każdej stronie. Dopóki istnieje users/{friend}/friends/{you}, możesz odczytywać inwentarz i regały tego znajomego, tylko do odczytu; usunięcie dokumentu natychmiast odcina dostęp.

04-friend-system.md

Kulturalne odpytywanie

Odpytuj najczęściej co 5 minut, nigdy częściej niż co 30 sekund, zapisuj tylko wtedy, gdy wartość się zmienia, i podawaj limit przy odczytach list (200 szpul, 50 regałów). Firebase App Check nie jest wymuszany.

05-rate-limiting.md

Publiczny kontrakt dla integratorów

Repozytorium jest traktowane jako publiczny kontrakt: zmiany wpływające na klientów trafiają do tego repozytorium w tym samym wydaniu, a dziennik zmian zapisuje każdą z nich jako Added, Changed, Deprecated, Removed, Fixed lub Security.

Nie zmieni się bez uprzedzenia

  • Ścieżki dokumentów, takie jak users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} i users/{uid}/friends/{friendUid}.
  • Nazwa i znaczenie każdego udokumentowanego pola: weight_available to gramy netto, last_update to milisekundy Unix, deleted: true oznacza miękkie usunięcie.
  • Model dostępu znajomych oraz punkty końcowe Firebase Auth, przez które loguje się klient.
  • apiKey i projectId, chyba że cały projekt zostanie przeniesiony, co zostanie ogłoszone co najmniej 6 miesięcy wcześniej.

Może się zmienić: programuj defensywnie

  • Tabele referencyjne zyskują nowe marki i materiały; identyfikatory liczbowe są tylko dopisywane i nigdy nie są używane ponownie.
  • Pomocnicze punkty końcowe HTTPS w cdn.tigertag.io mogą zmieniać kształt żądań i odpowiedzi.
  • Nowe kolekcje i nowe pola są zawsze dodawane: ignoruj pola, których nie znasz, i zachowaj zgodność.

Dokumentacja referencyjna

Podstawowe dokumenty, na których opiera się każda integracja, w kolejności, w jakiej potrzebuje ich klient.

Część ekosystemu TigerTag

Ten przewodnik dotyczy konta w chmurze. Chipy, aplikacje i SDK mają własne repozytoria.

Protokół TigerTag

Otwarty format chipów NFC dla szpul filamentu i butelek żywicy, jego specyfikacja i referencyjna baza danych.

Otwórz

Tiger Studio Manager

Aplikacja na komputer (Electron), która zarządza tym samym inwentarzem; dokumentacja jest weryfikowana względem jej wydań.

Repozytorium

SDK TigerTag

Odczytuj, weryfikuj, twórz i modyfikuj chipy TigerTag offline, w JavaScript lub Pythonie, na licencji Apache-2.0.

Pytania

Czy potrzebuję konta usługi lub klucza administratora?

Nie. Każdy klient loguje się własnym adresem e-mail i hasłem TigerTag użytkownika końcowego, a Firestore Security Rules decydują, co ten użytkownik może odczytać lub zapisać. Nie ma wspólnego klucza administratora, a SDK firebase-admin nigdy nie może być używany w kliencie zewnętrznym.

Dlaczego apiKey Firebase jest publiczny?

apiKey identyfikuje projekt Firebase TigerTag, a nie wywołującego. Bez ważnego idToken, uzyskanego przez zalogowanie się jako prawdziwy użytkownik, nie daje dostępu do niczego; kontrolę dostępu zapewniają uwierzytelnianie i Security Rules.

Czy Home Assistant lub ESP32 mogą logować się przez Google?

Nie bezpośrednio: Google Sign-In wymaga przekierowania w przeglądarce. Użytkownik, który zawsze korzystał tylko z Google, najpierw ustawia hasło do konta przez funkcję przypomnienia hasła w aplikacji na komputer lub w aplikacji mobilnej, a następnie loguje się e-mailem i hasłem.

Jak często moja integracja może odpytywać?

Najczęściej co 5 minut dla czujnika, co 15 minut dla przeglądu regałów i nigdy częściej niż co 30 sekund. Waga zapisuje dane tylko wtedy, gdy zmienia się ciężar. Odczyty list powinny podawać limit: 200 dla inwentarza, 50 dla regałów.

Czy moja integracja może odczytać szpule znajomego?

Tak, tylko do odczytu. Gdy dwoje użytkowników jest znajomymi, każdy z nich ma dokument dotyczący drugiego w users/{uid}/friends, a reguły pozwalają znajomemu odczytywać inwentarz i regały. Każdy z użytkowników może w dowolnej chwili usunąć znajomość, co natychmiast odcina dostęp.

Co, jeśli produkcja nie zgadza się z tą dokumentacją?

Rozstrzyga dokumentacja: różnica oznacza, że wdrożono regresję. Otwórz zgłoszenie w repozytorium, podając stronę, ścieżkę, którą odczytywano lub zapisywano, oraz odpowiedź, po usunięciu tokenów i kluczy prywatnych.

Na jakiej licencji mogę ponownie wykorzystać kod?

Security Rules i każdy fragment kodu w dokumentacji są na licencji Apache-2.0, a wymóg podania autorstwa nie dotyczy fragmentów wklejonych do własnego projektu. Sama dokumentacja jest na licencji CC-BY-4.0. Nazwa, logo i usługa TigerTag nie są objęte tymi licencjami.

Rozpocznij swoją integrację

Wybierz przewodnik dla swojej platformy w szybkich linkach README i przejdź przez niego od logowania do pierwszego odczytu.

Otwórz szybkie linki