...

суббота, 12 июля 2014 г.

Pebble My Data. «Хочешь сделать хорошо — сделай это сам!»

Одна из основных функций умных часов — отображение важной информации на экране, важной именно владельцу часов, а не разработчику приложения. Очень долго я искал приложение, которому можно указать, какую именно информацию показывать на часах. Хотелось видеть на часах состояние моих серверов, данные с погодной станции, пробки в городе. После долгих поисков я осознал, то чего я ищу не существует и это придётся делать самому. Так появилось приложение для умных часов Pebble My Data, которое ходит по ссылке за JSON'ом и показывает данные на экране часов. Возможно, оно может пригодиться не только мне.



Поиск решения
Для решения своей задачи долгое время я использовал Pebble Canvas (приложение позволяет очень гибко настраивать вид экрана часов) в связке с Tasker. Tasker на телефоне забирал с моего сервера текст и отдавал его в Pebble Canvas для отображения на часах. Это была жуткая конструкция, которая иногда ломалась в довольно неожиданных местах. Кроме того, Pebble Canvas до сих пор накладывает ограничение в 40 символов на значение поля, этого явно недостаточно чтобы показать всю необходимую информацию в одном поле, приходилось изворачиваться и делить информацию по разным полям.

Совсем недавно я обнаружил Pebble Cards, помимо встроенных сервисов приложение можно натравить на произвольный URL, по которому доступен JSON с информацией для отображения на часах. Кроме того, ему не требуется отдельного приложения на телефоне (так называемый Companion App). Благодаря второй версии Pebble SDK, телефонную часть, которая собственно и занимается хождением по ссылке за JSON'ом, можно реализовать на JavaScript и встроить в официальное приложение часов Pebble App. Кажется вот оно, то что мне нужно, но поигравшись с приложением пару дней я разочаровался, больше половины экрана часов занимают (кто бы мог подумать) часы с датой и для моей информации остаётся не так много места, которая отображается громадным шрифтом. Это наверное полезно, не нужно вглядываться, чтобы разглядеть время и информацию, но у меня сносное зрение и поэтому использовать так неэкономно драгоценное пространство экрана часов для меня сущее расточительство.


Наевшись кактусов, сытый, недовольный, вдохновлённый Pebble Cards я в очередной раз вспомнил грустное правило «хочешь сделать хорошо — сделай это сам» и написал Pebble My Data.






Приложение




Предостережение: приложение не содержит никаких встроенных сервисов, чтобы получить что-нибудь полезное на экране часов нужно иметь свой сервер/vps/хостинг на котором придётся попрограммировать, чтобы отдать приложению JSON с нужным содержимым.

Алгоритм работы приложения очень прост: забираем JSON по указанной в настройках ссылке, отображаем содержимое и совершаем какие-то дополнительные действия, если они указаны в JSON'е.


Ключевые возможности




  • Отображение на экране часов текста из JSON'а, полученного по указанной в настройках ссылке

  • Изменение интервала обновления

  • Принудительное обновление содержимого кнопками на часах

  • Добавление к ссылке GET параметров в зависимости от нажатой на часах кнопки (различаются короткие и длинные нажатия)

  • Добавление к ссылке текущих координат (отключаемо)

  • Включение вибрации, подсветки, изменение шифта, изменение поведения кнопок вверх/вниз

  • Аутентификация на сервере (необязательно)

  • Вибрация в случае потери связи с телефоном (отключаемо)

  • Отображение заряда часов




Практически всем этим можно управлять из JSON'а.
Описание JSON'а



Пример JSON'а:

{ "content": "Hello\nWorld!", "refresh": 300, "vibrate": 2, "font": 4, "theme": 0, "scroll": 1, "light": 1, "blink": 3, "updown": 1, "auth": "salt" }














































ПолеОписание (все поля опциональны)
content текст, который нужно отобразить на экране часов, для переноса строки используется "\n"
refresh задержка в секундах перед следующим обновлением (интервал обновления, по умолчанию 300 секунд)
vibrate повибрировать часами (1 — быстро, 2 — дважды, 3 — долго)
font изменить шрифт (1 — самый маленький… 8 — самый большой)
theme изменить оформление (0 — темное, 1 — светлое)
scroll 1 — после обновления перейти к началу содержимого
light 1 — ненадолго включить подсветку часов
blink помигать содержимым (число — количество миганий)
updown изменить поведение кнопок вверх/вниз (0 — прокрутка содержимого, 1 — использовать конпки для обновления содержимого)
auth соль для генерации токена аутентификации



Добавление GET параметров



Если включить в настройках отправку GPS координат, то к URL'у при каждом обновлении будут добавляться GET параметры lat и lon. Можно, к примеру, на сервере вычислять время восхода/заката в том месте, где сейчас находятся часы и менять оформление в зависимости от этого.

При нажатиях на кнопку SELECT на часах приложение пойдёт за JSON'ом по ссылке с GET параметром select=1 при коротком нажатии и select=2 при долгом нажатии. Если в последнем обновлении JSON'а изменилось поведение кнопок вверх/вниз, то при нажатии на эти кнопки приложение пойдёт за JSON'ом с параметрами up=1|2 или down=1|2. Благодаря этой функции можно попробовать реализовать меню на стороне сервера.


Аутентификация на сервере (необязательно)



При каждом запросе приложение устанавливает HTTP заголовок Pebble-Token: <token>. По умолчанию токен уникален для пары устройство/приложение, но вместо него в настройках можно указать что-нибудь другое. По этому заголовку удобно идентифицировать устройство.

Если в JSON'е была передана соль, то в следующих запросах будет устанавливается второй HTTP заголовок Pebble-Auth: <MD5(MD5(password)+salt)>. Вот этот заголовок уже можно использовать для аутентификации. Значение заголовка сохраняется при каждом запросе и не теряется после перезапуска приложения. Не нужно каждый раз посылать соль, разве что во время обострения паранойи. Можно отправить пустую соль, чтобы удалить заголовок.


Скриншоты




Ссылки




Приложение в Pebble App Store

Исходники и документация на GitHub

Обсуждение на Pebble Forums

Буду очень рад, если Pebble My Data добавит в вашу жизнь немного удобства.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий