Birdnet - tuto - comment repérer et écouter les oiseaux du jardin 🐦

Bonjour @Jeffodilo
quel repot as-tu ajouté pour obtenir l’Addon ?
J’en ai testé celui de tphakala sans succès.

Bob

Bonjour,
@Bob c’est celui du 1er post accessible ici,
https://github.com/alexbelgium/hassio-addons/blob/master/birdnet-go/README.md
Il ne consomme pas trop de ressources. J’ai un petit bug sur le lien du dashboard de la barre latérale qui m’amène sur une page 404, obligé de cliquer sur le bouton dashboard, du coup je l’ouvre dans un nouvel onglet et tout fonctionne nickel.

1 « J'aime »

Après des échanges, nous avons remarqué que le problème venait que le nom d’utilisateur n’était pas pi mais admin, cela vient peut être de l’installation de pi os trexie (13), le nom par défaut à peut être changé avec les nouvelles installations…
J’ai mis le tuto du début à jour en indiquant cette possibilité.

1 « J'aime »

Bonjour, je partage le suite du coup pour que ce soit plus ludique.

J’ai inséré les images d’oiseaux dans le dashboard à chaque nouvelle détection.

Voilà le rendu :

J’ai créé un dossier où je stock mes images d’oiseaux au format jpg et de dimensions 200x200 pixels.
Le nom des oiseaux est le nom scientifique exactement sous cette forme :
Aegithalos-caudatus
Majuscule sur la première lettre du premier nom, tout le reste en minuscule puis tiret - et tout le reste en minuscule.

Il est dans config/www
Le nom du dossier est oiseaux.

Ce qui donne :
/root/config/www/oiseaux/Aegithalos-caudatus.jpg

J’ai créé un template sensors dans configuration.yaml :

template:
      #bidnet image oiseau template chemin image birdnet
      - name: "Nom Scientifique Image Path"
        unique_id: nom_scientifique_image_path
        state: "{{ '/local/oiseaux/' ~ states('sensor.nom_scientifique') | replace(' ', '-') ~ '.jpg' }}"

Puis dans le dashboard la card de type markdown :

type: markdown
content: >
  <b>Oiseau détecté</b>

  <center> <img src="{{ states('sensor.nom_scientifique_image_path') }}"
  alt="Oiseau" style="max-width: 100%; height: auto;"> </center>

  <center> <b>Nom Scientifique :</b> {{ states('sensor.nom_scientifique') }}
  </center>

  <center> <b>Nom Commun :</b> {{ states('sensor.derniere_detection_d_oiseau')
  }} </center>

  <center> <b>Confiance de la détection :</b> {{
  states('sensor.confiance_de_la_detection') }} % </center>

  <center>  <b>Heure :</b> {{ states('sensor.heure_de_la_detection_2') }}
  </center>

1 « J'aime »

Depuis la release de 2022, Il n’y a plus de nom d’utilisateur par défaut, il est demandé à la création du système.

Tout le monde savait que l’utilisateur pi existait sur les RPI et c’était une faille de sécurité.

https://www.raspberrypi.com/news/raspberry-pi-bullseye-update-april-2022/

1 « J'aime »

Bonjour, merci pour ton partage. Tu as téléchargé tes images à partir de quel lien s’il te plaît ?

En faite je tape le nom de l’oiseau qui s’affiche sur Google, j’enregistre l’image par clic droit.
Je converti et redimensionne avec

Je télécharge et renomme pour que ça corresponde au bon format (majuscule, etc..)
Je mets l’image jpg dans le dossier de ha.

Il y a sûrement une possibilité d’automatiser le téléchargement de l’image car birdnet va chercher les images par internet mais je ne me suis pas penché dessus

Salut,

Je mets ça là en vrac, mais :

  • il y a moyen d’utiliser les notifications natives de birdpi en MQTT sans passer par l’installation du client MQTT et la mise en place d’une service
  • de définir le contenu des notifications et donc de recupérer l’image directement (url fournie par la banque de données birdpi)


Il y a 2 ou 3 coquilles dans la doc, notamment le format JSON de notif avec les majuscules

{
  "common_name": "$comname",
  "scientific_name": "$sciname",
  "confidence_score": "$confidence",
  "link": "$listenurl",
  "date": "$date",
  "time": "$time",
  "week": "$week",
  "latitude": "$latitude",
  "longitude": "$longitude",
  "minimum_confidence": "$cutoff",
  "sigmoid_sensitivity": "$sens",
  "overlap": "$overlap",
  "image": "$flickrimage"
}

