O que é
A API do Plant Reminder permite que outras ferramentas leiam as suas plantas e registem os cuidados: ler o que está por fazer e agir registando regas e adubações ou anulando-as. O Home Assistant e a Alexa usam-na, tal como qualquer script seu.
Está incluída no Premium, ou pode obter um passe de 30 dias por 30 tokens (os tokens compram-se na app). O passe não se renova automaticamente.
A API nunca permite eliminar plantas, fotografias nem histórico.
Crie o token na app
Cada integração usa um token pessoal. Para o criar:
- Abra o separador Mais e entre em Home Assistant e Alexa.
- Toque em Ativar.
- Toque em Criar token.
- Toque em Copiar.
O token só é mostrado uma vez, por isso copie-o de imediato. Pode revogá-lo a qualquer momento e criar outro.
A opção Permitir registar regas e adubações vem assinalada por predefinição. Se a desassinalar, o token fica apenas de leitura e qualquer escrita devolve insufficient_scope.
Home Assistant
Tudo o que se segue pode ser colado no seu configuration.yaml. Substitua O_SEU_TOKEN pelo token que copiou.
Sensor: plantas para regar
Um sensor rest que consulta a API a cada 300 segundos. O seu estado é o número de plantas a regar hoje ou em atraso. O atributo plants lista tudo o que está previsto, cada elemento com o seu kind: watering (rega), fertilization (adubação) ou transplant (transplante).
rest:
- resource: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due?days=1
scan_interval: 300
headers:
Authorization: "Bearer O_SEU_TOKEN"
sensor:
- name: "Plantas para regar"
value_template: "{{ value_json.plants | selectattr('kind', 'eq', 'watering') | list | count }}"
json_attributes:
- plants
- overdue_count
- today
- as_of
Comandos: regar, adubar e anular
Um rest_command por ação. plant_reminder_water e plant_reminder_fertilize recebem um plant_id; os identificadores obtêm-se em GET /v1/plants ou no atributo plants do sensor.
rest_command:
plant_reminder_water:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/water"
method: POST
headers:
Authorization: "Bearer O_SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_fertilize:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/plants/{{ plant_id }}/fertilize"
method: POST
headers:
Authorization: "Bearer O_SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_water_all_due:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/due/water"
method: POST
headers:
Authorization: "Bearer O_SEU_TOKEN"
content_type: "application/json"
payload: "{}"
plant_reminder_undo:
url: "https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api/v1/actions/undo"
method: POST
headers:
Authorization: "Bearer O_SEU_TOKEN"
content_type: "application/json"
payload: "{}"
Dica: em vez de escrever o token no ficheiro, guarde-o em secrets.yaml e refira-o com !secret.
Automatização: avisar quando houver plantas para regar
Envia uma notificação com os nomes das plantas sempre que o sensor passa de zero. Usa a sintaxe do Home Assistant 2024.10 ou posterior (triggers: e actions:); substitua notify.notify pelo seu próprio serviço de notificações.
automation:
- alias: "Plant Reminder: plantas para regar"
triggers:
- trigger: numeric_state
entity_id: sensor.plantas_para_regar
above: 0
actions:
- action: notify.notify
data:
title: "Plantas para regar"
message: >-
{{ state_attr('sensor.plantas_para_regar', 'plants') | selectattr('kind', 'eq', 'watering') | map(attribute='name') | join(', ') }}
Este exemplo ainda não foi verificado numa versão concreta do Home Assistant; a sintaxe segue a documentação da 2024.10 e posteriores. Se algo não funcionar na sua versão, escreva-nos e diga-nos qual usa. O identificador da entidade deriva do nome do sensor: confirme-o nas Ferramentas de programador se o seu for diferente.
Referência dos endpoints
Todas as rotas partem do URL base abaixo e exigem o cabeçalho Authorization: Bearer O_SEU_TOKEN. Os corpos dos pedidos são JSON.
URL base: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api
| Endpoint | O que faz |
|---|---|
GET /v1/due?days=0..7 | Cuidados previstos nos próximos N dias (de 0 a 7, por omissão 1), incluindo os atrasados: rega, adubação e transplante. Cada elemento tem o seu kind. |
GET /v1/plants | Lista as suas plantas. |
GET /v1/plants/{id} | Detalhe de uma planta. |
GET /v1/plants/{id}/waterings?since=&limit= | Histórico de regas de uma planta. since (data ISO) e limit (de 1 a 500, predefinição 100) são opcionais. |
GET /v1/plants/{id}/fertilizations | Histórico de adubações de uma planta. Os mesmos parâmetros opcionais. |
GET /v1/actions | Ações registadas com o seu token. limit é opcional (de 1 a 100, predefinição 20). |
GET /v1/rooms | Lista as suas divisões com quantas plantas tem cada uma (só as que se regam). |
POST /v1/plants/{id}/water{at?} | Regista uma rega. at é uma data ISO (predefinição: agora; não pode ser futura). |
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?} | Regista uma adubação. at funciona da mesma forma. fertilizer_form aceita liquid ou solid, e application_method aceita soil, foliar ou root_drench; se não os enviar, usam-se os da última adubação da planta. |
POST /v1/due/water{dry_run?} | Rega todas as plantas que precisam. Com dry_run: true só faz uma simulação e não regista nada. Um lote conta como uma escrita. |
POST /v1/rooms/{id}/water{at?, dry_run?} | Regista uma rega em todas as plantas dessa divisão. at funciona da mesma forma; com dry_run: true só devolve a lista. Conta como uma escrita e anula-se por inteiro. |
POST /v1/actions/undo{action_id?} | Anula uma ação. Sem action_id, anula a última. |
- Nas escritas pode enviar o cabeçalho opcional
Idempotency-Key: repetir um pedido com a mesma chave devolve o resultado original em vez de o registar duas vezes. - As datas são ISO 8601 em UTC.
- Cada resposta traz
api_version(atualmente"1"). - Os erros têm a forma
{"error": "código", "message": "..."}.
Erros e limites
| Estado | Código | Significado |
|---|---|---|
| 400 | bad_request | O pedido está mal formado (por exemplo, um parâmetro fora do intervalo). |
| 400 | invalid_date | A data não é válida: é futura, anterior à adoção da planta ou não está em ISO 8601. |
| 401 | invalid_token | O token não foi enviado, está errado ou foi revogado. |
| 401 | token_expired | O token de acesso caducou e tem de ser renovado (a Alexa fá-lo sozinha). |
| 402 | api_access_expired | O acesso à API terminou (Premium ou passe). Renove-o na app. |
| 403 | insufficient_scope | O token não tem permissão para registar cuidados. |
| 403 | write_disabled | As escritas estão temporariamente desativadas do nosso lado. A leitura continua a funcionar. |
| 404 | not_found | A rota, a planta ou a ação não existe. |
| 404 | nothing_to_undo | Não há nada do seu token para anular. |
| 409 | already_gone | O que tentou anular já tinha sido removido. |
| 410 | expired | A ação tem mais de 24 horas e já não pode ser anulada. |
| 429 | rate_limited | Demasiados pedidos. Aguarde os segundos indicados no cabeçalho Retry-After. |
| 503 | api_disabled | A API está temporariamente desativada. |
Limites
- 10 pedidos por minuto e 5.000 por dia por token.
- 60 escritas por dia por token (um lote conta como uma).
- Anular só remove o que a sua própria integração registou nas últimas 24 horas.
Alexa Em breve
A skill do Plant Reminder para a Alexa ainda está em processo de certificação, pelo que ainda não está disponível. Assim vai funcionar:
Poderá dizer:
Em inglês
- Alexa, open my plants
- Alexa, ask my plants what needs watering today
- Alexa, ask my plants if the monstera needs water
- Alexa, tell my plants I watered the ficus
- Alexa, tell my plants I watered the ficus yesterday
- Alexa, tell my plants to water the plants in the living room
- Alexa, tell my plants to water everything due today
- Alexa, tell my plants to undo the last one
Em espanhol
- Alexa, abre mis plantas
- Alexa, pregunta a mis plantas qué toca regar hoy
- Alexa, pregunta a mis plantas si toca regar la monstera
- Alexa, dile a mis plantas que he regado el ficus
- Alexa, dile a mis plantas que regué el ficus ayer
- Alexa, dile a mis plantas que riegue las plantas del salón
- Alexa, dile a mis plantas que riegue todas las de hoy
- Alexa, dile a mis plantas que deshaga lo último
Vai associar a sua conta a partir da app Alexa. A skill estará disponível em inglês e espanhol. Depois de registar uma planta, a skill pergunta se quer registar outra: diga o nome ou «that's all» / «ya está». As listas longas são lidas de cinco em cinco. Se perguntar por uma planta («does the monstera need water?» / «¿toca regar la monstera?»), diz-lhe se é para hoje, quantos dias de atraso leva ou em que dia é; se for altura, oferece-se para registar a rega.
Privacidade
De cada token guardamos a data da última utilização e uma contagem diária de pedidos, para aplicar os limites e lhe mostrar se está em uso.
O token em si só é guardado sob a forma de hash, nunca em claro: ninguém, nem nós, o pode voltar a ler. Por isso só é mostrado uma vez.
Suporte
Para dúvidas, erros ou ajuda com a sua conta, escreva para [email protected].
Tempo de resposta habitual: 24–48 horas úteis.