Plant Reminder: Regar plantas

Conecte o Plant Reminder ao Home Assistant e à Alexa

Uma API de leitura e ações para suas plantas: veja o que precisa de cuidados e registre regas e adubações (ou desfaça) a partir da sua casa inteligente.

Incluída no Premium Ou um passe de 30 dias por 30 tokens Home Assistant Alexa: em breve

O que é

A API do Plant Reminder permite que outras ferramentas leiam suas plantas e registrem os cuidados: ler o que está pendente e agir registrando regas e adubações ou desfazendo-as. O Home Assistant e a Alexa usam essa API, e qualquer script seu também pode usá-la.

Ela está incluída no Premium, ou você pode obter um passe de 30 dias por 30 tokens (os tokens são comprados no app). O passe não é renovado automaticamente.

A API nunca permite excluir plantas, fotos nem histórico.

Crie o token no app

Cada integração usa um token pessoal. Para criá-lo:

  1. Abra a aba Mais e entre em Home Assistant e Alexa.
  2. Toque em Ativar.
  3. Toque em Criar token.
  4. Toque em Copiar.

O token só é mostrado uma vez, então copie-o na hora. Você pode revogá-lo a qualquer momento e criar outro.

A opção Permitir registrar regas e adubações vem marcada por padrão. Se você desmarcá-la, o token fica somente leitura e qualquer escrita retorna insufficient_scope.

Home Assistant

Tudo o que segue pode ser colado no seu configuration.yaml. Troque SEU_TOKEN pelo token que você copiou.

Sensor: plantas para regar

Um sensor rest que consulta a API a cada 300 segundos. O estado dele é o número de plantas para regar hoje ou atrasadas. O atributo plants lista tudo o que está previsto, cada item 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 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 desfazer

Um rest_command por ação. plant_reminder_water e plant_reminder_fertilize recebem um plant_id; os identificadores vêm de GET /v1/plants ou do 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 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 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 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 SEU_TOKEN"
    content_type: "application/json"
    payload: "{}"

Dica: em vez de escrever o token no arquivo, guarde-o em secrets.yaml e referencie-o com !secret.

Automaçã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:); troque 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 em uma versão específica do Home Assistant; a sintaxe segue a documentação da 2024.10 em diante. Se algo não funcionar na sua versão, escreva para nós dizendo qual você usa. O identificador da entidade vem do nome do sensor: confira-o nas Ferramentas do desenvolvedor se o seu for diferente.

Referência dos endpoints

Todas as rotas partem da URL base abaixo e exigem o cabeçalho Authorization: Bearer SEU_TOKEN. Os corpos das requisições são JSON.

URL base: https://kerijldtrzlwaawlpdcw.supabase.co/functions/v1/public-api

EndpointO que faz
GET /v1/due?days=0..7Cuidados previstos nos próximos N dias (de 0 a 7, padrão 1), incluindo os atrasados: rega, adubação e transplante. Cada item tem o seu kind.
GET /v1/plantsLista suas plantas.
GET /v1/plants/{id}Detalhes 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, padrão 100) são opcionais.
GET /v1/plants/{id}/fertilizationsHistórico de adubações de uma planta. Os mesmos parâmetros opcionais.
GET /v1/actionsAções registradas com o seu token. limit é opcional (de 1 a 100, padrão 20).
GET /v1/roomsLista seus cômodos com quantas plantas cada um tem (só as que são regadas).
POST /v1/plants/{id}/water{at?}Registra uma rega. at é uma data ISO (padrão: agora; não pode ser futura).
POST /v1/plants/{id}/fertilize{at?, fertilizer_form?, application_method?}Registra uma adubação. at funciona do mesmo jeito. fertilizer_form aceita liquid ou solid, e application_method aceita soil, foliar ou root_drench; se você não enviar, são usados os da última adubação da planta.
POST /v1/due/water{dry_run?}Rega todas as plantas pendentes. Com dry_run: true só faz uma simulação e não registra nada. Um lote conta como uma escrita.
POST /v1/rooms/{id}/water{at?, dry_run?}Registra uma rega em todas as plantas desse cômodo. at funciona do mesmo jeito; com dry_run: true só devolve a lista. Conta como uma escrita e é desfeito por inteiro.
POST /v1/actions/undo{action_id?}Desfaz uma ação. Sem action_id, desfaz a última.
  • Nas escritas você pode enviar o cabeçalho opcional Idempotency-Key: repetir uma requisição com a mesma chave retorna o resultado original em vez de registrá-lo duas vezes.
  • As datas são ISO 8601 em UTC.
  • Cada resposta traz api_version (atualmente "1").
  • Os erros têm o formato {"error": "código", "message": "..."}.

Erros e limites

StatusCódigoSignificado
400bad_requestA requisição está malformada (por exemplo, um parâmetro fora do intervalo).
400invalid_dateA data não é válida: é futura, anterior à adoção da planta ou não está em ISO 8601.
401invalid_tokenO token não foi enviado, está errado ou foi revogado.
401token_expiredO token de acesso expirou e precisa ser renovado (a Alexa faz isso sozinha).
402api_access_expiredO acesso à API terminou (Premium ou passe). Renove no app.
403insufficient_scopeO token não tem permissão para registrar cuidados.
403write_disabledAs escritas estão temporariamente desativadas do nosso lado. A leitura continua funcionando.
404not_foundA rota, a planta ou a ação não existe.
404nothing_to_undoNão há nada do seu token para desfazer.
409already_goneO que você tentou desfazer já tinha sido removido.
410expiredA ação tem mais de 24 horas e não pode mais ser desfeita.
429rate_limitedRequisições demais. Aguarde os segundos indicados no cabeçalho Retry-After.
503api_disabledA API está temporariamente desativada.

Limites

  • 10 requisições por minuto e 5.000 por dia por token.
  • 60 escritas por dia por token (um lote conta como uma).
  • Desfazer só remove o que a sua própria integração registrou nas últimas 24 horas.

Alexa Em breve

A skill do Plant Reminder para a Alexa ainda está em processo de certificação, então ainda não está disponível. Veja como vai funcionar:

Você 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

Você vai vincular sua conta pelo app Alexa. A skill estará disponível em inglês e espanhol. Depois de registrar uma planta, a skill pergunta se você quer registrar outra: diga o nome ou «that's all» / «ya está». As listas longas são lidas de cinco em cinco. Se você perguntar por uma planta («does the monstera need water?» / «¿toca regar la monstera?»), ela diz se é para hoje, quantos dias de atraso tem ou em que dia é; se for a hora, se oferece para registrar a rega.

Privacidade

De cada token guardamos a data do último uso e uma contagem diária de requisições, para aplicar os limites e mostrar a você se ele está em uso.

O token em si só é guardado na forma de hash, nunca em texto puro: ninguém, nem nós, consegue lê-lo de novo. Por isso ele 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.