Блог → Метеорадар на телевизоре
Задача: вывести метеорадар на «умный» телевизор с Android на борту. Казалось бы, что может быть проще? Запустил браузер, открыл Windy, вот тебе и метеорадар.
Однако оказалось, что телевизор не такой и умный – Windy на нём открылся, но раз в 10-15 минут вместо гроз и дождей показывал ошибку WebGL.
Пора бы начинать искать лёгкие пути, но не в этот раз, конечно же. Я подумал: раз ящик не может справиться с браузерным графическим движком, пусть другое устройство открывает метеорадар и делает скриншот, а телевизор соответственно будет показывать этот скриншот. Уж PNG-картинку он должен вывести без затруднений.
Поручать эту задачу домашнему компьютеру – не вариант. Он может быть выключен, он может быть занят, он может быть офлайн. А вот Linux-сервер в дата-центре – самое то; тем более, что их есть у меня. Получившаяся в итоге конструкция выглядит так:
- На сервере установлены браузер Chrome и Puppeteer – библиотека Node.js, которая позволяет программно управлять браузером. Написан скрипт, который раз в 5 минут открывает Chrome в headless-режиме, заходит на Windy, ждёт некоторое время, пока всё прогрузится, и делает скриншот.
- На том же сервере присутствует HTML-файл, который выводит этот скриншот во весь экран, и регулярно проверяет, не обновилась ли картинка. Если обновилась, он сначала загружает её в память, а затем выводит – так экран не мерцает при обновлении. Да, мелочи важны.
Именно эта страница и открыта в браузере на телевизоре.