Sensor mostrar strings em vez de valores

Possuo um sistema de controle de acesso, com três sensores de digital (dois sensores de digital para abrir os portões da garagem e social internamente, e um sensor de digital para.abrir o portão social externamente), atualmente o ESP32 manda todos os dados (para efeito de log) para o servidor MQTT da adafruit, imagem em anexo.

Minha ideia é fazer o ESP enviar os dados de acesso para o Home Assistant, nele os sensores exibem valores númericos existe algum sensor para exibir palavras (nomes, frases, etc)?? O objetivo final é receber uma notificação com o nome da pessoa que acessou a casa via digital…

A parte do MQTT, e também de fazer o ESP enviar os nomes está tranquilo mas sou super Noob no home assistant…

Vc programou o sensor usando arduino ide?

Na minha opinião o melhor seria fazer a programação usando esphome caso tenha suporte para o seu sensor.

Agora se vc precisa usar a configuração atual usando mqtt, é possível criar sensores mqtt no HA.
Nesse caso vc pode enviar apenas os nomes no tópico aí não precisa ficar fazendo substituições de texto no sensor.

@Walber para fazer o que ele quer vai ser muito dificil fazer com esphome a não ser que todo logica de associar um nome fique no proprio ha. Em geral esphome com biometria retorna so o id.

@Robsongrs explica melhor como voce programou, para integrar no HA voce usou mesmo firnware ou usou outro. Porque o HA vai mostrar o que voce enviar pra ele, falta informacao ma pelo que voce descrevo imagiono que usou arduino para o mqtt da adafruit e esphome para o HA.

Em geral os sensores biometrios usados por hobbista ja tem algoritmo de matching (indentificar a pessoa) no proprio sensor. Cada digital salva no sensor vai ter um id e ele vai retornar via UART esse id. Para enviar o nome para o home assistant voce precisa implementar codigo que salve nomes associados a esses id em memoria nao volatil no MCU.

Me parece que voce ja fez isso pois no mqtt voce ja envia nome… Basta voce usar essa informacao no HA, em geral melhor voce usar um broker mqtt local mas voce pode conectar seu ha no da adfruit se quiser.
Outra opcao é salvar os nomes no HA dai voce pode usar o esphome tasmota , eles vao enviar esse numero pro ha e voce programa logica para associar isso a nomes de alguma maneira (mais facil seria no nodered ou no appdaemon).

@Walber de fato não tentei, talvez se eu enviar o nome direto para o tópico do sensor MQTT ele aceite normalmente, coloquei na minha cabeça que não aceitaria.

@ariel_leventhal o código foi feito usando arduíno mesmo, no visual Studio com platform IO. O ESP32 faz tudo, configura os sensores, lê as digitais, deleta e cadastra novas digitais, para gerenciar o acesso eu uso bluetooth HC-05 + APP criado no MIT app inventor. Hoje uso a biblioteca da adafruit para comunicar com o adafruit Io (broker MQTT), o broker da adafruit não faz nada só exibi valores. O que quero eh em vez de enviar valores para a adafruit enviar para o HA e exibilos lá, última pessoa que acessou, estado de comunicação com os sensores, enviar notificações baseados nestes valores, etc. Por isso queria enviar strings para sensores, criados via MQTT no HA. Vou tentar criar um sensor e enviar strings para ele para ver o que acontece

O esp32 já tem bluetooth, não precisa usar módulo bluetooth separado.
Mas sobre o mqtt é bem tranquilo você consegue fazer o ha ouvir qualquer tópico mqtt e chamar uma automação toda vez que chegar uma menssagem nova. Inclusive se quiser passar a parte de gerência pro home assistant da pra fazer tranquilamente também pelo mqtt.

O esp32 já tem bluetooth, não precisa usar módulo bluetooth separado.

A primeira versão do hardware usava um ESP8266 + HC-05 quando mudei para o ESP32 continuei com o HC-05.

fazer o ha ouvir qualquer tópico mqtt e chamar uma automação toda vez que chegar uma menssagem nova.

Certo, preciso também enviar o conteúdo da mensagem via notificação, e também se possível deixar o histórico armazenado, por isso queria um sensor. Vou fazer um código simples aqui pra tentar testar ate onde consigo chegar… Dou retorno em breve.

Inclusive se quiser passar a parte de gerência pro home assistant da pra fazer tranquilamente também pelo mqtt.

Estou fugindo de fazer coisas no HA, pois ja mecho com microcontroladores faz um tempão, tenho que tomar vergonha na cara e aprender de vez essas coisas de Json e afins para usar o HA de forma mais eficiente mas no momento quero so terminar os projetos que ja tenhop em mente pra minha casa.

Valeu!



