Sensor statut des personnes amélioré (sommeil etc...)

Bonjour, l’objectif est de mettre en place des sensors (tracker ) de personnes plus poussé et utiles

Pour le moment le but est d’avoir un sensor int de 0 a 100 qui définit l’état de la personne et de l’utiliser

  • présent / abs / (plus tard au travail)
  • en statu ne pas déranger
  • endormis
    Pour le moment :
    J’utilise simplement le tracker du téléphone pour ‹ home › ou pas (+50%) donc a la maison 50 hors maison 0
    device_tracker.wp10
    J’utilise le sensor (home assistant compagnon) de mon téléphone pour ajouter 25% au sensor
    is_state('sensor.wp10_do_not_disturb_sensor', 'priority_only')
    Et pour le sommeil, j’utilise 2 sensors de mon tel, la luminosité et le sleep confidence
    {%set t = ((as_timestamp(now()) - as_timestamp(states.sensor.wp10_sleep_confidence.last_changed))/60)|float(0) %}
    {% set l=states('sensor.wp10_light_sensor')|int %}

J’utilise par exemple pour régler le volume des google nest de la maison
Je veux développer ça, modifier les entités personne automatiquement, gérer les pièces 1 personne/ 2 personnes / lieux communs

Travailler en commun la dessus intéresse quelqu’un ?

Bon ça sent l’unilatéralité, pas grave

Actuellement ça donne çà :

sensor :


template:
    - sensor:
        - name: "state_johann"
          unit_of_measurement: '%'
          state: >    
                {% set ret = 0 %}
                {% if is_state('device_tracker.wp10', 'home') %}
                    {% set ret = ret + 50 %}
                {% else %}
                    {% set ret = ret + 0 %}
                {% endif %}     
                {% set t=((as_timestamp(now()) - as_timestamp(states.sensor.wp10_sleep_confidence.last_changed))/60)|float(0) %}
                {% set l=states('sensor.wp10_light_sensor')|int %}
                {% if t > 20 and l<10 %}
                    {% set ret = ret + 49 %}
                {% else %}           
                    {% if is_state('sensor.wp10_do_not_disturb_sensor', 'priority_only') %}
                        {% set ret = ret + 25 %}
                    {% endif %}                
                {% endif %}
                {{ret}}
        - name: "state_sophie"
          unit_of_measurement: '%'
          state: >    
                {% set ret = 0 %}
                {% if is_state('device_tracker.tel_sophie', 'home') %}
                    {% set ret = ret + 50 %}
                {% else %}
                    {% set ret = ret + 0 %}
                {% endif %} 
                {% set t=((as_timestamp(now()) - as_timestamp(states.sensor.tel_sophie_sleep_confidence.last_changed))/60)|float(0) %}
                {% set l=states('sensor.tel_sophie_light_sensor')|int %}
                {% if t > 20 and l<10 %}
                    {% set ret = ret + 49 %}
                {% else %}           
                    {% if is_state('sensor.tel_sophie_do_not_disturb_sensor', 'priority_only') %}
                        {% set ret = ret + 25 %}
                    {% endif %}                
                {% endif %}
                {{ret}}
        - name: "state_alexandre"
          unit_of_measurement: '%'
          state: >    
                {% set ret = 0 %}
                {% if is_state('device_tracker.y4800', 'home') %}
                    {% set ret = ret + 50 %}
                {% else %}
                    {% set ret = ret + 0 %}
                {% endif %} 
                {% set t=((as_timestamp(now()) - as_timestamp(states.sensor.y4800_sleep_confidence.last_changed))/60)|float(0) %}
                {% set l=states('sensor.y4800_light_sensor')|int %}
                {% if t > 20 and l<50 %}
                    {% set ret = ret + 49 %}
                {% else %}           
                    {% if is_state('sensor.y4800_do_not_disturb_sensor', 'priority_only') %}
                        {% set ret = ret + 25 %}
                    {% endif %}                
                {% endif %}
                {{ret}}
        - name: "state_aurore"
          unit_of_measurement: '%'
          state: >    
                {% set ret = 0 %}
                {% if is_state('device_tracker.wp5_pro', 'home') %}
                    {% set ret = ret + 50 %}
                {% else %}
                    {% set ret = ret + 0 %}
                {% endif %} 
                {% set t=((as_timestamp(now()) - as_timestamp(states.sensor.wp5_pro_sleep_confidence.last_changed))/60)|float(0) %}
                {% set l=states('sensor.wp5_pro_light_sensor')|int %}
                {% if t > 20 and l<50 %}
                    {% set ret = ret + 49 %}
                {% else %}           
                    {% if is_state('sensor.wp5_pro_do_not_disturb_sensor', 'priority_only') %}
                        {% set ret = ret + 25 %}
                    {% endif %}                
                {% endif %}
                {{ret}}
        - name: "state_personnes"
          unit_of_measurement: '%'
          state: >
                {% set s=0 %}
                {% set n=0 %}
                {% if is_state('device_tracker.wp10', 'home') %}
                    {% set s=s + states('sensor.state_johann')|int %}
                    {% set n=n+1 %}
                {% endif %}
                {% if is_state('device_tracker.tel_sophie', 'home') %}
                    {% set s=s + states('sensor.state_sophie')|int %}
                    {% set n=n +1 %}
                {% endif %}
                {% if is_state('device_tracker.y4800', 'home') %}
                    {% set s=s + states('sensor.state_alexandre')|int %}
                    {% set n=n +1 %}
                {% endif %}
                {% if is_state('device_tracker.wp5_pro', 'home') %}
                    {% set s=s + states('sensor.state_aurore')|int %}
                    {% set n=n +1 %}
                {% endif %}
                {% if n==0 %}
                    {% set n= 1 %}
                {% endif %}
                {% set s=s/n %}
                {{ s }}

