TigerTag Firebase

Referência de integração para terceirosTigerTag Firebase Integration

Conecte o Home Assistant, uma balança ESP32 ou um script Python a uma conta TigerTag.

Este repositório documenta como qualquer cliente faz login com as credenciais TigerTag do próprio usuário, lê os carretéis de filamento e os racks dele no Firestore e grava de volta o peso dos carretéis. O que está documentado aqui é o que está em produção, e cada alteração é registrada no changelog.

0.1.3Última versão publicada do contrato (CHANGELOG, 2 de maio de 2026)
1 hValidade de um idToken: renove-o antes que expire
5 minIntervalo mínimo de consulta recomendado
3 mesesAviso mínimo de descontinuação antes de um campo ser renomeado ou removido

Como um cliente se conecta ao TigerTag

Todo cliente segue os mesmos quatro passos: buscar a configuração pública do Firebase, fazer login como o usuário, chamar a API REST do Firestore com o token do usuário e manter esse token válido.

  1. 1

    Buscar a configuração pública

    Um único GET retorna a configuração do projeto Firebase. O apiKey é público por design: ele identifica o projeto, não quem faz a chamada. Guarde-o em cache; uma atualização semanal é suficiente.

    01-firebase-config.md
  2. 2

    Fazer login como o usuário

    O e-mail e a senha do próprio usuário retornam um UID, um idToken de 1 hora e um refreshToken. O Google Sign-In exige um navegador, então clientes sem interface usam uma senha.

    02-authentication.md
  3. 3

    Ler e gravar no Firestore

    Envie o idToken como token Bearer. Os carretéis ficam em users/{uid}/inventory e os racks em users/{uid}/racks; os pesos são gramas líquidos, e as datas, milissegundos Unix.

    03-data-model.md
  4. 4

    Manter o token válido

    Renove o idToken antes de completar uma hora e substitua os dois tokens armazenados. Em caso de permission-denied, renove uma vez e repita a leitura uma vez.

    Renovando o idToken

As três chamadas, tiradas da documentação

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}

Os valores entre chaves vêm da chamada anterior: apiKey e projectId da configuração, uid e idToken do login.

Integrações documentadas neste repositório

Cada guia em docs/clients aborda a autenticação, os dados que lê ou grava, o mapeamento de campos e o código. Os trechos abaixo foram copiados dos guias.

Esboço de componente

Home Assistant

Um componente personalizado do Home Assistant que expõe um sensor por carretel, com o peso restante em gramas como estado. O guia também aborda os inventários de amigos, a paginação e o armazenamento de tokens; o config flow e o sensor são esqueletos, e um componente totalmente executável ainda precisa ser escrito.

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

ESP32 / Arduino

Para uma balança ou um dispositivo NFC: localize um carretel pelo UID RFID lido (uid, depois twin_uid), calcule o peso líquido e grave weight_available e last_update com uma update mask. O guia termina com um sketch ESP32 completo (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Cliente completo

Python CLI

Um cliente Python mínimo baseado no Pyrebase4: ele faz login, lista seus carretéis e mostra quantos carretéis cada amigo tem. O guia traz o script inteiro e um exemplo de execução.

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

Spoolman bridge

Uma ponte unidirecional do TigerTag para uma instância do Spoolman: as marcas viram fornecedores, cada combinação de marca, material e cor vira um filamento, e cada documento de inventário vira um carretel, criado ou atualizado pela API REST do Spoolman. Execute-o via 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
Contrato de dispositivo

TigerScale

O contrato que uma TigerScale ou balança compatível segue para aparecer online no Tiger Studio Manager e no app móvel TigerTag: um documento de heartbeat a cada 30 segundos, uma atualização de peso a cada leitura estável e tags gêmeas gravadas em um único lote atômico.

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

Desenvolvendo para outra plataforma? Um novo guia vai em docs/clients, e um exemplo executável opcional em examples/. CONTRIBUTING.md

A conta do usuário, as regras do usuário

Não existe chave compartilhada para proteger nem token mestre que possa vazar: um cliente pode fazer exatamente o que seu usuário pode fazer, e o Firestore garante isso no servidor.

Nenhuma conta de serviço

Todo cliente faz login com as credenciais do próprio usuário final. Nunca distribua o SDK firebase-admin nem qualquer chave de administrador em um cliente de terceiros.

As Security Rules decidem

As Firestore Security Rules verificam cada requisição em relação a request.auth.uid: donos leem e gravam os próprios documentos, amigos podem ler o inventário e os racks, e tudo o que não é permitido é negado. A cópia pública das regras está em rules/firestore.rules.

Um vínculo por amizade

Aceitar um pedido de amizade grava um documento de cada lado. Enquanto users/{friend}/friends/{you} existir, você pode ler o inventário e os racks desse amigo, somente leitura; excluí-lo corta o acesso imediatamente.

04-friend-system.md

Consultas moderadas

Consulte no máximo a cada 5 minutos, nunca em menos de 30 segundos, grave apenas quando um valor mudar e passe um limite nas leituras de listas (200 carretéis, 50 racks). O Firebase App Check não é exigido.

05-rate-limiting.md

Um contrato público para integradores

O repositório é tratado como um contrato público: as mudanças que afetam os clientes chegam a este repositório na mesma versão, e o changelog registra cada uma como Added, Changed, Deprecated, Removed, Fixed ou Security.

Não muda sem aviso prévio

  • Caminhos de documentos como users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} e users/{uid}/friends/{friendUid}.
  • O nome e o significado de cada campo documentado: weight_available é em gramas líquidos, last_update em milissegundos Unix, deleted: true significa exclusão lógica.
  • O modelo de acesso entre amigos e os endpoints do Firebase Auth usados pelo cliente para fazer login.
  • O apiKey e o projectId, a menos que o projeto inteiro mude, o que seria anunciado com pelo menos 6 meses de antecedência.

