I constantly forget to take showers due to depression. I know I’m not the only one 😂 summer is early here in Texas and I don’t want to be the stinky dude

Uses the humidity readings of my bathroom to determine whether I was in the shower:

  • A running 1 hour average of the bathroom humidity is measured.
  • If the current humidity is 8% above the average, it is triggered as “wet”.
  • Then it marks down the last time, and then converts that to “days & hours since” last shower.

I have a badge at the top of my main dashboard that will let me know how long it’s been. It’s already been useful. If I see anything over 2 days I know it’s past time for a shower

I got a false positive from washing my hands when it was set to trigger by 5% increases, so I changed it to 8%.

Happy to share my code if anyone wants to do the same!

Edit: code in a comment below!

  • 4lan@lemmy.worldOP
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    18 hours ago

    Here is my Automation:

    alias: Update Last Shower Time
    description: ""
    triggers:
      - entity_id: binary_sensor.showering
        from: "on"
        to: "off"
        trigger: state
    actions:
      - data:
          datetime: "{{ now() }}"
        action: input_datetime.set_datetime
        target:
          entity_id: input_datetime.last_shower
    

    You need to create a ‘DateTime’ helper called “Last Shower” This is where the last shower time will be stored (and can be changed)

    You need a ‘Statistics’ Helper too. Call it “Average Bathroom Humidity” and base it on whatever humidity sensor you have. Make it “average linear” then set Max Age to 1 hour. (leave other options default)

    Make these template sensors too:

    Template Binary Sensor called “Showering”:

    {{ (states('sensor.bathroom_sensor_humidity')|float - states('sensor.average_bathroom_humidity')|float) > 9 }}

    Template Sensor called “Time Since Last Shower”:

    % set diff = now() - as_datetime(states('input_datetime.last_shower')).astimezone() %}
    {% set days = diff.days %}
    {% set hours = (diff.seconds // 3600) %}
    {% if days > 0 %}
      {{ days }} day{{ 's' if days > 1 }} {{ hours }} hour{{ 's' if hours != 1 }}
    {% else %}
      {{ hours }} hour{{ 's' if hours != 1 }}
    {% endif %}
    

    Let me know if you hit any snags!