@ariel_leventhal
Caso o uso seja residencial ele não deve ficar alterando esses nomes com frequência.
No esphome ele pode monitorar o sensor que retorna o id e criar um sensor usando lambda com if else para substituir os ids pelo nomes.

@Robsongrs
Acompanhei bastante esse tópico e até onde me lembro é possível fazer todo o controle do sensor via esphome e HA.
Se seu sensor for igual vale a pena uma leitura no tópico.

Edit:

No próprio tópico já tem uma configuração para criar o sensor no esphome:

text_sensor:
  - platform: template
    id:       fingerprint_username
    name:     "Who Scanned Last"
    update_interval: 30s
#
# Fingerprint matched - open/close the door
#
  on_finger_scan_matched:
    - switch.turn_on: garage_door_relay
    - delay: 500ms
    - switch.turn_off: garage_door_relay
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 200
        color: PURPLE
        count: 2
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Authorized finger"
    - lambda: |-
        if (finger_id == 0) {
          id(fingerprint_username).publish_state("Fred");
        } else if (finger_id == 1) {
          id(fingerprint_username).publish_state("Joan");
        } else {
          id(fingerprint_username).publish_state("Unknown");
        }; 

@Walber
Eh exatamente esse o meu sensor. Mas não tem jeito, tenho que aprender essa linguagem ai antes… O que aprendi ate hoje com microcontroladores acaba me travando, por exemplo:

  • switch.turn_on: trigger_relay

O rele dele esta conectado em qual pino? Por quanto tempo o rele ficara acionado?

Mas uma coisa eh fato, eh muito mais simples que programar o arduino, meu código ficou monstruoso de grande. Incrível ver que ele conseguiu fazer isso com somente esse código ai O.O

Tenho que pegar um tutorial do ESPHome para aprender ao menos o básico para depois implementar aqui tenho que comprar um outro sensor de digital para nao tirar os que ja estao em funcionamento… Hoje nem ando mais com a chave do portão, na verdade não ando com chave alguma eh tudo digital…

Por hora vou fazer o que tenho se comunicar via MQTT depois vou separar um tempo pegar um tutorial básico sobre ESPHome para aprender pois parece que esse ai eh o futuro…

Sem brincadeira, estou impressionado que ele tenha feito o acesso com somente aquelas linhas de código, gastei um tempo bizarro fazendo meu sistema. :flushed:

Isso é apenas parte do código, onde ao ler uma digital cadastrada aciona o relé por 500ms e depois deixa a iluminação do sensor roxa, etc.

    - switch.turn_on: garage_door_relay
    - delay: 500ms
    - switch.turn_off: garage_door_relay

Para ter o básico do sensor seria o código abaixo:


uart:
  tx_pin: D0 # Or GPIO17 for ESP32
  rx_pin: D1 # Or GPIO16 for ESP32
  baud_rate: 57600

fingerprint_grow:
  sensing_pin: D2 # Or GPIO05 for ESP32
  on_finger_scan_matched:
    - switch.turn_on: trigger_relay
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 200
        color: BLUE
        count: 1
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Authorized finger"
  on_finger_scan_unmatched:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 2
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Unauthorized finger"
  on_enrollment_scan:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: BLUE
        count: 2
    - fingerprint_grow.aura_led_control:
        state: ALWAYS_ON
        speed: 0
        color: PURPLE
        count: 0
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Finger scanned"
  on_enrollment_done:
    - fingerprint_grow.aura_led_control:
        state: BREATHING
        speed: 100
        color: BLUE
        count: 2
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Enrolled fingerprint"
  on_enrollment_failed:
    - fingerprint_grow.aura_led_control:
        state: FLASHING
        speed: 25
        color: RED
        count: 4
    - text_sensor.template.publish:
        id: fingerprint_state
        state: "Failed to enroll fingerprint"

text_sensor:
  - platform: template
    id: fingerprint_state
    name: "Garage Fingerprint State"

sensor:
  - platform: fingerprint_grow
    fingerprint_count:
      name: "Garage Fingerprint Count"
      id: fingerprint_count
    last_finger_id:
      name: "Garage Fingerprint Last Finger ID"
    last_confidence:
      name: "Garage Fingerprint Last Confidence"
    status:
      name: "Garage Fingerprint Status"
    capacity:
      name: "Garage Fingerprint Capacity"
    security_level:
      name: "Garage Fingerprint Security Level"

