CONNECTER UN DISTRIBUTEUR DE CROQUETTES AVEC HOME ASSISTANT

La vidéo

schéma

LES codes

Code esphome

esphome:
  name: esp_distributeur_de_croquette
  platform: ESP8266
  board: d1_mini
 
wifi:
  ssid: "WIFI"
  password: "MOTDEPASSE"
 
  ap:
    ssid: "Esp Distributeur De Croquette"
    password: "MZqbJV7ukcqa"
 
captive_portal:
logger:
api:
 services:
    - service: control_servo
      variables:
        level: float
      then:
        - servo.write:
            id: servoMoteur
            level: !lambda 'return level / 100.0;'
 
    - service: distribution
      variables: 
        rep: int
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.last_time_food
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}'   
 
 
      - lambda: |-
          int t = rep;
          while(t > 0){
            id(servoMoteur).write(-0.3);
            delay(1500);
            id(servoMoteur).write(1.0);
            delay(1500);
            t = t - 1;
          }
 
      - servo.detach: servoMoteur
 
ota:
output:
  - platform: esp8266_pwm
    id: pwm_servo
    pin: D2
    frequency: 50 Hz
 
servo:
  - id: servoMoteur
    output: pwm_servo
 
sensor:
  - platform: uptime
    name: "Temps De Fonctionnement"
 
  - platform: wifi_signal
    name: "Signal Wifi"
    id: "signal_wifi_distributeur_croquette"
    update_interval: 360s
 
  - platform: ultrasonic
    trigger_pin: D7
    echo_pin: D8
    name: "Capteur Ultrason"
    id: "capteur_ultrason_distributeur_croquette"
    update_interval: 3h
    filters:
    - filter_out: nan
    - lambda: return 100 - (x - 0.04) * 100/(0.22);
    accuracy_decimals: 0
    unit_of_measurement: "%"
 
time:
  - platform: homeassistant
    timezone: Europe/Paris
    id: homeassistant_time
 
switch:
  - platform: restart
    name: "Redémarrer Distributeur de croquette"
    id: "restart_distributeur_croquette"
 
binary_sensor:
  - platform: gpio
    pin: 
      number: GPIO14
    id: bouton
    on_press:
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.last_time_food
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}'
 
      - servo.write:
          id: servoMoteur
          level: -30%
 
      - delay: 1.5s
 
      - servo.write:
          id: servoMoteur
          level: 100%
 
      - delay: 3s
 
      - servo.detach: servoMoteur

code Interface 1

cards:
  - cards:
      - hold_action:
          action: more-info
        icon: 'mdi:cat'
        name: Distribuer des Croquettes
        show_name: true
        state_color: true
        tap_action:
          action: call-service
          service: esphome.esp_distributeur_de_croquette_distribution
          service_data:
            rep: 1
        type: button
    type: horizontal-stack
  - entities:
      - entity: switch.redemarrer_distributeur_de_croquette
      - entity: sensor.temps_de_fonctionnement
      - entity: sensor.signal_wifi
      - entity: input_datetime.last_time_food
    title: Infos
    type: entities
  - entity: sensor.capteur_ultrason
    max: 100
    min: 0
    name: Réservoir
    severity:
      green: 60
      red: 0
      yellow: 30
    theme: default
    type: gauge
title: Distributeur de Croquettes
type: vertical-stack

code Interface 2

cards:
  - entities:
      - entity: automation.distributeur_de_croquette_horaire_1
        name: État
      - entity: input_datetime.everyday_food_1
        name: Heure de Distribution
    title: Horaire 1
    type: entities
  - entities:
      - entity: automation.distributeur_de_croquette_horaire_2
        name: État
      - entity: input_datetime.everyday_food_2
        name: Heure de Distribution
    title: Horaire 2
    type: entities
  - entities:
      - entity: automation.distributeur_de_croquette_horaire_3
        name: État
      - entity: input_datetime.everyday_food_3
        name: Heure de Distribution
    title: Horaire 3
    type: entities
title: Réglage Distributeur de Croquettes
type: vertical-stack

Le code à ajouter dans configuration.yaml

sensor:
  - platform: systemmonitor
    resources:
      - type: disk_use_percent
        arg: /home
      - type: processor_use
      - type: memory_use_percent
      - type: last_boot
 
  - platform: time_date
    display_options:
      - 'time'
  - platform: template
    sensors:
      last_feed:
        friendly_name: "Dernière Distribution"
        entity_id: sensor.last_food
        device_class: timestamp
        value_template: '{{ as_timestamp(states.esphome.esp_distributeur_de_croquette_distribution.last_changed) }}'
 
input_datetime:
  everyday_food_1:
    name: "Programation Distribution 1"
    has_date: false
    has_time: true
  everyday_food_2:
    name: "Programation Distribution 2"
    has_date: false
    has_time: true
  everyday_food_3:
    name: "Programation Distribution 3"
    has_date: false
    has_time: true
  last_time_food:
    name: "Dernière Distribution"
    has_date: true
    has_time: true
  heure_courrier:
    name: "Heure Courier"
    has_date: false
    has_time: true

Code Automation

{{states('sensor.time') ==  (state_attr('input_datetime.everyday_food_1','timestamp') | int | timestamp_custom('%H:%M', False)) }}