Plant Reminder: Rega plantas

Ligue o Plant Reminder ao Home Assistant e à Alexa

Uma API de leitura e ações para as suas plantas: veja o que precisa de cuidados e registe regas e adubações (ou anule-as) 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 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:

  1. Abra o separador 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, 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

EndpointO que faz
GET /v1/due?days=0..7Cuidados 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/plantsLista 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}/fertilizationsHistórico de adubações de uma planta. Os mesmos parâmetros opcionais.
GET /v1/actionsAções registadas com o seu token. limit é opcional (de 1 a 100, predefinição 20).
GET /v1/roomsLista 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

EstadoCódigoSignificado
400bad_requestO pedido está mal formado (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 caducou e tem de ser renovado (a Alexa fá-lo sozinha).
402api_access_expiredO acesso à API terminou (Premium ou passe). Renove-o na app.
403insufficient_scopeO token não tem permissão para registar cuidados.
403write_disabledAs escritas estão temporariamente desativadas do nosso lado. A leitura continua a funcionar.
404not_foundA rota, a planta ou a ação não existe.
404nothing_to_undoNão há nada do seu token para anular.
409already_goneO que tentou anular já tinha sido removido.
410expiredA ação tem mais de 24 horas e já não pode ser anulada.
429rate_limitedDemasiados pedidos. Aguarde os segundos indicados no cabeçalho Retry-After.
503api_disabledA 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.