et donc

- name: "Birdnet détection"
  state_topic: "birdnet/detection"
  json_attributes_topic: "birdnet/detection"
  value_template: ""
- name: Bird-Pi Photo
  verify_ssl: false
  url: >-
    {{state_attr('sensor.birdnet_detection','image')}}

type: custom:stack-in-card
cards:
  - show_state: false
    show_name: false
    camera_view: auto
    type: picture-entity
    entity: image.bird_pi_photo
  - type: custom:mushroom-template-card
    primary: >-
      {{ states('sensor.birdnet_detection') }} |  {{
      state_attr('sensor.birdnet_detection', 'time') }}
    secondary: "{{ state_attr('sensor.birdnet_detection', 'scientific_name') }}"
    entity: sensor.birdnet_detection
    icon: mdi:bird

1 « J'aime »

Merci pour tous ces éléments, as-tu désactivé le client mqtt (paho) dans ton pi du coup ?

J’ai reinstallé le pi , refait la config, activé les notifs systématiquement.


Joué un son depuis le téléphone et ça marche

Donc pas besoin de client MQTT

Petite évol sur la carte et dodo

type: custom:stack-in-card
cards:
  - show_state: false
    show_name: false
    camera_view: auto
    type: picture-entity
    entity: image.bird_pi_photo
  - type: custom:mushroom-template-card
    primary: "{{ state_attr('sensor.birdnet_detection', 'common_name') }}"
    secondary: à {{ state_attr('sensor.birdnet_detection', 'time') }}
    entity: sensor.birdnet_detection
    icon: mdi:bird
    icon_color: blue
    tap_action:
      action: url
      url_path: "{{ state_attr('sensor.birdnet_detection', 'link') }}"
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        content: >-
          {{ states('sensor.birdnet_detection') }} • {{
          (state_attr('sensor.birdnet_detection', 'confidence_score') | float *
          100) | round(0) }}% de confiance
        icon: mdi:shield-check
      - type: template
        content: "{{ state_attr('sensor.birdnet_detection', 'scientific_name') }}"
        icon: mdi:identifier
        icon_color: grey
    alignment: start
    card_mod:
      style: |
        ha-card {
          --chip-box-shadow: none;
          --chip-background: none;
          padding: 0px 12px 12px;
        }

Fantastique ! Merci de faire vivre cette discussion et d’apporter de belles évolutions :folded_hands:

Allez, j’ai un peu avancé sur le sujet… (et piqué quelques idées sur le forum anglais de ha)

si le topic MQTT est /birdnet/detection

que le notification native est (avec toutes les options cochées)

{
  "common_name": "$comname",
  "scientific_name": "$sciname",
  "confidence_score": "$confidence",
  "link": "$listenurl",
  "date": "$date",
  "time": "$time",
  "week": "$week",
  "latitude": "$latitude",
  "longitude": "$longitude",
  "minimum_confidence": "$cutoff",
  "sigmoid_sensitivity": "$sens",
  "overlap": "$overlap",
  "image": "$flickrimage"
}

Alors on peut faire un sensor du genre avec un trigger

template:
  - trigger:
      - platform: mqtt
        topic: "birdnet/detection"
    sensor:
      - name: "BirdNET Go Events"
        unique_id: birdnet_go_events
        state: "{{ trigger.payload_json.common_name }}"
        attributes:
          common_name: "{{ trigger.payload_json.common_name }}"
          scientific_name: "{{ trigger.payload_json.scientific_name }}"
          confidence_score: "{{ trigger.payload_json.confidence_score }}"
          link: "{{ trigger.payload_json.link }}"
          date: "{{ trigger.payload_json.date }}"
          time: "{{ trigger.payload_json.time }}"
          week: "{{ trigger.payload_json.week }}"
          latitude: "{{ trigger.payload_json.latitude }}"
          longitude: "{{ trigger.payload_json.longitude }}"
          minimum_confidence: "{{ trigger.payload_json.minimum_confidence }}"
          sigmoid_sensitivity: "{{ trigger.payload_json.sigmoid_sensitivity }}"
          overlap: "{{ trigger.payload_json.overlap }}"
          image: "{{ trigger.payload_json.image }}"
          bird_events: >
            {% set current = state_attr('sensor.birdnet_go_events', 'bird_events') %}
            {% set current_list = current if current is iterable and current is not string else [] %}
            {% set new_event = {
              "name": trigger.payload_json.common_name,
              "confidence": (trigger.payload_json.confidence_score | float * 100) | round(0),
              "time": trigger.payload_json.time[:5]
            } %}
            {{ ([new_event] + current_list)[:20] }}
        icon: mdi:bird