Pode mudar: programe de forma defensiva

  • As tabelas de referência ganham novas marcas e materiais; os ids numéricos só são acrescentados e nunca reutilizados.
  • Os endpoints HTTPS de conveniência em cdn.tigertag.io podem evoluir o formato das requisições e respostas.
  • Novas coleções e novos campos são sempre aditivos: ignore os campos que você não conhece e continue compatível.

Documentação de referência

Os documentos centrais em que toda integração se baseia, na ordem em que um cliente precisa deles.

Parte do ecossistema TigerTag

Este guia trata da conta na nuvem. Os chips, os apps e os SDKs têm seus próprios repositórios.

O protocolo TigerTag

O formato aberto de chip NFC para carretéis de filamento e frascos de resina, sua especificação e o banco de dados de referência.

Abrir

Tiger Studio Manager

O app de desktop (Electron) que gerencia o mesmo inventário; a documentação é verificada a cada versão dele.

Repositório

SDKs TigerTag

Leia, verifique, crie e modifique chips TigerTag offline, em JavaScript ou Python, sob Apache-2.0.

Perguntas

Preciso de uma conta de serviço ou de uma chave de administrador?

Não. Todo cliente faz login com o e-mail e a senha TigerTag do próprio usuário final, e as Firestore Security Rules decidem o que esse usuário pode ler ou gravar. Não existe chave de administrador compartilhada, e o SDK firebase-admin nunca deve ser usado em um cliente de terceiros.

Por que o apiKey do Firebase é público?

O apiKey identifica o projeto Firebase do TigerTag, não quem faz a chamada. Sem um idToken válido, obtido ao fazer login como um usuário real, ele não dá acesso a nada; o controle de acesso é feito pela autenticação e pelas Security Rules.

O Home Assistant ou um ESP32 podem fazer login com o Google?

Não diretamente: o Google Sign-In exige um redirecionamento no navegador. Um usuário que sempre usou apenas o Google primeiro define uma senha na conta, pelo fluxo de senha esquecida do app de desktop ou do app móvel, e depois faz login com e-mail e senha.

Com que frequência minha integração pode fazer consultas?

No máximo a cada 5 minutos para um sensor, a cada 15 minutos para uma visão geral dos racks, e nunca em menos de 30 segundos. Uma balança grava apenas quando um peso muda. As leituras de listas devem passar um limite: 200 para o inventário, 50 para os racks.

Minha integração pode ler os carretéis de um amigo?

Sim, somente leitura. Quando dois usuários são amigos, cada um tem um documento referente ao outro em users/{uid}/friends, e as regras permitem que um amigo leia o inventário e os racks. Qualquer um dos dois pode desfazer a amizade a qualquer momento, o que corta o acesso imediatamente.

E se a produção divergir desta documentação?

A documentação prevalece: uma diferença significa que uma regressão foi publicada. Abra uma issue no repositório com a página, o caminho que você leu ou gravou e a resposta, removendo tokens e chaves privadas.

Sob qual licença posso reutilizar o código?

As Security Rules e todos os trechos de código da documentação estão sob Apache-2.0, e a atribuição é dispensada para trechos colados no seu próprio projeto. A documentação em si está sob CC-BY-4.0. O nome, o logotipo e o serviço TigerTag não são cobertos por essas licenças.

Comece sua integração

Escolha o guia da sua plataforma nos links rápidos do README e siga-o do login até a sua primeira leitura.

Abrir os links rápidos