api:
  password: !secret api_password
  
  services:
  - service: enroll
    variables:
      finger_id: int
      num_scans: int
    then:
      - fingerprint_grow.enroll:
          finger_id: !lambda 'return finger_id;'
          num_scans: !lambda 'return num_scans;'
  - service: enroll_next # Idea by Ralf Klüber (thanks!)
    variables:
      num_scans: int
    then:
      - fingerprint_grow.enroll:
          finger_id: !lambda 'return id(fingerprint_count).state;'
          num_scans: !lambda 'return num_scans;'
  - service: cancel_enroll
    then:
      - fingerprint_grow.cancel_enroll:
  - service: delete
    variables:
      finger_id: int
    then:
      - fingerprint_grow.delete:
          finger_id: !lambda 'return finger_id;'
  - service: delete_all
    then:
      - fingerprint_grow.delete_all:

Com o esphome fica “fácil” juntar vários codigos.

Te recomendo a comprar outro sensor e começar a brincar.

1 Like

@Walber Eh incrivel… Ja vou comprar uns dois ESP e uns 2 sensores da china aqui :grin:

Em breve darei noticias sobre a String no sensor, se deu certo ou não o/

Sim, sim, quando digo que da pra fazer ouvir qualquer tópico mqtt é o sensor mqtt mesmo, inclusive se publicar em um topico especial pelo esp da pra fazer o ha criar o sensor sozinho.
Ai voce faz automacao na mudanca de estado para notificacao.

Na verdade a parte de controle de acesso eu deixaria no proprio ESP mesmo o que eu quis dizer e que voce pode enviar os mesmos comandos que esta enviando por blueetooth pelo mqtt usando interface do HA ai a parte de cadastro fica pelo HA.

Ah sim ai fica questao de preferencia pessoal eu como programador vejo deixar esses ids assim hardcoded na lambda como má pratica e me daria um pouco de ansiedade usar assim kkkkk
Funcionar funciona mas eu prefiro ter isso alterável em tempo de execução.

Não é bem uma linguagem, é tudo declarativo.

Se fosse pensar em programação
pensa em switch como uma classe, turn_on como um metodo da classe switch, e trigger relay o objjeto que voce ta chamando a funcao
Se voce olhar o codigo com mais calma pode ver que trigger_relay foi definido em outra parte do progranma e la foi declarado o pino

Como voce ja sabe arduino pra esse projeto especifico eu manteria em arduino. Esphome é otimo pra coisas simples, como reles pra iluminação e interruptores, em 5 minutos voce tem pronto algo que demoraria significativamente mais no arduino. Vale muito a pena aprender a usar esphome e tasmota.
Mas pra fazer coisas mais complexas como nesse caso poder alterar digitais por aplicativo da muito mais trabalho com esphome do que com arduino.

Inclusive fiz um projeto semelhante para casa dos meus pais se quiser dar uma olhada:

No fim acabei nem integrando com HA porque eles nao sentiram necessidade eu fiz toda gerencia de adicionar digitais pelo proprio dispositivo.
Mas fazer em arduino me deu a liberdade de por exemplo fazer ações diferentes quando segurar uma digital valida por certo tempo no sensor, que com esphome não sei nem se é possivel.

So para deixar um fechamento, mandar direto o nome para um sensor não funcionou… Então resolvi mandar o fingerID (cada digital possui um ID) dai a tabela de identificação das digitais eu deixo no nodeRed mesmo…

Estava pensando aqui, hoje uso um unico ESP32 para 3 sensores de digital, com o ESPHome eu deveria usar 3 ESP (+ 3 dispositivos conectados ao WiFi) ou estou pensando errado?.. Por hora irei continuar com o MQTT mesmo.

Vlw galera!

Se conseguiu enviar o nome no tópico teria que funcionar. O que aconteceu?

Eu acho que pela maneira que implementaram no esphome teria que usar custom_component para colocar mais de um sensor.
Ou sugerir uma alteração no código para que seja possível.

Se conseguiu enviar o nome no tópico teria que funcionar. O que aconteceu?

Cara tentei ontem e não tinha dado certo, quando vi seu post resolvi tentar de novo e agora funcionou, fiz algo de errado ontem mas não sei o que eh… TOP nem preciso do nodeRed pra fazer a automação, perfeito… Agora eh soh alterar algumas linhas de código e serviço concluído :smiley:

Valeu ai de novo cara!



1 Like

Conseguiu solucionar?
Eu uso este r503, porém rodando com ESP, enviando via MQTT as informações de acesso (nome da pessoa) direto pro HA… Já roda faz cerca de 1 ano sem problemas.

Consegui sim, estou com MQTT pois um único ESP32 está controlando 3 R503 (tive que modificar a biblioteca da adafruit para poder usar os três)… Estou para implementar a adição e exclusão de digitais via HA mas estou esperando o BeeLink chegar meu rasp3b+ não está dando conta está travando demais… A receita não está ajudando, o mini PC está na fiscalização há uns 20 diaa…