Inhaltsverzeichnis

WLED Druckfortschritt Anzeige

Für einen oder mehrere Drucker als Blueprint

Hierzu mit dem HA Editor eurer Wahl config → blueprints → automation einen eigenen Ordner anlegen.
darin z.B. eine Datei wled_print_progress.yaml und den unteren Inhalt einfügen.

blueprint:
  name: WLED print progress (multi printer, rotating)
  description: 'Shows the progress of up to 4 printers on one WLED segment (Percent
    effect). Active printers are shown one after another, each for the chosen interval,
    each in its own color. Printers that are idle/offline are skipped. When no printer
    is printing, an optional idle preset or idle effect is applied. Leave the entities
    of unused printer slots empty.

    '
  domain: automation
  input:
    segment_light:
      name: WLED segment (light)
      description: Light entity of the segment used for the progress bar (not the
        main segment).
      selector:
        entity:
          domain:
          - light
          integration: wled
          multiple: false
          reorder: false
    intensity_entity:
      name: WLED segment intensity (number)
      description: Intensity entity of the same segment.
      selector:
        entity:
          domain:
          - number
          integration: wled
          multiple: false
          reorder: false
    interval:
      name: Display time per printer (seconds)
      default: 5
      selector:
        number:
          min: 1.0
          max: 120.0
          unit_of_measurement: s
          mode: box
          step: 1.0
    inactive_states:
      name: States that count as "not printing"
      default:
      - idle
      - offline
      - finish
      - unknown
      - unavailable
      selector:
        text:
          multiple: true
          multiline: false
    idle_preset_entity:
      name: Idle - WLED preset selector (optional)
      description: 'Preset select entity of the WLED device. Note: a preset applies
        to the whole device, not just this segment. Takes priority over the idle effect.

        '
      default: ''
      selector:
        entity:
          domain:
          - select
          integration: wled
          multiple: false
          reorder: false
    idle_preset_name:
      name: Idle - preset name
      description: Exact name of the preset to apply when no printer is printing.
      default: ''
      selector:
        text:
          multiline: false
          multiple: false
    idle_effect:
      name: Idle - segment effect (optional)
      description: 'Effect name for the progress segment when no printer is printing,
        e.g. Rainbow. Only used if no idle preset is set. If both are empty, the segment
        is turned off.

        '
      default: ''
      selector:
        text:
          multiline: false
          multiple: false
    p1_status:
      name: Printer 1 - status
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p1_progress:
      name: Printer 1 - progress (%)
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p1_color:
      name: Printer 1 - color
      default:
      - 0
      - 0
      - 255
      selector:
        color_rgb: {}
    p2_status:
      name: Printer 2 - status (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p2_progress:
      name: Printer 2 - progress (%) (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p2_color:
      name: Printer 2 - color
      default:
      - 0
      - 255
      - 0
      selector:
        color_rgb: {}
    p3_status:
      name: Printer 3 - status (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p3_progress:
      name: Printer 3 - progress (%) (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p3_color:
      name: Printer 3 - color
      default:
      - 255
      - 0
      - 0
      selector:
        color_rgb: {}
    p4_status:
      name: Printer 4 - status (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p4_progress:
      name: Printer 4 - progress (%) (optional)
      default: ''
      selector:
        entity:
          domain:
          - sensor
          multiple: false
          reorder: false
    p4_color:
      name: Printer 4 - color
      default:
      - 255
      - 255
      - 0
      selector:
        color_rgb: {}
mode: restart
max_exceeded: silent
trigger_variables:
  inactive_states: !input inactive_states
  s1: !input p1_status
  s2: !input p2_status
  s3: !input p3_status
  s4: !input p4_status
  status_entities: '{{ [s1, s2, s3, s4] | select | list }}'
variables:
  inactive_states: !input inactive_states
  idle_preset_entity: !input idle_preset_entity
  idle_preset_name: !input idle_preset_name
  idle_effect: !input idle_effect
  s1: !input p1_status
  s2: !input p2_status
  s3: !input p3_status
  s4: !input p4_status
  pr1: !input p1_progress
  pr2: !input p2_progress
  pr3: !input p3_progress
  pr4: !input p4_progress
  c1: !input p1_color
  c2: !input p2_color
  c3: !input p3_color
  c4: !input p4_color
  printers: "{{ [\n  {'status': s1, 'progress': pr1, 'color': c1},\n  {'status': s2,
    'progress': pr2, 'color': c2},\n  {'status': s3, 'progress': pr3, 'color': c3},\n
    \ {'status': s4, 'progress': pr4, 'color': c4}\n] | selectattr('status') | list
    }}"
triggers:
- trigger: template
  value_template: '{{ status_entities | map(''states'') | reject(''in'', inactive_states)
    | list | count> 0 }}'
- trigger: template
  value_template: '{{ status_entities | map(''states'') | reject(''in'', inactive_states)
    | list | count == 0 }}'
- trigger: homeassistant
  event: start
actions:
- repeat:
    while:
    - condition: template
      value_template: '{{ printers | map(attribute=''status'') | map(''states'') |
        reject(''in'', inactive_states) | list | count> 0 }}'
    sequence:
    - repeat:
        for_each: '{{ printers }}'
        sequence:
        - if:
          - condition: template
            value_template: '{{ states(repeat.item.status) not in inactive_states
              }}'
          then:
          - action: number.set_value
            target:
              entity_id: !input intensity_entity
            data:
              value: '{{ [[states(repeat.item.progress) | float(0) | int, 0] | max,
                99] | min }}'
          - action: light.turn_on
            target:
              entity_id: !input segment_light
            data:
              effect: Percent
              rgb_color: '{{ repeat.item.color }}'
          - delay:
              seconds: !input interval
- choose:
  - conditions:
    - condition: template
      value_template: '{{ idle_preset_entity != '''' and idle_preset_name != ''''
        }}'
    sequence:
    - action: select.select_option
      target:
        entity_id: '{{ idle_preset_entity }}'
      data:
        option: '{{ idle_preset_name }}'
  - conditions:
    - condition: template
      value_template: '{{ idle_effect != '''' }}'
    sequence:
    - action: light.turn_on
      target:
        entity_id: !input segment_light
      data:
        effect: '{{ idle_effect }}'
  default:
  - action: light.turn_off
    target:
      entity_id: !input segment_light