Water leakage notification blueprint

If I do it this way, every time I add a new sensor; I have to go modify the automation. With a blueprint, it is done automatically :slight_smile:
I am lazy

good point bro not Lazy just trying to be smart :slight_smile:

here read this

just change the motion to moisture job done

The blueprint is missing an action section, this is where am getting it wrong. I used another BP as base but the editor doesn’t like " default: !input ‘actions’ "

blueprint:
  name: Detect water and notify
  description: detect  'moisture' device-class and if so execute an action.
  domain: automation
  input:
    actions:
      name: Actions
      description: Notifications or similar to be run. {{sensors}} is replaced with the names of sensors.
      selector:
        action: {}
variables:
  sensors: >-
    {% set result = namespace(sensors=[]) %}
    {% for state in states.sensor | selectattr('attributes.device_class', '==', 'moisture') %}
        {% set result.sensors = result.sensors + [state.name ~ ' (' ~ state.state ~ ' %)'] %}
    {% endfor %}
    {% for state in states.binary_sensor | selectattr('attributes.device_class', '==', 'moisture') | selectattr('state', '==', 'on') %}
       {% set result.sensors = result.sensors + [state.name] %}
    {% endfor %}
    {{result.sensors|join(', ')}}
trigger:
  - type: moist
    platform: device
action:
- choose: []
  default: !input 'actions'
mode: single

Can you make a link to this blueprint? I was looking for this functionality!

1 Like

I don’t want to maintain a blueprint, but I created one for my own use for my water sensors. If someone wants to publish properly, feel free to take this.

blueprint:
  name: Moisture Sensor
  description: Perform action when moisture sensor turns wet
  domain: automation
  input:
    actions:
      name: Actions
      description: Notifications or similar to be run.
        {{ trigger.event.data.new_state.attributes.friendly_name }} will be the name of the
        sensor
      selector:
        action: {}
trigger:
  - event_data: {}
    event_type: state_changed
    platform: event
condition:
  - condition: template
    value_template: '{{ trigger.event.data.new_state.attributes.device_class == "moisture" }}'
  - condition: template
    value_template: '{{ trigger.event.data.new_state.state == "on" }}'
action:
- choose: []
  default: !input 'actions'
mode: single

I create an action on Call service calling the notify.mobile_app_my_iphone with data like:

message: 'Leak detected by {{ trigger.event.data.new_state.attributes.friendly_name }}'
data:
  push:
    sound:
      name: default
      critical: 1
      volume: 1
4 Likes

@ mrmarcsmith
I didn’t have the time to complete it and publish but I will try to do that very soon and publish it.
@ joel_d1
I can use yours and merge with mine if needed, is that ok ?

Here is my simple blueprint that will send a notification to a defined device if moisture is detected by any configured sensor: https://gist.github.com/bbbenji/d4d1fe1856ec54370a422508c8963f2a

It also relays the sensor’s friendly_name in the message.

Just select where the notification should go and you’re all set.

3 Likes

I know this is a bit off topic but I like this idea and wanted to share my water notification script, I have my water sensor sitting in my sump, so if my pump fails I want it to get me out of bed! The mobile app max volume alert is great for this.

water_alarm:
  sequence:
    - alias: Water Alarm
      repeat:
        while:
          - condition: state
            entity_id: binary_sensor.basement_water_sensor
            state: 'on'
          # Don't do it too many times
          - condition: template
            value_template: "{{ repeat.index <= 60 }}"
        sequence:
          - service: notify.mobile_app_chriss_iphone
            data:
              title: "Water Alarm Triggered!"
              message: "Check the sump pump in the basement!"
              data:
                push:
                  sound:
                    name: default
                    critical: 1
                    volume: 1.0
          - delay: '00:01:00'
          - service: notify.chris_sms
            data:
                title: "Water Alarm Triggered"
                message: "Check the sump pump in the basement"
          - delay: '00:01:00'
2 Likes

Nice. But I have a notify.group and with the existing blueprint I am not allowed to use this

action:
  domain: mobile_app
  type: notify
  device_id: !input notify_device

I can only select one mobile, what do I have to change to be able to select my:
notify.ios_group_phones in the blueprint

Blueprint’s device selector won’t show groups, just mobile apps (which makes sense, given it has a selector of mobile_app ). Maybe someone else can expand on the issue.

I have other automations where I can select the notify group.
Does anyone know what I should change mobile_app to? in order to make this possible

Please share the blueprint and I can take a look.

I haven’t had time to work on this but now I want to use the alert integration to notify and confirm. This way the alert will continue and until you go and acknowledge it or the conditions change

I posted a comment on your GitHub but wanted to make one here too for anyone running into a problem like I did. I was not getting any notifications for leaks and looked at the yaml and was getting an error. I needed to remove the !input from the actions to relieve the error and can confirm it fires off as expected.

was:

action:
domain: mobile_app
type: notify
device_id: !input notify_device

