Dúvida com o serviço camera.snapshot


(Nuno Freire) #1

Bom Dia,

Tenho um script a correr para que sempre que alguém abre a porta receber por mail uma notificação com 6 fotos.
Tudo corria muito bem até ter alterado para começar a enviar a notificação para o Telegram.

O script

 burglar: 
    alias: Alarm
    sequence:
         - service: camera.snapshot
           data: 
                   filename: /tmp/snapshot_1.jpeg
         - delay:
                   seconds: 2
         - service: camera.snapshot
           data: 
                   filename: /tmp/snapshot_2.jpeg
          - delay:
                   seconds: 2
          - service: camera.snapshot
            data:
                   filename: /tmp/snapshot_3.jpeg
          - delay:
                   seconds: 2
          - service: camera.snapshot
            data:
                   filename: /tmp/snapshot_4.jpeg
          - delay:
                   seconds: 2
          - service: camera.snapshot
          data:
                   filename: /tmp/snapshot_5.jpeg
          - delay:
                   seconds: 2
          - service: camera.snapshot
            data:
                  filename: /tmp/snapshot_6.jpeg
          - service: shell_command.camera_convert --> Onde acontece o Erro
          - service: notify.telegram
            data:
                  title: 'Porta Aberta'
                  message: 'A Porta está Aberta'
                  data:
                        photo: 
                                - file: /tmp/snapshot_1.jpeg
                                - file: /tmp/snapshot_2.jpeg
                                - file: /tmp/snapshot_3.jpeg
                                - file: /tmp/snapshot_4.jpeg
                                - file: /tmp/snapshot_5.jpeg
                                - file: /tmp/snapshot_6.jpeg

shell_command.camera_convert
#!/bin/bash
convert /tmp/snapshot_1.jpeg /tmp/snapshot_1.jpeg
convert /tmp/snapshot_2.jpeg /tmp/snapshot_2.jpeg
convert /tmp/snapshot_3.jpeg /tmp/snapshot_3.jpeg
convert /tmp/snapshot_4.jpeg /tmp/snapshot_4.jpeg
convert /tmp/snapshot_5.jpeg /tmp/snapshot_5.jpeg
convert /tmp/snapshot_6.jpeg /tmp/snapshot_6.jpeg

Erro

convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_1.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_1.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_2.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_2.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_3.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_3.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_4.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_4.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_5.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_5.jpeg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: Not a JPEG file: starts with 0xef 0xbb `/tmp/snapshot_6.jpeg' @ error/jpeg.c/JPEGErrorHandler/322.
convert-im6.q16: no images defined `/tmp/snapshot_6.jpeg' @ error/convert.c/ConvertImageCommand/3258.

(Jorge Assunção) #2

Penso que o principal problema é estares a converter e gravar com o mesmo nome. Qual é o objectivo de pegar em /tmp/snapshot_1.jpeg e transformar em /tmp/snapshot_1.jpeg? Tem o mesmo nome e a mesma extensão…

Além disso não estás a enviar nenhuma opção com o comando convert.

The convert command is used to convert an image. The format is as follows:
convert [input options] input file [output options] output file.

O comando como tens, sem opções, serve apenas para converter a extensão do ficheiro.

If you have a JPG file and you wish to convert it to a PNG then you would use the following command:
convert image.jpg image.png

P.S.: Snapshot é a função de backup do Hass.io, a tua duvida é com o serviço camera.snapshot. Alterei o titulo para reflectir a tua dúvida.


(Rodolfo) #3

@nfreire apenas uma questão essa tua camera é ip? consegues saber qual o endereço que tens que por no browser para veres a imagem?

Se sim, a automação pode ser mais simples.


(Nuno Freire) #4

Boas, é um raspberry pi zero com o Montioneye OS para ver tenho apenas http://ip_do_pi:8882 com o user e pass


(Jorge Assunção) #5

E como capturas as imagens?


(Nuno Freire) #6

Boas, a questão do convert foi um “work around” que encontrei para um problema identificado com o anexar das fotos para serem enviadas por mail ( que era a forma que tinha de ser notificado antes).


(Nuno Freire) #7

Para captruar as imagens uso isto


(Jorge Assunção) #8

Esquece isso! Eu estou a usar a mesma técnica e para a mesma coisa. A automação é:

automation:

#### FRONT DOOR OPEN
  - alias: 'Porta da Rua aberta'
    trigger:
      platform: state
      entity_id: sensor.porta_da_rua
      from: 'Fechada'
      to: 'Aberta'
    action:
      - service: camera.snapshot
        data:
          entity_id: camera.homecam01_porta_rua
          filename: '/config/cam_snapshots/latest_hall_entrada.jpg'
      - service: script.notify_telegram
        data_template:
          title: "{{ as_timestamp (now()) | timestamp_custom('%d/%b/%Y %T') }}"
          message: Porta da Rua - ABERTA 
          file: "/config/cam_snapshots/latest_hall_entrada.jpg"
          caption: "{{ as_timestamp (now()) | timestamp_custom('%d/%b/%Y %T') }} \n Porta da Rua - ABERTA"

