Справочник по сторонним интеграциямTigerTagFirebase Integration
Подключите Home Assistant, весы на ESP32 или скрипт на Python к аккаунту TigerTag.
Этот репозиторий описывает, как любой клиент входит с собственными учётными данными TigerTag пользователя, читает его катушки филамента и стеллажи в Firestore и записывает обратно вес катушек. Здесь описано именно то, что развёрнуто, и каждое изменение фиксируется в журнале изменений.
Firebase AuthenticationСобственный аккаунт пользователя, idToken на 1 час
Authorization: Bearer {idToken}
Firestore Security RulesВладельцы читают и пишут, друзья читают
Firestoreusers/{uid}/inventory
0.1.3Последняя выпущенная версия контракта (CHANGELOG, 2 мая 2026 г.)
1 чСрок действия idToken: обновляйте его до истечения
5 минРекомендуемый минимальный интервал опроса
3 месяцаМинимальный срок предупреждения перед переименованием или удалением поля
Как клиент подключается к TigerTag
Каждый клиент выполняет одни и те же четыре шага: получает публичную конфигурацию Firebase, входит от имени пользователя, вызывает Firestore REST API с токеном пользователя и поддерживает этот токен актуальным.
1
Получите публичную конфигурацию
Один GET-запрос возвращает конфигурацию проекта Firebase. apiKey публичен по замыслу: он идентифицирует проект, а не вызывающую сторону. Кэшируйте его; обновления раз в неделю достаточно.
Собственные адрес электронной почты и пароль пользователя возвращают UID, idToken на 1 час и refreshToken. Google Sign-In требует браузера, поэтому клиенты без интерфейса используют пароль.
Передавайте idToken как Bearer-токен. Катушки хранятся в users/{uid}/inventory, стеллажи — в users/{uid}/racks; вес указывается нетто в граммах, даты — в миллисекундах Unix.
Обновляйте idToken до истечения часа и заменяйте оба сохранённых токена. При ошибке permission-denied обновите токен один раз и один раз повторите чтение.
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 и датчик — лишь заготовки, а полностью рабочий компонент ещё предстоит написать.
Для весов или NFC-устройства: найти катушку по считанному RFID UID (сначала uid, затем twin_uid), вычислить вес нетто и записать weight_available и last_update с маской обновления. Руководство завершается полным скетчем для ESP32 (WiFi, ArduinoJson).
Минимальный клиент на Python на основе Pyrebase4: он входит в аккаунт, выводит список ваших катушек и показывает, сколько катушек у каждого друга. Руководство содержит весь скрипт и пример запуска.
Односторонний мост из TigerTag в экземпляр Spoolman: бренды становятся поставщиками, каждое сочетание бренда, материала и цвета становится филаментом, а каждый документ инвентаря — катушкой, которая создаётся или обновляется через REST API Spoolman. Запускайте его из cron, systemd или Docker.
Контракт, которому следуют 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}, вы можете читать инвентарь и стеллажи этого друга только для чтения; удаление документа немедленно прекращает доступ.
Опрашивайте не чаще чем раз в 5 минут и никогда не чаще чем раз в 30 секунд, записывайте только при изменении значения и передавайте limit при чтении списков (200 катушек, 50 стеллажей). Firebase App Check не применяется принудительно.
Репозиторий считается публичным контрактом: изменения, затрагивающие клиенты, попадают в этот репозиторий в том же выпуске, а журнал изменений относит каждое из них к категории 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 конечного пользователя, а 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 и следуйте ему от входа до первого чтения.