script pour le réglages des volumes de mes nest en exemple d’usage :

reglage_volume_nest:
    alias: reglage volume nest
    sequence:
      - service: media_player.volume_set
        data:
          volume_level: >
            {% set val_a=int(states('sensor.state_sophie')) %} 
            {% set val_b=int(states('sensor.state_johann')) %}
            {% if val_a>val_b %}
                {% set sens=val_a %}
            {% else %}
                {% set sens=val_b %}              
            {% endif %}
            {% if sens > 50 %}		
                {{ (1-(sens-50)/50 )|string }}
            {% else %}
                {{ 1 }}
            {% endif %}
        target:
          entity_id:
            - media_player.cuisine
      - service: media_player.volume_set
        data:
          volume_level: |
            {% set sens=int(states('sensor.state_johann')) %}
            {% if sens > 50 %}		
                {{ (1-(sens-50)/50 )|string }}
            {% else %}
                {{ 1 }}
            {% endif %}
        target:
          entity_id:
            - media_player.bureau
      - service: media_player.volume_set
        data:
          volume_level: |
            {% set sens=int(states('sensor.state_aurore')) %}
            {% if sens > 50 %}		
                {{ (1-(sens-50)/50 )|string }}
            {% else %}
                {{ 1 }}
            {% endif %}
        target:
          entity_id: media_player.nestmini7963
      - service: media_player.volume_set
        data:
          volume_level: |
            {% set sens=int(states('sensor.state_personnes')) %}
            {% if sens > 50 %}		
                {{ (1-(sens-50)/50 )|string }}
            {% else %}
                {{ 1 }}
            {% endif %}
        target:
          entity_id:
            - media_player.cuisine_2
            - media_player.salle_de_bain
    mode: single

L’automatisation qui vas avec :

- id: '1641915466324'
  alias: gestion volumes nest
  description: ''
  trigger:
  - platform: event
    event_type: state_changed
    event_data:
      entity_id: sensor.state_personnes
  condition: []
  action:
  - service: script.reglage_volume_nest
  mode: single

Tu sais que tu peux faire un peu plus simple pour le comptage des personnes ?

- platform: template
  sensors:
    nombre_occupants:
      friendly_name: "NB Occupants"
      value_template: >
        {{ (expand(states.group.occupants)|selectattr('state','equalto','Home')|list|length) |int(0)}}

Forcement il faut un groupe occupants :

occupants:
  name: Occupants
  entities:
    - device_tracker.user1
    - device_tracker.user2
    - device_tracker.user3
    - device_tracker.user4

Je veux pousser ça a son maximum, si vous voulez y amener vos aides diverses :wink:

effectivement, dans l’évolution je veux placer ses ‹ sensors › directement dans les trakers automatiquement a la création des personnes , idem pour les occupant de pièces pour le réglage des nests en mode POO mais apprend a mesure l’utilisation sur HA pour le moment 2 mois et j’ai encore beaucoup a appréhender sur les spécificités de HA :wink:

Clair, c’est pas évident…
Mais tu as tout intérêt à faire avec les bonnes méthodes au plus vite. Le souci de faire ça à la main sans connaitre c’est qu’on a toutes les chances de faire ça de façon pas optimale et corriger à postériori, c’est encore plus compliqué quand on est allé trop loin.

Disons que la je teste et améliore a mesure, le captage sommeil était important pour moi :wink:
Et écrire des lignes de code a chaque nouvelle personne ne me convient pas, je cherche à optimiser au maximum

En plus le capteur sleep est vraiment efficace bien que j’aimerais trouver l’algorithme pour en sortir plus

Tu regarderas
https://www.room-assistant.io/
C’est dédié à la localisation dans pièces…

Oui je suis dessus, ainsi que esp32_ble_tracker pour mes esp sur esphome

Mais concernant le multi Room, on parle de la prog ha mais pas du matériel qui capte

Pi zéro, 3 OU 4… VM
https://www.room-assistant.io/guide/quickstart-pi-zero-w.html#requirements

oui donc pas suffisant, un seul bt et selon l’installation physique, pas forcement au bon endroit, je regarde plus vers triangulation avec esp32 a chaque entrées et 2/3 dans la maison
je test la sur esp32 d’un de mes camera mais je vois qu’il faut un esp dédié, la plus d’image sur l’esp32cam ;-p

Ton projet ressemble beaucoup à l’intégration Bayesian.
Est-ce que ça ne correspondrait pas à ton besoin ?

je regarde et il ce pourrais bien que ca permette d’améliorer les résultats, je regarde mieux merci :wink:

effectivement pour finaliser bien ce sera utile, merci

après le sujet semble pas intéresser vraiment :wink:

salut, je voudrais intégrer les sensores créé en attributs de personnes

template:
    - sensor:
        - name: "state_johann"
          unit_of_measurement: '%'
          state: >    
                {% set ret = 0 %}
                {% if is_state('device_tracker.wp10', 'home') %}
                    {% set ret = ret + 50 %}
                {% else %}
                    {% set ret = ret + 0 %}
                {% endif %}     
                {% set t=((as_timestamp(now()) - as_timestamp(states.sensor.wp10_sleep_confidence.last_changed))/60)|float(0) %}
                {% set l=states('sensor.wp10_light_sensor')|int %}
                {% if t > 20 and l<10 %}
                    {% set ret = ret + 49 %}
                {% else %}           
                    {% if is_state('sensor.wp10_do_not_disturb_sensor', 'priority_only') %}
                        {% set ret = ret + 25 %}
                    {% endif %}                
                {% endif %}
                {{ret}}

Inkedpersone_LI
des pistes ?