[Concours] Distributeur de croquettes a reconnaissance faciale

Notre chat ayant tendance a l’embonpoint et quelques soucis de santé je me suis mis en tête de lui bricoler un distributeur pilotable qui me permette d’ajuster sa ration quotidienne tout en ne passant pas ma vie a lui servir des micros rations 20 fois par jour

le choix s’est initialement porté sur un Xiaomi pet feeder, mais malheureusement tout en cloud.

Ca a fait l’affaire quelques temps mais la combinaison du cloud et de la nécessité de l’appli dédiée a fini par me convaincre d’améliorer le truc, et pas qu’un peu, tant qu’à faire.

la première étape est le passage du distributeur sous esphome réalisé grâce a ça :

ce qui permet de prendre la main totalement en local sur la machine

et d’avoir un calendrier de distribution inscrit en dur dans l’ESP qui évite tout pb en cas de perte d’internet ou de ha :

je tiens a remercier tout particulièrement l’auteur de la config du petfeeder qui a pris bcp de temps pour qu’on améliore le truc et créer quelque sensors spécifiques comme le décompte du temps restant jusqu’à la prochaine distribution !

l’étape suivante est le couplage avec frigate. le distributeur est « amélioré » par l’ajout d’une caméra pas chère (tapo c210):

le reste passe par le paramétrage de frigate :

et les bonnes automatisations pour contrôler le régime et laisser au chat une latitude :

  • creation d’un planning de base allégé
  • création d’un seuil journalier de doses a distribuer qui stoppe le calendrier de distribution et la reconnaissance faciale jusqu’au lendemain
  • création d’un timer qui empêche le chat de gloutonner toutes les 5 minutes
  • asservissement de la distribution d’une dose a la reconnaissance du chat par frigate

en gros le principe :

  • a chaque distribution, calendrier. caméra ou manuelle le timer s’enclenche pour 30 min et bloque la distri par la caméra
  • 30 min avant la prochain distribution planifiee la distribution par la caméra est aussi bloquée
  • si aucun de ces deux times n’est actif, le chat se presente devant le distributeur, frigate l’identifie et déclenche la distribution d’une dose
  • quand le cumulé distribué journalier atteint un seuil. le calendrier est désactivé ainsi que la distribution par ma caméra jusqu’au lendemain
alias: distribution camera
description: ""
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.distributeur_cat_occupancy
    from: "off"
    to: "on"
conditions: []
actions:
  - if:
      - condition: and
        conditions:
          - condition: state
            entity_id: timer.minuteur_distribution_camera
            state: idle
          - condition: numeric_state
            entity_id: sensor.feeder_remaining_time_until_next_feed
            above: 30
    then:
      - action: esphome.feeder_dispense_food
        data:
          portions: 1
      - action: timer.start
        metadata: {}
        data: {}
        target:
          entity_id: timer.minuteur_distribution_camera
        enabled: false
mode: single
alias: anti-glouton
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.feeder_dispensed_today
conditions: []
actions:
  - action: timer.start
    metadata: {}
    data: {}
    target:
      entity_id: timer.minuteur_distribution_camera
mode: single

alias: Limitation distributeur
description: ""
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.limite_distributeur_croquettes
    from: "off"
    to: "on"
    for:
      hours: 0
      minutes: 0
      seconds: 30
conditions: []
actions:
  - parallel:
      - action: automation.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: automation.reset_planning_distributeur
      - action: automation.turn_off
        metadata: {}
        data:
          stop_actions: true
        target:
          entity_id:
            - automation.distribution_camera
            - automation.anti_glouton
      - action: switch.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: switch.feeder_feeding_schedule
  - delay:
      hours: 0
      minutes: 0
      seconds: 3
      milliseconds: 0
  - if:
      - condition: state
        entity_id: switch.feeder_feeding_schedule
        state: "on"
    then:
      - data:
          message: Attention le planning du distributeur est toujours actif
        action: notify.jimmy
mode: single

alias: Restart planning distributeur
description: ""
triggers:
  - trigger: time
    at: "00:00:00"
conditions: []
actions:
  - parallel:
      - action: switch.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: switch.feeder_feeding_schedule
      - action: automation.turn_on
        metadata: {}
        data: {}
        target:
          entity_id:
            - automation.anti_glouton
            - automation.distribution_camera
  - action: automation.turn_off
    metadata: {}
    data:
      stop_actions: false
    target:
      entity_id: automation.reset_planning_distributeur
mode: single

grosso modo a la fin ça donne ça :

visiblement ça marche et le chat l’a bien compris :

et ça permet de contrôler que la distribution se fait bien en partie sur calendrier, et en partie a la demande :

et au final j’ai rajouté des alertes sur l’awtrix quand le distributeur détecte que le niveau de croquettes est trop faible

11 « J'aime »

Super !!!

Je vais finir par adopter un greffier

1 « J'aime »

Est ce que tu as des photos de ton montage électronique pour le flash ?

sur le github c’est moi qui ai fait les photos et le schéma

Oui j’ai bien vu mais je ne suis pas sur de comprendre le shema et les explications. Je verrais sur place quand j’aurais la bête entre les mains…

y’a 4 fils a souder sur le pcb a ramener au flasher USB et un pont a créer sur le pcb pour activer le bootloader et permettre l’injection du firmware esphome la première fois.
idéalement le pont faut le couper et mettre un wago dessus pour pouvoir l’ouvrir et tester l’esp une fois flashé sans avoir a le remettre dans le boîtier

1 « J'aime »

Hello,
A tout hasard, existe-t-il un distributeur du même type pour les poissons :fish: svp ?

alors la aucune idée … maintenant le bol récepteur de ce modèle est uniquement accolé au bac de reserve par un aimant, y’a rien qui empêche de le virer et de faire tomber les croquettes ou on veut
après c’est assez restrictif en terme de taille, faut que ce soit rond et d’environ 5-10mm de diamètre

Hello,

Beau boulot !

Dans un concept similaire j’utilise depuis 2 ans ce produit qui offre des fonctions à peu près similaires :

2 différences notables : il n’y a pas de reconnaissance faciale et je le pilote avec une application dédiée « POOEKEN » (je ne sais pas si je pourrais relier le tout à HA, jamais essayé).

A l’usage, pour 40€ ça fonctionne super bien et j’en suis enchanté.

l’objet premier c’est justement de se passer du cloud et de l’appli dédiée, et apres c’est de laisser le chat se débrouiller pour aller manger a peu pres quand il veut tout en ne depassant pas un « budget » croquettes à la journée

Hello
Si tu as accès a une imprimante 3d sur thingiverse une recherche avec fish feeder…

Hello,
Super projet !
Frigate reconnait que c’est un animal ou spécialement un chat ? Peut il reconnaitre un chat d’un autre ?

il reconnait explicitement que c’est un chat, la liste des elements reconnus par le modele que j’utilise est coco80 (coco-classes-mapping/coco80.names at master · levan92/coco-classes-mapping · GitHub), j’aurai un ours ou un zebre ça marcherait pareil !

Non frigate ne fait pas la distinction entre un chat et un autre mais techniquement ça doit être faisable. Avec le createur de la config du feeder on avait commencé a regarder pour utiliser l’API d’immich pour traiter les images mais finalement on a pas avancé sur le sujet.

En vrai pour le fun, et idealement il faudrait que je fasse une detection a la demande audio : si le chat est devant la cam et miaule alors servir une portion. Mais comme je le connais il passerait son temps a miauler devant la camera !