TigerTag Firebase

Справочник по сторонним интеграциямTigerTag Firebase Integration

Подключите Home Assistant, весы на ESP32 или скрипт на Python к аккаунту TigerTag.

Этот репозиторий описывает, как любой клиент входит с собственными учётными данными TigerTag пользователя, читает его катушки филамента и стеллажи в Firestore и записывает обратно вес катушек. Здесь описано именно то, что развёрнуто, и каждое изменение фиксируется в журнале изменений.

0.1.3Последняя выпущенная версия контракта (CHANGELOG, 2 мая 2026 г.)
1 чСрок действия idToken: обновляйте его до истечения
5 минРекомендуемый минимальный интервал опроса
3 месяцаМинимальный срок предупреждения перед переименованием или удалением поля

Как клиент подключается к TigerTag

Каждый клиент выполняет одни и те же четыре шага: получает публичную конфигурацию Firebase, входит от имени пользователя, вызывает Firestore REST API с токеном пользователя и поддерживает этот токен актуальным.

  1. 1

    Получите публичную конфигурацию

    Один GET-запрос возвращает конфигурацию проекта Firebase. apiKey публичен по замыслу: он идентифицирует проект, а не вызывающую сторону. Кэшируйте его; обновления раз в неделю достаточно.

    01-firebase-config.md
  2. 2

    Войдите от имени пользователя

    Собственные адрес электронной почты и пароль пользователя возвращают UID, idToken на 1 час и refreshToken. Google Sign-In требует браузера, поэтому клиенты без интерфейса используют пароль.

    02-authentication.md
  3. 3

    Чтение и запись в Firestore

    Передавайте idToken как Bearer-токен. Катушки хранятся в users/{uid}/inventory, стеллажи — в users/{uid}/racks; вес указывается нетто в граммах, даты — в миллисекундах Unix.

    03-data-model.md
  4. 4

    Поддерживайте токен актуальным

    Обновляйте idToken до истечения часа и заменяйте оба сохранённых токена. При ошибке permission-denied обновите токен один раз и один раз повторите чтение.

    Обновление idToken

Три вызова из документации

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}

Значения в фигурных скобках берутся из предыдущего вызова: apiKey и projectId — из конфигурации, uid и idToken — из входа.

Интеграции, описанные в этом репозитории

Каждое руководство в docs/clients охватывает аутентификацию, читаемые или записываемые данные, сопоставление полей и код. Приведённые ниже фрагменты скопированы из руководств.

Набросок компонента

Home Assistant

Пользовательский компонент Home Assistant, который создаёт по одному датчику на каждую катушку, а его состоянием служит оставшийся вес в граммах. Руководство также охватывает инвентарь друзей, постраничную выборку и хранение токенов; config flow и датчик — лишь заготовки, а полностью рабочий компонент ещё предстоит написать.

{
  "domain": "tigertag",
  "name":   "TigerTag",
  "version": "0.1.0",
  "requirements": ["pyrebase4>=4.5.0"],
  "config_flow": true,
  "iot_class": "cloud_polling"
}
Скетч Arduino

ESP32 / Arduino

Для весов или NFC-устройства: найти катушку по считанному RFID UID (сначала uid, затем twin_uid), вычислить вес нетто и записать weight_available и last_update с маской обновления. Руководство завершается полным скетчем для ESP32 (WiFi, ArduinoJson).

weight_available = max(0, measured_raw_weight - container_weight)
Полный клиент

Python CLI

Минимальный клиент на Python на основе Pyrebase4: он входит в аккаунт, выводит список ваших катушек и показывает, сколько катушек у каждого друга. Руководство содержит весь скрипт и пример запуска.

pip install -r requirements.txt
python tigertag_client.py
Полный скрипт

Spoolman bridge

Односторонний мост из TigerTag в экземпляр Spoolman: бренды становятся поставщиками, каждое сочетание бренда, материала и цвета становится филаментом, а каждый документ инвентаря — катушкой, которая создаётся или обновляется через REST API Spoolman. Запускайте его из cron, systemd или 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
Контракт устройства

TigerScale

Контракт, которому следуют TigerScale или совместимые весы, чтобы отображаться в сети в Tiger Studio Manager и мобильном приложении TigerTag: документ heartbeat каждые 30 секунд, обновление веса при каждом стабильном показании и парные метки, записываемые одним атомарным пакетом.

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

Разрабатываете для другой платформы? Новое руководство помещается в docs/clients, а необязательный рабочий пример — в examples/. CONTRIBUTING.md

Аккаунт пользователя, правила пользователя

Нет общего ключа, который нужно защищать, и нет мастер-токена, который может утечь: клиент может делать ровно то, что может его пользователь, и Firestore обеспечивает это на сервере.

Без сервисного аккаунта

Каждый клиент входит с собственными учётными данными конечного пользователя. Никогда не включайте firebase-admin SDK или какой-либо административный ключ в сторонний клиент.

Решают Security Rules

