TigerTag Firebase

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

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

Este repositório documenta a forma como qualquer cliente inicia sessão com as credenciais TigerTag do próprio utilizador, lê as respetivas bobinas de filamento e prateleiras no Firestore e volta a escrever o peso das bobinas. O que aqui está documentado é o que está implementado, e cada alteração fica registada no changelog.

0.1.3Versão mais recente publicada do contrato (CHANGELOG, 2 de maio de 2026)
1 hDuração de um idToken: renove-o antes de expirar
5 minIntervalo mínimo de consulta recomendado
3 mesesPré-aviso mínimo de descontinuação antes de um campo ser renomeado ou removido

Como um cliente se liga ao TigerTag

Todos os clientes seguem os mesmos quatro passos: obter a configuração pública do Firebase, iniciar sessão como o utilizador, chamar a API REST do Firestore com o token do utilizador e manter esse token atualizado.

  1. 1

    Obter a configuração pública

    Um único GET devolve a configuração do projeto Firebase. A apiKey é pública por conceção: identifica o projeto, não quem faz o pedido. Guarde-a em cache; basta atualizá-la semanalmente.

    01-firebase-config.md
  2. 2

    Iniciar sessão como o utilizador

    O e-mail e a palavra-passe do próprio utilizador devolvem um UID, um idToken de 1 hora e um refreshToken. O Google Sign-In requer um navegador, pelo que os clientes sem interface gráfica usam uma palavra-passe.

    02-authentication.md
  3. 3

    Ler e escrever no Firestore

    Envie o idToken como token Bearer. As bobinas encontram-se em users/{uid}/inventory e as prateleiras em users/{uid}/racks; os pesos são gramas líquidas e as datas milissegundos Unix.

    03-data-model.md
  4. 4

    Manter o token atualizado

    Renove o idToken antes de passar a hora e substitua os dois tokens guardados. Perante um permission-denied, renove uma vez e repita a leitura uma vez.

    Renovar o idToken

As três chamadas, retiradas 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 chavetas provêm da chamada anterior: apiKey e projectId da configuração, uid e idToken do início de sessão.

Integrações documentadas neste repositório

Cada guia em docs/clients trata da autenticação, dos dados que lê ou escreve, do mapeamento de campos e do código. Os excertos abaixo foram copiados dos guias.

Esboço de componente

Home Assistant

Um componente personalizado do Home Assistant que disponibiliza um sensor por bobina, tendo como estado o peso restante em gramas. O guia aborda também os inventários dos amigos, a paginação e o armazenamento dos tokens; o config flow e o sensor são esqueletos, e falta ainda escrever um componente totalmente funcional.

