Notification de la production solaire et gestion du surplus

Mon problème

Je cherche à créer une notification sans créer un spam pour alerter sur la production / surproduction afin de guider les membres du foyer sur la bonne utilisation (machine a laver, lave vaisselle, ect…)

Je cherche une solution afin de créer un système anti-spam:
ex: créer un sensor qui vérifie si la valeur à changer depuis la dernière notification (ex: par tranche de valeur de 100)

Pour l’instant j’ai juste un déclencheur qui me donne le nombre de watt actuellement produit.
et pour limiter le spam j’ai créer un détecteur de présence en binary.sensor.

- id: '1679590381458'
  alias: '[NOTIFY] Production Solaire'
  description: ''
  trigger:
  - platform: state
    entity_id:
    - sensor.ecu_current_power
  condition:
  - condition: state
    entity_id: binary_sensor.presence_home
    state: 'on'
    for:
      hours: 0
      minutes: 2
      seconds: 0
  action:
  - choose:
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 451
        below: 600
      sequence:
      - service: notify.notify
        data:
          title: "\U0001F50CSurproduction solaire légère ~150wh"
          message: 'Votre production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        below: 450
        value_template: ''
        above: 400
      sequence:
      - service: notify.notify
        data:
          title: "\U0001F50CAutoconsomation sans surproduction"
          message: 'Votre production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 601
        below: 1300
        value_template: ''
      sequence:
      - service: notify.notify
        data:
          title: "\U0001F50CSurproduction solaire moyenne ~300wh"
          message: 'Votre production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 1300
      sequence:
      - service: notify.notify
        data:
          title: Surproduction solaire ~1KwH
          message: 'Votre production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
  mode: single
1 « J'aime »

Je m’auto répond avis au intéressé cela pourrait vous être fort utile :stuck_out_tongue:

Pour effectuer un anti-spam de notification quand il s’agit d’une valeur il faut dans mon cas:

  • un sensor qui dispose d’un état avec un nombre
  • un input_number (dans lequel on va inscrire la valeur du sensor ex: « 400 » watt de production)
  • établir un comparatif des deux valeurs avec la différence souhaitée (ex: je veux être notifier si la différence est < ou > a 200 watt (dans mon cas)
  • correctif (29/03/23): remise de la valeur input_number à 0 à 23h55.

Voici le input_number:

############################
###     Input_number     ###
############################
input_number:
  ecu_r:
    name: Ecu-R
    initial: 0
    min: 0
    max: 10000  #valeur max qui est possible d'être comprise par l'input (oui j'ai mis un gros nombre pour être tranquille ne venait pas vous brancher chez moi je ne produit pas autant :p )

L’automatisation:

- id: '1679590381458'
  alias: '[NOTIFY] Production Solaire'
  description: ''
  trigger:
  - platform: state
    entity_id:
    - sensor.ecu_current_power
  - platform: time
    at: '23:55:00'
  condition:
  - condition: state
    entity_id: binary_sensor.presence_home
    state: 'on'
    for:
      hours: 0
      minutes: 0
      seconds: 0
  - condition: or
    conditions:
    - condition: template
      value_template: '{{ states(''sensor.ecu_current_power'')|float > states(''input_number.ecu_r'')|float
        + 200}}'
    - condition: template
      value_template: '{{ states(''sensor.ecu_current_power'')|float < states(''input_number.ecu_r'')|float
        - 200}}'
  action:
  - choose:
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 451
        below: 600
      sequence:
      - service: notify.notify
        data:
          title: ⚡Surproduction solaire légère
          message: '⛅ Production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
      - service: input_number.set_value
        data_template:
          value: '{{states(''sensor.ecu_current_power'') }}'
        target:
          entity_id: input_number.ecu_r
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        below: 450
        above: 400
      sequence:
      - service: notify.notify
        data:
          title: ⚡Autoconsomation sans surplus
          message: "\U0001F325️ Production solaire actuelle : {{ states('sensor.ecu_current_power')
            }}wh \\n"
      - service: input_number.set_value
        data_template:
          value: '{{states(''sensor.ecu_current_power'') }}'
        target:
          entity_id: input_number.ecu_r
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 600
        below: 1300
      sequence:
      - service: notify.notify
        data:
          title: ⚡Surproduction moyenne
          message: "\U0001F324️ Production solaire actuelle : {{ states('sensor.ecu_current_power')
            }}wh \\n "
      - service: input_number.set_value
        data_template:
          value: '{{states(''sensor.ecu_current_power'') }}'
        target:
          entity_id: input_number.ecu_r
    - conditions:
      - condition: numeric_state
        entity_id: sensor.ecu_current_power
        above: 1300
      sequence:
      - service: notify.notify
        data:
          title: ⚡Surproduction importante
          message: '☀️ Production solaire actuelle : {{ states(''sensor.ecu_current_power'')
            }}wh \n '
      - service: input_number.set_value
        data_template:
          value: '{{states(''sensor.ecu_current_power'') }}'
        target:
          entity_id: input_number.ecu_r
    - conditions:
      - condition: time
        after: '23:55:00'
      sequence:
      - service: input_number.set_value
        data:
          value: 0
        target:
          entity_id: input_number.ecu_r
  mode: single

Voila le partage avant tout :slight_smile:

Petit Bonus anti - Spam

#Si la notification à été envoyé il y a moins de x (minute, heure, ...) alors ne pas renvoyé de nouvelle notification
{{ now() - state_attr('automation.change_current_theme', 'last_triggered') > timedelta(hours=12) }}# A remplacer hours par minute et le 12 par le nombre de votre choix.

:slight_smile: