Referência de integração para terceirosTigerTagFirebase 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.
Seu clienteHome Assistant · ESP32 · Python · Spoolman
email + password
Firebase AuthenticationA conta do próprio usuário, um idToken de 1 hora
Authorization: Bearer {idToken}
Firestore Security RulesDonos leem e gravam, amigos leem
Firestoreusers/{uid}/inventory
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
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.