Now:

action:
domain: mobile_app
type: notify
device_id: notify_device

Hope this helps someone.

Thanks for the typo fix @LCSteve!

As for the !input error you’re are getting, I have no idea why… It’s a valid tag and required for it to be configurable. See: Blueprint tutorial - Home Assistant

I found this, and the configuration where you use just one blueprint / automation for all sensors are genious.
One thing bugs me a bit, though:
This automation uses the friendly name of the entity that is triggered, in this case the water leak entity.
If I don’t set a new friendly name for that entity, it gives me messages like this: “Testsensor water leak has detected a leak”, which seems a bit strange to me.
Isn’t it possible to change the action in the automation to use the device friendly name instead?

See this picture:

Can that be done? And if so, how?

Thanks

I am not sure that’s possible without making the blueprint overly complicated. Keep in mind that it’s listening to moisture entities, not their devices. Just change the entity’s friendly name. As an example, I use “Kitchen flood sensor” so my notification would show “Kitchen flood sensor has detected a leak.”

Yes, that’s what I ended up doing. Thanks for the blueprint, nice work!

1 Like

Let me start this by saying that I’m in no way a HA automation expert. It seems that this automation triggers every time ANY state changes, and the evaluates the condition as to whether the event has a device class of moisture. Probably 99% of the times this automation triggers, it immediately exits out as the state change was something other than moisture. Is there any way to limit the automation to only trigger on state changes of moisture sensors instead of all state changes?

5 Likes

Hi @benji,

I’ve been using this blueprint for a few weeks now and I never would’ve gotten this far without you, so thanks.

I migrated from Hubitat and they had a built in feature for this as well as some smart subsequent automations. I’m not here to tell anybody that this needs to be changed, but here’s some things that’ve helped me on another platform and I altered your blueprint to fit my needs (which might be useful to others).

Basic operation:
Detects the state change of moisture type sensors to on
Turn off DND on all voice assistants to prep for the announcements in case it’s at night
Turn off water supply valve (this is the part that was built into hubitat and what I am suggesting)
The water supply valve has it’s own independent automations that notify the house and devices if it is ever closed.
Activate a scene that turns all accent lights in the house blue
Notify phones with the dynamic announcement including leak sensor name
Announce via voice assistants including leak sensor name
By this time, the water supply valve would be closed and another message would’ve went to phones/voice assistant indicating the threat has been neutralized by turning off the water (in case I am unable to witness the messages in real time, the phones will still say where the leak was and that the water supply valve was closed).

This of course could all be in one automation and that’s where I was headed with this but then I decided at the last minute, I want to be notified of a water supply valve closure in all circumstances (not just leaks) so I left it separate for my circumstance.

Now that the lights are blue, I know where the leak is, and the water has been turned off, what do I do? I tied the lights reset automation back to the water supply valve being opened. Reason being, a leak sensor could stop being wet but the issue not yet resolved (because the water is still off or perhaps the leak is unresolved). The resetting of all the lights was cumbersome in Hubitat but I have adaptive lighting in HA, so I just automate a toggle on the adaptive lights and it puts everything back to how it should be. I guess this would be different for the user; a scene could be used for this too.

  mode: single
- id: '1642307791979'
  alias: Leak Detection - Notifier and Shutdown
  description: ''
  trigger:
  - platform: event
    event_type: state_changed
    event_data: {}
  condition:
  - condition: template
    value_template: '{{ trigger.event.data.new_state.attributes.device_class == "moisture"
      }}'
  - condition: template
    value_template: '{{ trigger.event.data.new_state.state == "on" }}'
  action:
  - service: script.alexa_disable_do_not_disturb_all_devices
  - type: turn_off
    device_id: dfd03c8879f516f34824e0ade307bdf8
    entity_id: switch.water_supply_valve
    domain: switch
  - service: scene.turn_on
    target:
      entity_id: scene.leak_detection_scene
  - service: notify.mobile_app_sarge_s_phone
    data:
      message: '{{ trigger.event.data.new_state.attributes.friendly_name }} has detected
        a leak.'
  - service: notify.mobile_app_iphone
    data:
      message: '{{ trigger.event.data.new_state.attributes.friendly_name }} has detected
        a leak.'
  - service: notify.alexa_media
    data:
      target: media_player.kitchen_echo_show, media_player.2nd_floor_hallway_echo_dot,media_player.bathroom_1_echo_dot,
        media_player.bedroom_2_echo_show,media_player.bedroom_echo_show, media_player.office_echo_show,media_player.garage_entryway_echo_show,
        media_player.garage_echo_dot
      data:
        type: announce
      message: '{{ trigger.event.data.new_state.attributes.friendly_name }} has detected
        a leak.'
  mode: single

These are merely fun suggestions that I’ve used in my personal setup and you can decide to incorporate them or not. Again, I want to thank you for the foundational legwork that made this easy for me to do.

3 Likes