Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Firerouge/3a4121a113246119629d29d5c9b3c48e to your computer and use it in GitHub Desktop.
Save Firerouge/3a4121a113246119629d29d5c9b3c48e to your computer and use it in GitHub Desktop.
Home Assistant Blueprint: Low toner level detection & notification for all IPP printers
blueprint:
name: Low toner level detection & notification for all IPP printers
description: Regularly test all sensors with 'toner' marker_type for crossing
a certain toner level threshold and if so execute an action.
domain: automation
input:
threshold:
name: Toner warning level threshold
description: Toner sensors below threshold are assumed to be low-toner.
default: 20
selector:
number:
min: 5.0
max: 100.0
unit_of_measurement: '%'
mode: slider
step: 5.0
time:
name: Time to test on
description: Test is run at configured time
default: '10:00:00'
selector:
time: {}
day:
name: Weekday to test on
description: 'Test is run at configured time either everyday (0) or on a given
weekday (1: Monday ... 7: Sunday)'
default: 0
selector:
number:
min: 0.0
max: 7.0
mode: slider
step: 1.0
actions:
name: Actions
description: Notifications or similar to be run. {{sensors}} is replaced with
the names of sensors being low on toner.
selector:
action: {}
source_url: https://gist.github.com/Firerouge/3a4121a113246119629d29d5c9b3c48e
variables:
day: !input 'day'
threshold: !input 'threshold'
sensors: >-
{% set result = namespace(sensors=[]) %}
{% for state in states.sensor | selectattr('attributes.marker_type', '==', 'toner') %}
{% if 0 <= state.state | int(-1) < threshold %}
{% set result.sensors = result.sensors + [state.name ~ ' (' ~ state.state ~ ' %)'] %}
{% endif %}
{% endfor %}
{{result.sensors|join(', ')}}
trigger:
- platform: time
at: !input 'time'
condition:
- '{{ sensors != '''' and (day | int == 0 or day | int == now().isoweekday()) }}'
action:
- choose: []
default: !input 'actions'
mode: single
@zardoz-net
Copy link

I suggest to change in line 47 the statement selectattr('attributes.marker_type', '==', 'toner') to selectattr('attributes.marker_type', 'search', '(toner|inkCartridge|ink-cartridge)') to also work with inkjet printers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment