Trabalho fora de casa quase todos os dias — terraceando, viajando, fazendo pairing presencial em cafés. Em mais de uma ocasião voltei para casa vermelho como um camarão porque esqueci do protetor solar. Foi por isso que, quando vi a feature de índice UV no Apple Watch, parei pra investigar a fundo. Segundo o Sapo.pt, a funcionalidade existe na app Meteorologia do relógio e mostra a intensidade da radiação ultravioleta sem depender da sensação térmica. Mas a conversa vai muito além de “olhar no pulso” — dá pra automatizar isso com APIs, integrar num dashboard e criar alertas reais. É disso que vou falar.
Por que o índice UV importa (mesmo quando está frio)
Confesso que durante anos ignorei esse dado. Achava que se o dia estivesse nublado ou ameno, não precisava de protetor solar. Erro clássico que a maioria dos devs comete porque ficamos enfurnados em escritório com luz artificial e perdemos a noção de exposição solar.
O índice UV mede a intensidade da radiação ultravioleta que chega à superfície, numa escala que vai de 0 a 11+ (em algumas escalas vai mais). Ele não tem relação direta com a temperatura. Em Santiago do Chile, em julho (inverno rigoroso), o índice UV pode passar de 5 num dia claro. Já no Rio de Janeiro em abril, mesmo com chuva fina, você toma 3 só esperando o ônibus.
Para quem trabalha exposto ao sol — seja em home office de varanda, seja em eventos ao ar livre, seja caminhando entre reuniões — esse número é a única métrica confiável pra decidir se vale puxar o FPS 50 do bolso.
Como o Apple Watch entrega essa informação
Segundo o Sapo.pt, basta abrir o app Meteorologia no relógio e procurar a opção de índice UV. A escala simplificada mostra valores entre 0 e 2 como nível baixo, depois sobe pra moderado (3–5), alto (6–7), muito alto (8–10) e extremo (11+).
Na prática, o relógio puxa esses dados do Apple Weather (que por sua vez consome várias fontes, incluindo dados de agências meteorológicas nacionais). Os modelos mais recentes — Series 9 em diante e Ultra — também usam sensores ambientais pra refinar essas leituras em tempo real quando você está ao ar livre com GPS ativo.
Aqui entra o primeiro ponto que me chamou atenção: o Apple Watch não é uma estação meteorológica, é um consumidor de dados. O índice UV mostrado no pulso é tão bom quanto a fonte por trás. Se você quiser algo independente do ecossistema Apple, dá pra montar a sua própria estação de alerta.
Comparativo: Apple Watch vs alternativas
Já testei as principais opções do mercado e a conclusão prática é esta:
- Apple Watch (Series 9+, Ultra) — UX excelente, dados do Apple Weather, integração nativa com Siri (“que horas vou precisar de protetor solar hoje?”). Limitado ao ecossistema iOS.
- Wear OS (Pixel Watch 3, Galaxy Watch) — apps de terceiros como UV Lens e AccuWeather funcionam bem, mas a consistência dos dados varia. Wear OS 5 melhorou bastante.
- Garmin (Fenix, Epix, Forerunner) — modelos outdoor (Fenix 7+, Epix Gen 2) já trazem widget de UV index integrado, normalmente consumindo dados do AccuWeather. Bateria dura semanas.
- Apps no celular (UV Index Widget, Sunscreen reminder) — gratuitos, sem hardware extra. A desvantagem é que você tem que lembrar de abrir o app.
Para mim, o pulo do gato está em combinar as duas coisas: o relógio pra consulta rápida e um backend próprio pra automações sérias.
Na Prática — montando um script de alerta de UV index
Essa é a parte que dev senior curioso vai gostar. Eu construí um pequeno script em Python que consulta a API do Open-Meteo (gratuita, sem cadastro) e me avisa quando o índice UV passa de 6 no meu CEP. Roda num cron, manda webhook pro Discord ou pro meu iPhone via Pushover.
Passo a passo:
- Tenha Python 3.10+ instalado.
- pip install requests python-dotenv.
- Crie um
.envcom seu webhook. - Cole o código abaixo num arquivo
uv_alert.py. - Agende via cron (
0 7 * * *pra rodar 7h da manhã) ou GitHub Actions.
import os
import requests
from datetime import datetime
from dotenv import load_dotenv
load_dotenv()
WEBHOOK_URL = os.getenv("DISCORD_WEBHOOK")
LAT = -22.9068 # Rio de Janeiro — ajuste pro seu CEP
LON = -43.1729
THRESHOLD = 6 # índice UV acima disso => alerta
def get_uv_index(lat: float, lon: float) -> dict:
url = "https://api.open-meteo.com/v1/forecast"
params = {
"latitude": lat,
"longitude": lon,
"current": "uv_index",
"timezone": "America/Sao_Paulo",
}
r = requests.get(url, params=params, timeout=10)
r.raise_for_status()
return r.json()
def classify_uv(value: float) -> str:
if value < 3:
return "baixo"
if value < 6:
return "moderado"
if value < 8:
return "alto"
if value < 11:
return "muito alto"
return "extremo"
def send_discord_alert(payload: dict):
if not WEBHOOK_URL:
raise RuntimeError("DISCORD_WEBHOOK nao definido no .env")
requests.post(WEBHOOK_URL, json=payload, timeout=10)
def main():
data = get_uv_index(LAT, LON)
uv = data["current"]["uv_index"]
label = classify_uv(uv)
if uv >= THRESHOLD:
send_discord_alert({
"content": (
f"☀️ Alerta de UV **{uv:.1f}** ({label}) "
f"agora em {datetime.now():%H:%M}. "
f"Protetor solar na mochila, chefe."
)
})
print(f"[ALERTA] UV {uv} ({label})")
else:
print(f"[ok] UV {uv} ({label}) — sem alerta")
if __name__ == "__main__":
main()
Por que escolhi Open-Meteo e não a API do Apple Weather? Porque o Open-Meteo expõe uv_index num endpoint simples, é gratuito até 10 mil requests/dia e não exige cartão. Pra automações pessoais, é imbatível. Se quiser dados mais ricos (cobertura de nuvens, ozônio), basta incluir "current": "uv_index,cloud_cover,ozone".
O THRESHOLD = 6 é meu gatilho pessoal. Você pode ajustar pra 3 se tiver pele muito clara ou trabalha exposto.
Como eu integro isso com o Apple Watch
O Apple Watch não consome webhooks diretamente, então precisei de uma ponte. A que melhor funcionou pra mim:
- Script Python envia pro Discord.
- Watch tem o app Discord instalado (consome notificações).
- Complicação do Discord na face do relógio mostra resumo dos canais.
Outra opção é usar Pushover, que tem app nativo pra Watch e API ridiculamente simples. Troca o send_discord_alert por um POST pra https://api.pushover.net/1/messages.json e pronto.
Erros comuns que vejo devs cometerem
Lista honesta do que eu já fiz ou vi gente fazendo:
- Confundir temperatura com UV. “Tá 18°C, não precisa de protetor.” Mentira. UV 6 com 18°C é comum em altitude ou em dias limpos de outono.
- Olhar o índice UV só quando lembra. Se você precisa lembrar de abrir um app, o sistema falhou. Automatize.
- Achar que nublado = proteção. Nuvens bloqueiam entre 20% e 80% da radiação UV, dependendo da densidade. Não é desculpa.
- Ignorar refletores. Areia reflete ~25% do UV. Água, ~10%. Concreto claro, ~15%. Se você trabalha em terrace com piso claro, dobra a exposição.
- Não configurar timezone direito na API. Peguei uma vez os dados em UTC e me alertou sobre UV alto às 3h da manhã. Sempre declare
"timezone": "America/Sao_Paulo"(ou a sua região). - Hardcodar coordenadas em vez de geocoding. Prefira resolver CEP -> lat/lon com ViaCEP + Nominatim do que manter um dicionário manual.
Implicações pra quem programa o dia inteiro
Esse tema parece trivial, mas carrega uma reflexão maior: nossos corpos viraram apêndices do código que escrevemos. Quando o relógio nos lembra de tomar água, levantar, olhar pra distância, verificar pressão arterial — e agora o UV — estamos externalizando a atenção que deveria ser nossa.
Não acho ruim. Acho que vale prestar atenção em quais sinais externos realmente agregam. Pra mim, alerta de UV alto às 7h me economiza 30 minutos de desconforto à noite e previne dano cumulativo real (a pele não esquece). É um ROI absurdo pra 50 linhas de Python.
Se você curte IoT, dá pra ir além: um ESP32 com sensor VEML6075 (UV) lendo em tempo real e enviando pra um dashboard Grafana. Mas isso já é outro post.
FAQ — perguntas que um dev faria
O Apple Watch mede UV com sensor próprio ou só consome dados online?
Consome dados online via Apple Weather. Sensores de UV dedicados existem em alguns Garmin outdoor, mas no Apple a leitura vem da rede meteorológica.
Funciona no Apple Watch SE?
Sim. O app Meteorologia e o índice UV estão disponíveis em todos os modelos a partir do Series 4 com watchOS 6+. A diferença é que SE tem processador mais antigo e a leitura é ligeiramente mais lenta pra abrir.
A informação é em tempo real ou previsão?
É leitura quase em tempo real, atualizada a cada hora pela fonte meteorológica. Não é previsão do dia inteiro como alguns apps de terceiros oferecem.
Posso criar uma complication personalizada no mostrador?
Não nativamente. Apps terceiros (como Weathergraph) criam complications que mostram UV. Para Watch Ultra, dá pra usar Scriptable com widget próprio.
Open-Meteo é confiável pra produção?
É usada em produção por várias empresas, tem SLA publicado, e os dados vêm do DWD (serviço meteorológico alemão) entre outros. Para automações pessoais, é mais que suficiente.
Qual FPS devo usar?
Não sou dermatologista, mas a recomendação geral é FPS 30+ pra uso diário e FPS 50+ pra exposição prolongada. Reaplicar a cada 2 horas é mais importante que o número do FPS.
Se você chegou até aqui e curtiu essa mistura de hardware consumer + script Python, é exatamente o tipo de conteúdo que posto toda semana. Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser que eu aprofunde a versão com ESP32 + sensor UV real.