E o script é:

script:
#### NOTIFY TELEGRAM
  notify_telegram:
    sequence:
      - condition: state
        entity_id: input_boolean.notification_telegram
        state: 'on'
      - service: notify.telegram_ha_info
        data_template:
          title: '{{ title }}'
          message: '{{ message }}'
          data:
            photo:
              file: '{{ file }}'
              caption: '{{ caption }}'

E funciona 5 estrelas. Ainda não tentei foi mandar mais de uma foto na mensagem…


(Nuno Freire) #9

Boas,

Antes de mais Obrigado…

A foto já tira mas fico com este erro

Invalid service data for notify.telegram: extra keys not allowed @ data[‘caption’]. Got ‘03/May/2018 15:02:07 \n Porta da Rua - ABERTA’
extra keys not allowed @ data[‘file’]. Got ‘/tmp/latest_hall_entrada.jpg’


(Jorge Assunção) #10

Alteras-te os nomes na automação para bater certo com a tua foto?


(Nuno Freire) #11

mantive o nome “latest_hall_entrada.jpg” apenas alterei para a pasta “tmp”


(Jorge Assunção) #12

Alteraste nas duas linhas do script? Mostra como ficou


(Nuno Freire) #13

Script

#### NOTIFY TELEGRAM
 notify_telegram:
    sequence:
      - service: notify.telegram
        data_template:
          title: '{{ title }}'
          message: '{{ message }}'
          data:
            photo:
              file: '{{ file }}'
              caption: '{{ caption }}'

Automação

- action:
  - data:
      entity_id: camera.Entrada
      filename: '/tmp/latest_hall_entrada.jpg'
    service: camera.snapshot
  - service: notify.telegram
    data_template:
        title: "{{ as_timestamp (now()) | timestamp_custom('%d/%b/%Y %T') }}"
        message: Porta da Rua - ABERTA 
        file: "/config/cam_snapshots/latest_hall_entrada.jpg"
        caption: "{{ as_timestamp (now()) | timestamp_custom('%d/%b/%Y %T') }} \n Porta da Rua - ABERTA"
  alias: Alarme
  condition:
  - condition: state
    entity_id: input_boolean.pir
    state: 'on'
  id: '1525355444516'
  trigger:
  - entity_id: sensor.porta
    from: FECHADA
    platform: state
    to: ABERTA

(Jorge Assunção) #14

Isso foi gerado pelo gestor de automações do HA? Estão aí espaços a mais a seguir a data_template


(Nuno Freire) #15

Sim, foi uma mistura entre o gestor de automações e inserido manualmente no ficheiro.

Quando chegar a casa já corrijo.


(Jorge Assunção) #16

Assim que me conseguir sentar a um computador já vejo se consigo escrever isso como deve de ser.

O gestor de automações já devia ter saído do HA à muito tempo, isso foi um teste que correu mal e lá ficou…


(Rodolfo) #17

Volto a perguntar…tu consegues através de o link colado no teu browser ver logo a imagem da camera? Se sim não é preciso essas voltas todas.


(Jorge Assunção) #18

Já escrevi aqui a automação mas acho que está aqui qualquer coisa que não está a bater bem. A automação é activada pela abertura da porta e tem a condição do PIR detectar movimento, se alguém entrar sem o PIR detectar e fechar logo a porta a automação não corre…

Além disso não estavas a utilizar o script que te mandei na automação nem tinhas mudado o caminho da imagem a enviar.

Seja como for aqui vai. Depois diz se funcionou.

 automation:
   - alias: 'Alarme'
     trigger:
       platform: state
       entity_id: sensor.porta
       from: 'Fechada'
       to: 'Aberta'
     condition:
      - condition: state
        entity_id: input_boolean.pir
        state: 'on'
     action:
       - service: camera.snapshot
         data:
           entity_id: camera.entrada
           filename: '/tmp/latest_hall_entrada.jpg'
       - service: script.notify_telegram
         data_template:
           title: "{{ as_timestamp (now()) | timestamp_custom('%d/%m/%Y %T') }}"
           message: Porta da Rua - ABERTA 
           file: "/tmp/latest_hall_entrada.jpg"
           caption: "{{ as_timestamp (now()) | timestamp_custom('%d/%m/%Y %T') }} \n Porta da Rua - ABERTA"

(Nuno Freire) #19

@RodolfoVieira sim consigo ver directo pelo link


(Nuno Freire) #20

Obrigado @j_assuncao Resolvido!

@RodolfoVieira qual é a outra possibilidade?