Firestore Security Rules проверяют каждый запрос по request.auth.uid: владельцы читают и записывают собственные документы, друзья могут читать инвентарь и стеллажи, а всё, что не разрешено, запрещено. Публичная копия правил находится в rules/firestore.rules.

Одна связь на каждую дружбу

Принятие запроса в друзья записывает документ с каждой стороны. Пока существует users/{friend}/friends/{you}, вы можете читать инвентарь и стеллажи этого друга только для чтения; удаление документа немедленно прекращает доступ.

04-friend-system.md

Вежливый опрос

Опрашивайте не чаще чем раз в 5 минут и никогда не чаще чем раз в 30 секунд, записывайте только при изменении значения и передавайте limit при чтении списков (200 катушек, 50 стеллажей). Firebase App Check не применяется принудительно.

05-rate-limiting.md

Публичный контракт для интеграторов

Репозиторий считается публичным контрактом: изменения, затрагивающие клиенты, попадают в этот репозиторий в том же выпуске, а журнал изменений относит каждое из них к категории Added, Changed, Deprecated, Removed, Fixed или Security.

Не изменится без предупреждения

  • Пути к документам, такие как users/{uid}/inventory/{spoolId}, users/{uid}/racks/{rackId} и users/{uid}/friends/{friendUid}.
  • Имя и значение каждого описанного поля: weight_available — вес нетто в граммах, last_update — миллисекунды Unix, deleted: true означает мягкое удаление.
  • Модель доступа друзей и конечные точки Firebase Auth, через которые входит клиент.
  • apiKey и projectId, если только весь проект не переедет, о чём будет объявлено не менее чем за 6 месяцев.

Может измениться: будьте осторожны

  • В справочные таблицы добавляются новые бренды и материалы; числовые id только добавляются и никогда не используются повторно.
  • Вспомогательные HTTPS-эндпоинты на cdn.tigertag.io могут менять структуру запросов и ответов.
  • Новые коллекции и новые поля всегда только добавляются: игнорируйте неизвестные поля и сохраняйте совместимость.

Справочная документация

Основные документы, на которых строится любая интеграция, в том порядке, в каком они нужны клиенту.

Часть экосистемы TigerTag

Это руководство посвящено облачному аккаунту. У чипов, приложений и SDK есть собственные репозитории.

Протокол TigerTag

Открытый формат NFC-чипов для катушек филамента и флаконов смолы, его спецификация и справочная база данных.

Открыть

Tiger Studio Manager

Настольное приложение (Electron), которое управляет тем же инвентарём; документация сверяется с его выпусками.

Репозиторий

SDK TigerTag

Чтение, проверка, создание и изменение чипов TigerTag офлайн на JavaScript или Python, под лицензией Apache-2.0.

Вопросы

Нужен ли мне сервисный аккаунт или административный ключ?

Нет. Каждый клиент входит с собственными адресом электронной почты и паролем TigerTag конечного пользователя, а Firestore Security Rules решают, что этому пользователю разрешено читать или записывать. Общего административного ключа нет, и firebase-admin SDK никогда не должен использоваться в стороннем клиенте.

Почему apiKey Firebase публичен?

apiKey идентифицирует проект Firebase TigerTag, а не вызывающую сторону. Без действительного idToken, полученного при входе от имени реального пользователя, он не даёт доступа ни к чему; контроль доступа обеспечивается аутентификацией и Security Rules.

Может ли Home Assistant или ESP32 входить через Google?

Не напрямую: Google Sign-In требует перенаправления в браузере. Пользователь, который всегда входил только через Google, сначала задаёт пароль для аккаунта через функцию восстановления пароля в настольном или мобильном приложении, а затем входит по адресу электронной почты и паролю.

Как часто моя интеграция может выполнять опрос?

Не чаще чем раз в 5 минут для датчика, раз в 15 минут для обзора стеллажей и никогда не чаще чем раз в 30 секунд. Весы записывают данные только при изменении веса. При чтении списков следует передавать limit: 200 для инвентаря, 50 для стеллажей.

Может ли моя интеграция читать катушки друга?

Да, только для чтения. Когда два пользователя дружат, у каждого есть документ о другом в users/{uid}/friends, и правила позволяют другу читать инвентарь и стеллажи. Любой из пользователей может в любой момент прекратить дружбу, что немедленно прекращает доступ.

Что делать, если рабочая среда расходится с этой документацией?

Приоритет у документации: расхождение означает, что в выпуск попала регрессия. Откройте issue в репозитории, указав страницу, путь, который вы читали или записывали, и ответ, удалив токены и закрытые ключи.

Под какой лицензией можно повторно использовать код?

Security Rules и все фрагменты кода в документации распространяются под лицензией Apache-2.0, а для фрагментов, вставленных в ваш собственный проект, указание авторства не требуется. Сама документация распространяется под лицензией CC-BY-4.0. Название, логотип и сервис TigerTag на эти лицензии не распространяются.

Начните свою интеграцию

Выберите руководство для своей платформы в быстрых ссылках README и следуйте ему от входа до первого чтения.

Открыть быстрые ссылки