{
  "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: procure uma bobina pelo UID RFID lido (uid e, a seguir, twin_uid), calcule o peso líquido e escreva 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 assente no Pyrebase4: inicia sessão, lista as suas bobinas e indica quantas bobinas tem cada amigo. O guia contém o script completo e um exemplo de execução.

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

Spoolman bridge

Uma ponte num só sentido do TigerTag para uma instância do Spoolman: as marcas passam a fornecedores, cada combinação de marca, material e cor passa a filamento, e cada documento de inventário passa a bobina, criado ou atualizado através da API REST do Spoolman. Pode ser executado a partir de 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 cumpre para surgir online no Tiger Studio Manager e na aplicação móvel TigerTag: um documento de heartbeat a cada 30 segundos, uma atualização de peso em cada leitura estável e etiquetas gémeas escritas num único lote atómico.

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

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

A conta do utilizador, as regras do utilizador

Não há nenhuma chave partilhada a proteger nem nenhum token mestre que possa ser divulgado: um cliente pode fazer exatamente o que o seu utilizador pode fazer, e o Firestore impõe-no no servidor.

Sem conta de serviço

Todos os clientes iniciam sessão com as credenciais do próprio utilizador final. Nunca inclua o SDK firebase-admin nem qualquer chave de administrador num cliente de terceiros.

As Security Rules decidem

As Firestore Security Rules verificam cada pedido face a request.auth.uid: os proprietários leem e escrevem os seus próprios documentos, os amigos podem ler o inventário e as prateleiras, e tudo o que não for permitido é recusado. A cópia pública das regras encontra-se em rules/firestore.rules.

Um vínculo por amizade

Aceitar um pedido de amizade escreve um documento de cada lado. Enquanto users/{friend}/friends/{you} existir, pode ler o inventário e as prateleiras desse amigo, apenas em leitura; eliminá-lo corta o acesso de imediato.

04-friend-system.md

Consultas comedidas

Consulte no máximo a cada 5 minutos, nunca abaixo de 30 segundos, escreva apenas quando um valor mudar e indique um limite nas leituras de listas (200 bobinas, 50 prateleiras). O Firebase App Check não é imposto.

05-rate-limiting.md

Um contrato público para integradores

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

Não muda sem pré-aviso

  • 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 está em gramas líquidas, last_update em milissegundos Unix, deleted: true significa eliminação lógica.
  • O modelo de acesso entre amigos e os endpoints do Firebase Auth com que um cliente inicia sessão.
  • A apiKey e o projectId, salvo se todo o projeto for migrado, o que será anunciado com pelo menos 6 meses de antecedência.

Pode mudar: programe de forma defensiva

  • As tabelas de referência recebem novas marcas e materiais; os ids numéricos apenas são acrescentados e nunca reutilizados.
  • Os endpoints HTTPS de conveniência em cdn.tigertag.io podem alterar o formato dos pedidos e das respostas.
  • As novas coleções e os novos campos são sempre aditivos: ignore os campos que não conhece e mantenha-se compatível.

Documentação de referência

Os documentos essenciais em que assenta qualquer integração, pela ordem em que um cliente precisa deles.

Parte do ecossistema TigerTag

Este guia trata da conta na nuvem. Os chips, as aplicações e os SDK têm os seus próprios repositórios.

O protocolo TigerTag

O formato aberto de chip NFC para bobinas de filamento e frascos de resina, a respetiva especificação e a base de dados de referência.

Abrir

Tiger Studio Manager

A aplicação de computador (Electron) que gere o mesmo inventário; a documentação é verificada face às suas versões.

Repositório

SDK TigerTag

Ler, verificar, criar e modificar chips TigerTag sem ligação, em JavaScript ou Python, sob Apache-2.0.

Perguntas

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

Não. Todos os clientes iniciam sessão com o e-mail e a palavra-passe TigerTag do próprio utilizador final, e as Firestore Security Rules determinam o que esse utilizador pode ler ou escrever. Não existe nenhuma chave de administrador partilhada, e o SDK firebase-admin nunca deve ser utilizado num cliente de terceiros.

Porque é que a apiKey do Firebase é pública?

A apiKey identifica o projeto Firebase do TigerTag, não quem faz o pedido. Sem um idToken válido, obtido ao iniciar sessão como um utilizador real, não dá acesso a nada; o controlo de acesso é assegurado pela autenticação e pelas Security Rules.

O Home Assistant ou um ESP32 podem iniciar sessão com o Google?

Não diretamente: o Google Sign-In requer um redirecionamento no navegador. Um utilizador que sempre usou apenas o Google define primeiro uma palavra-passe na conta, através da opção de palavra-passe esquecida da aplicação de computador ou móvel, e depois inicia sessão com e-mail e palavra-passe.

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

No máximo a cada 5 minutos para um sensor, a cada 15 minutos para uma vista geral das prateleiras, e nunca abaixo de 30 segundos. Uma balança só escreve quando um peso muda. As leituras de listas devem indicar um limite: 200 para o inventário, 50 para as prateleiras.

A minha integração pode ler as bobinas de um amigo?

Sim, apenas em leitura. Quando dois utilizadores são amigos, cada um tem um documento relativo ao outro em users/{uid}/friends, e as regras permitem que um amigo leia o inventário e as prateleiras. Qualquer um dos dois pode pôr fim à amizade a qualquer momento, o que corta o acesso de imediato.

E se a produção não coincidir com esta documentação?

Prevalece a documentação: uma diferença significa que foi publicada uma regressão. Abra uma issue no repositório com a página, o caminho que leu ou escreveu e a resposta, depois de retirar os tokens e as chaves privadas.

Ao abrigo de que licença posso reutilizar o código?

As Security Rules e todos os excertos de código da documentação estão sob Apache-2.0, sendo dispensada a atribuição para excertos colados no seu próprio projeto. A documentação propriamente dita está sob CC-BY-4.0. O nome, o logótipo e o serviço TigerTag não estão abrangidos por estas licenças.

Comece a sua integração

Escolha o guia para a sua plataforma nas ligações rápidas do README e siga-o desde o início de sessão até à primeira leitura.

Abrir as ligações rápidas