mirror of
https://github.com/skalavala/mysmarthome.git
synced 2025-08-25 14:16:34 +00:00
3d printer related updates
This commit is contained in:
@@ -9,22 +9,91 @@ homeassistant:
|
||||
automation.3d_print:
|
||||
icon: mdi:printer
|
||||
|
||||
input_boolean:
|
||||
twenty_five_percent:
|
||||
name: "25%"
|
||||
initial: "off"
|
||||
icon: mdi:radiobox-blank
|
||||
|
||||
fifty_percent:
|
||||
name: "50%"
|
||||
initial: "off"
|
||||
icon: mdi:brightness-3
|
||||
|
||||
seventy_five_percent:
|
||||
name: "75%"
|
||||
initial: "off"
|
||||
icon: mdi:brightness-2
|
||||
|
||||
hundred_percent:
|
||||
name: "100%"
|
||||
initial: "off"
|
||||
icon: mdi:brightness-1
|
||||
|
||||
power_off_when_complete:
|
||||
name: Auto Shutoff When Done
|
||||
initial: "off"
|
||||
icon: mdi:toggle-switch-off
|
||||
#
|
||||
# Turn Off When the printer status changed from "Prnting" to anything.
|
||||
# Octoprint Camera URL in the format
|
||||
# still_image_url: "http://192.xxx.xxx.xxx/webcam/?action=snapshot"
|
||||
# mjpeg_url: "http://192.xxx.xxx.xxx/webcam/?action=stream"
|
||||
#
|
||||
camera:
|
||||
- platform: mjpeg
|
||||
name: 3D Printer Camera
|
||||
still_image_url: !secret octoprint_cam_snapshot
|
||||
mjpeg_url: !secret octoprint_cam_stream
|
||||
|
||||
#
|
||||
# A couple of template sensors to show the elapsed and estimated time in readable format
|
||||
# instead of # of seconds (default)
|
||||
#
|
||||
sensor:
|
||||
- platform: template
|
||||
sensors:
|
||||
time_elapsed:
|
||||
value_template: >
|
||||
{%- macro secondsToReadableString(seconds) %}
|
||||
{%- set map = {'week': (seconds / 604800) % 604800,
|
||||
'day': (seconds / 86400) % 7, 'hour': (seconds / 3600) % 24,
|
||||
'minute': (seconds / 60) % 60} -%}
|
||||
{%- for item in map if map[item] | int > 0 -%}
|
||||
{%- if loop.first %}{% elif loop.last %}, and {% else %}, {% endif -%}
|
||||
{{- map[item]|int }} {{ item -}} {{- 's' if map[item]|int > 1 -}}
|
||||
{%- endfor -%}
|
||||
{% endmacro %}
|
||||
{{ secondsToReadableString(states('sensor.octoprint_time_elapsed') |int) }}
|
||||
|
||||
- platform: template
|
||||
sensors:
|
||||
time_estimated:
|
||||
value_template: >
|
||||
{%- macro secondsToReadableString(seconds) %}
|
||||
{%- set map = {'week': (seconds / 604800) % 604800,
|
||||
'day': (seconds / 86400) % 7, 'hour': (seconds / 3600) % 24,
|
||||
'minute': (seconds / 60) % 60 } -%}
|
||||
{%- for item in map if map[item] | int > 0 -%}
|
||||
{%- if loop.first %}{% elif loop.last %}, and {% else %}, {% endif -%}
|
||||
{{- map[item]|int }} {{ item -}} {{- 's' if map[item]|int > 1 -}}
|
||||
{%- endfor -%}
|
||||
{% endmacro %}
|
||||
{{ secondsToReadableString(states('sensor.octoprint_time_remaining') |int) }}
|
||||
|
||||
automation:
|
||||
#
|
||||
# Notify when the printer status changed from "Prnting" to anything.
|
||||
# Use this later to determine if you want to turn off printer or not
|
||||
#
|
||||
- alias: "Octoprint 3D Print"
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: "sensor.octoprint_current_state"
|
||||
from: "Printing"
|
||||
action:
|
||||
- delay: "00:00:59"
|
||||
- service: switch.turn_off
|
||||
entity_id: switch.3d_printer
|
||||
- service: script.notify_me
|
||||
data_template:
|
||||
message: "3D Printer Status Changed from 'Printing' to {{ trigger.to_state.state }}. Turned Off the Printer!"
|
||||
message: "3D Printer Status Changed from 'Printing' to '{{ trigger.to_state.state }}'."
|
||||
|
||||
#
|
||||
# Updates on the Printer Status
|
||||
@@ -36,7 +105,7 @@ automation:
|
||||
action:
|
||||
- service: script.notify_me
|
||||
data_template:
|
||||
message: "3D Printer Status is now {{ trigger.to_state.state }}"
|
||||
message: "3D Printer Status changed from '{{ trigger.from_state.state }}' to '{{ trigger.to_state.state }}'."
|
||||
|
||||
#
|
||||
# Notifies when the printer errors out
|
||||
@@ -51,17 +120,31 @@ automation:
|
||||
data_template:
|
||||
message: "3D Printer Status changed to 'ERROR'. Please check the printer!"
|
||||
|
||||
#
|
||||
# Updates appropriate input booleans based on percentage complete
|
||||
#
|
||||
- alias: "Update Percentage Booleans"
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: sensor.octoprint_job_percentage
|
||||
action:
|
||||
- service_template: "input_boolean.turn_{{- 'on' if states('sensor.octoprint_job_percentage') | int > 25 else 'off' }}"
|
||||
entity_id: input_boolean.twenty_five_percent
|
||||
- service_template: "input_boolean.turn_{{- 'on' if states('sensor.octoprint_job_percentage') | int > 50 else 'off' }}"
|
||||
entity_id: input_boolean.fifty_percent
|
||||
- service_template: "input_boolean.turn_{{- 'on' if states('sensor.octoprint_job_percentage') | int > 75 else 'off' }}"
|
||||
entity_id: input_boolean.seventy_five_percent
|
||||
- service_template: "input_boolean.turn_{{- 'on' if states('sensor.octoprint_job_percentage') | int == 100 else 'off' }}"
|
||||
entity_id: input_boolean.hundred_percent
|
||||
|
||||
#
|
||||
# Provides update at frequent intervals - 25%, 50%, 75%, and 100%!
|
||||
#
|
||||
- alias: "Octoprint 3D Printer Progress Update"
|
||||
trigger:
|
||||
platform: template
|
||||
value_template:
|
||||
"{{ states('sensor.octoprint_job_percentage') |int == 25 or
|
||||
states('sensor.octoprint_job_percentage') |int == 50 or
|
||||
states('sensor.octoprint_job_percentage') |int == 75 or
|
||||
states('sensor.octoprint_job_percentage') |int == 100 }}"
|
||||
platform: state
|
||||
entity_id: input_boolean.twenty_five_percent, input_boolean.fifty_percent, input_boolean.seventy_five_percent, input_boolean.hundred_percent
|
||||
to: "on"
|
||||
action:
|
||||
- service: script.notify_me
|
||||
data_template:
|
||||
@@ -75,6 +158,37 @@ automation:
|
||||
{{- map[item]|int }} {{ item -}} {{- 's' if map[item]|int > 1 -}}
|
||||
{%- endfor -%}
|
||||
{% endmacro %}
|
||||
3D Printer - Print job is now {{ states('sensor.octoprint_job_percentage') |int }}% complete.
|
||||
Print Time: {{ secondsToReadableString(states('sensor.octoprint_time_elapsed') |int) }}
|
||||
Print Time Left: {{ secondsToReadableString(states('sensor.octoprint_time_remaining') |int) }}
|
||||
3D Printer job is now {{ trigger.to_state.attributes.friendly_name }} complete.
|
||||
{% if trigger.entity_id != 'input_boolean.hundred_percent' %}
|
||||
Time Spent: {{ secondsToReadableString(states('sensor.octoprint_time_elapsed') |int) }}.
|
||||
Time Left: {{ secondsToReadableString(states('sensor.octoprint_time_remaining') |int) }}.
|
||||
{% endif %}
|
||||
|
||||
#
|
||||
# When the printing is complete (100%), it waits for 2 minutes and turns off the printer.
|
||||
# It also resets all the input booleans, so that it starts fresh next time.
|
||||
# Resetting input boleans is not necessary as they get updated automatically when
|
||||
# octoprint job percentage value chaanges... but why not?
|
||||
#
|
||||
- alias: "Job Finished"
|
||||
trigger:
|
||||
platform: state
|
||||
entity_id: input_boolean.hundred_percent
|
||||
to: "on"
|
||||
action:
|
||||
- condition: template
|
||||
value_template: "{{ states('input_boolean.power_off_when_complete') == 'on' }}"
|
||||
- delay: "00:02:00"
|
||||
- service: switch.turn_off
|
||||
entity_id: switch.3d_printer
|
||||
- service: script.notify_me
|
||||
data_template:
|
||||
message: "3D Printer is now switched off!"
|
||||
- service_template: input_boolean.turn_off
|
||||
entity_id: input_boolean.twenty_five_percent
|
||||
- service_template: input_boolean.turn_off
|
||||
entity_id: input_boolean.fifty_percent
|
||||
- service_template: input_boolean.turn_off
|
||||
entity_id: input_boolean.seventy_five_percent
|
||||
- service_template: input_boolean.turn_off
|
||||
entity_id: input_boolean.hundred_percent
|
||||
|
Reference in New Issue
Block a user