Как работает конфигурация: от таблицы до экрана
> Медиадисплей > Интеграции > Интеграция с GoogleДата обновления: 12 июня 2026 г. Дата публикации: 4 июня 2026 г. Автор: Жапов Ананда
Что важно знать? Важно показать взаимосвязь трёх элементов:
- Макет (экран) – то, что видит пользователь на экране (дизайн, виджеты, таблицы, картинки).
- Google Таблица – источник данных (текст, ссылки, числа).
- INI-конфиг – мост между таблицей и макетом.
Макет (экран) – что это и где брать имена контейнеров
Макет – это дизайн-проект экрана, созданный в редакторе Медиадисплей. В нём есть:
- Контейнеры – области, куда подставляются данные (текст, таблица, диаграмма, виджет).
- Имена контейнеров – уникальные идентификаторы, которые вы задаёте при редактировании макета.
Как узнать имя контейнера?
- Откройте браузер, зайдите на сервер Медиадисплей и зайдите вкладку “Макеты”.
- Слева вы можете видеть их название макета (например,
MenuBoard). - Нажмите на элемент (текстовое поле, таблицу, картинку) – в выбранном компоненте будет указана поле Name или Имя.
- Перепишите это имя – оно должно совпадать со значением
nameв вашем INI-файле.
Пример для макета MenuBoard (меню кафе):
| Элемент на экране | Имя контейнера (Name) | Тип | Что отображает |
|---|---|---|---|
| Заголовок «СУПЫ» | Заголовка_СУПЫ |
widgettext | Название раздела |
| Блок с ценой | Ценик |
text | Стоимость блюда |
| Таблица с блюдами | Меню |
widgetsTable | Список блюд (колонки Name, Description, Old_Price, Price) |
| Картинка блюда | Фон_меню |
image (виджет) | Фото блюда |
| Описание блюда | Описание_фона |
widgettext | Ингредиенты |
Важно: Имена контейнеров чувствительны к регистру! В INI-файле пишите точно так же, как в редакторе макетов.
Google Таблица – структура и ID
Ваша Google Таблица содержит несколько листов. Каждый лист может использоваться для разных целей.
Как найти ID таблицы (SpreadsheetId)?
Откройте таблицу в браузере. В адресной строке будет URL вида:
Часть 1n29pDQYxg3_OTY3IP8tbUvo9ynnBH_ii8H8-c0T-A8U – это и есть SpreadsheetId. Скопируйте его в секцию [Default] вашего INI-файла.
Структура листа на примере меню (лист «Меню»)
Представьте, что лист «Меню» выглядит так:
Тогда в INI-файле вы напишете:
[Title]
Timer=60
enable=1
type=widgettext
name=Заголовка_СУПЫ
source=Меню!A1 # ячейка A1 содержит слово «Супы»
[MenuPrice]
Timer=60
enable=1
type=text
name=Ценик
source=Меню!E4 # ячейка E4 содержит 200₽
[TableMenuBoard]
Timer=10
enable=1
type=table
name=Меню
ListRange=Меню!B2:E7 # колонки B,C,D,E
columns=Name,Description,Old_Price,Price
[MenuImage]
Timer=60
enable=1
type=image
name=Фон_меню
source=Меню!F4 # ячейка F4 содержит URL картинки
[MenuDescription]
Timer=60
enable=1
type=widgettext
name=Описание_фона
source=Меню!C4 # ячейка C4 содержит описание
[MenuName]
Timer=60
enable=true
type=widgettext
name=Название_блюд
source=Меню!B4 # ячейка B4 содержит название блюд как лагман
Как понять, какой диапазон указать в ListRange?
- Определите, какие данные должны попасть в таблицу на экране.
- В Google Sheets выделите прямоугольную область (например,
B2:E7). - Убедитесь, что первая строка диапазона – это заголовки колонок (если они нужны), а последующие – данные.
- Запишите диапазон в формате
ИмяЛиста!B2:E7.
Как работает source?
- Если
source=Меню!A1, утилита возьмёт значение из ячейки A1 листа «Меню». - Если
value=Статический текст, то данные из таблицы не читаются, используется то, что написано в INI. - Если и
source, иvalueпусты – секция игнорируется.
Сопоставление INI-конфига с макетом – пошаговая проверка
Когда вы запускаете утилиту (или службу), происходит следующее:
- Читается INI-файл.
- Для каждой секции:
- Если
type=text, создаётся контейнер с именемnameи значением (изvalueили изsource). - Если
type=table, читается диапазонListRange, строки превращаются в таблицу. Имя таблицы =name. - Если
type=chart, читается диапазонListRange, строится диаграмма. Имя диаграммы =name. - Если
type=widgettext,imageилиvideo, создаётся виджет в контейнереWidgets. - Формируется JSON-запрос
SetCoverRequest. - Запрос отправляется на
http://127.0.0.1:5206/MediaController/1.0/SetCover. - Сервер Медиадисплей обновляет экран.
Чтобы убедиться, что конфиг работает:
- Временно включите
OutputFileName=test.jsonв секции[Default]. - Запустите утилиту вручную (
MD4_GoogleConnector.exe config=...). - Откройте полученный JSON и проверьте, что:
- Имена контейнеров совпадают с именами в макете.
- Значения взяты из правильных ячеек.
- Таблицы содержат ожидаемые строки.
Примеры, как это всё работает:
1. Макет в редакторе Медиадисплей
На этом скриншоте показан макет MenuBoard. Выделен элемент «Ценик», в правой панели свойств видно поле Name со значением Ценик.
2. Google Таблица с данными
На скриншоте виден лист «Меню». Подсвечены ячейки:
- A1 – значение «Супы» (заголовок)
-
E4 – значение «200₽» (цена)- Диапазон
B2:E7 – таблица с блюдами-
F4 – ссылка на картинку3. INI-файл с соответствиями
Вернитесь туда вверх и еще раз посмотрите конфигурацию и вы видите, где строки source=Меню!A1, source=Меню!E4, ListRange=Меню!B2:E7 указано к каким элементам макета они относятся.
4. Результат на экране
Скриншот из веб-интерфейса Медиадисплей, где отображаются данные: заголовок «Супы», цена 200₽, таблица, картинка.
Частые ошибки и их решение
| Проблема | Вероятная причина | Как исправить |
|---|---|---|
| На экране пусто | Неправильный ReceiverId |
Убедитесь, что ReceiverId=d1 (или тот, который вы создали на сервере). |
| Текст не обновляется | Неверное имя контейнера | Проверьте name – он должен в точности совпадать с именем элемента в макете. |
| Таблица пустая или не те данные | Неверный диапазон ListRange |
Проверьте, что в таблице есть данные, и диапазон указан правильно (например, Лист!A2:D10, а не Лист!A2:D10 с лишним пробелом). |
| Изображение не отображается | Неверная ссылка или тип | Убедитесь, что type=image, а в source или value – полный URL или HTML-код. |
| Ошибка 403 Google API | Не настроен доступ | Дайте сервисному аккаунту права читателя к таблице. |
| Ошибка 429 Google API | Превышена квота запросов | Увеличьте интервалы Timer (например, с 10 секунд до 20) или оптимизируйте количество секций. |
| Секция игнорируется | enable не равен 1/true/on |
Проверьте значение enable. |
Нет данных из [month] |
Сегодня, например июня, а лист называется 6? |
Лист должен называться числом месяца (1,2,3…12) или названием месяца («Июнь», «June»). |
Рекомендации
- Сначала запустите консольную утилиту (не службу). Это быстрее для отладки.
- Включите
OutputFileName– так вы увидите, какой JSON уходит на сервер. - Проверяйте JSON – если в нём нет нужного контейнера, значит, в INI-файле ошибка в
nameилиtype. - Используйте
valueдля статического текста – так вы проверите, правильно ли настроен макет, без Google Sheets. - Для таблиц сначала выведите их в JSON с
OutputFileName– убедитесь, что строки и колонки правильные. - После отладки переносите конфиг в службу.
Если всё равно не работает – сохраните JSON, полученный от утилиты, и скриншот макета с именами контейнеров. Сравните их – расхождения станут очевидны.