et une carte qui contient tout ou presque

type: custom:stack-in-card
cards:
  - type: markdown
    content: |
      ![Image]({{ state_attr('sensor.birdnet_go_events', 'image') }})
  - type: custom:mushroom-template-card
    primary: "{{ state_attr('sensor.birdnet_go_events', 'common_name') }}"
    secondary: à {{ state_attr('sensor.birdnet_go_events', 'time') }}
    entity: sensor.birdnet_detection
    icon: mdi:bird
    icon_color: blue
    tap_action:
      action: url
      url_path: "{{ state_attr('sensor.birdnet_go_events', 'link') }}"
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        content: >-
          {{ (state_attr('sensor.birdnet_go_events', 'confidence_score') | float
          * 100) | round(0) }}% de confiance
        icon: mdi:shield-check
      - type: template
        content: "{{ state_attr('sensor.birdnet_go_events', 'scientific_name') }}"
        icon: mdi:identifier
        icon_color: grey
    alignment: start
    card_mod:
      style: |
        ha-card {
          --chip-box-shadow: none;
          --chip-background: none;
          padding: 0px 12px 12px;
        }
  - type: markdown
    content: >-
      Heure|Espèce|Détection|Fiabilité

      :---|:---|:---:|:---:

      {%- set t = now() %}

      {%- set bird_list =
          state_attr('sensor.birdnet_go_events', 'bird_events')
          | sort(attribute='time', reverse=true)
          | map(attribute='name')
          | unique
          | list
      %}

      {%- set bird_objects =
          state_attr('sensor.birdnet_go_events', 'bird_events')
          | sort(attribute='time', reverse=true)
      %}

      {%- for thisbird in bird_list or [] %}

          {%- set ubird =
              (bird_objects
                  | selectattr('name', 'equalto', thisbird)
                  | list
              )[0]
          %}

          {%- set ubird_count =
              bird_objects
              | selectattr('name', 'equalto', thisbird)
              | list
              | length
          %}

          {%- set ubird_max_confidence =
              bird_objects
              | selectattr('name', 'equalto', thisbird)
              | map(attribute='confidence')
              | map('replace', '%', '')
              | map('float')
              | max
              | round(0)
          %}

          {%- if ubird_max_confidence > 70 %}
      {{ ubird.time }} |  [{{ ubird.name }}](https://fr.wikipedia.org/wiki/{{
      ubird.name | replace(' ', '_') }}) | {{ ubird_count }} | {{
      ubird_max_confidence }} %
          {%- endif %}

      {%- endfor %}

      **Ce jour** | Espèces différentes : {{bird_list | count}} | Nb de
      détections : {{bird_objects | count}} |
      [BirdPI](http://192.168.1.234/)


ça ne donne pas un vrai total sur la journée, mais les dernières détections

2 « J'aime »

nickel, j’avais des soucis avec la partie - name: Bird-Pi Photo, mais cette dernière version est géniale !!!

Le rougegorge, quelle pipelette !!! :wink:

1 « J'aime »

Oui, un peu de soleil et il a beaucoup plus causé qu’hier

Bonjour,

Je suis novice extrême et je viens de tomber sur ce post. Je ne m’interesse pas forcément à HA quoique j’ai un NAS Syno sur lequel je pourrai l’utiliser à terme.
Pour le moment, on est bien d’accord que si on veut le dispositif complet, il faut un Rasp Pi et un micro, et éventuellement un petit coffret de protection. Est-ce que vous avez un modèle robuste de micro efficace qui peut être utilisé avec le raspberry ? J’ai lu qu’il fallait systématiquement déporter le micro avec un prolongateur usb pour éviter les interférences avec le Pi.

Merci encore pour ce tuto hyper intéressant et détaillé !

Bonjour,
Oui raspberry pi 4 c’est bien,
J’utilise ce micro pour ma part après une petite extension USB.

Voilà mon montage, le micro dépasse juste.

1 « J'aime »