Skip to content

Instantly share code, notes, and snippets.

@StefCoders
Created September 4, 2024 17:40
Show Gist options
  • Save StefCoders/8912441fbe208e716d791f9e99b9f9c7 to your computer and use it in GitHub Desktop.
Save StefCoders/8912441fbe208e716d791f9e99b9f9c7 to your computer and use it in GitHub Desktop.
blueprint:
name: ZHA - Moes Tuya Smart Knob (TS004F) controller for media_player
description: Steuern Sie die Lautstärke des Media Players und setzen Sie Play/Pause darauf
domain: automation
input:
remote:
name: Remote
description: Moes Tuya Smart Knob-Gerät zur Verwendung
selector:
device:
integration: zha
model: TS004F
media_player:
name: MediaPlayer
description: Der MediaPlayer, der gesteuert werden soll
selector:
target:
entity:
domain: media_player
volume_step_size:
name: Volume Step Size
description: Wert der Drehung, der einer Lautstärke-Änderung von 1% entspricht
default: 13
selector:
number:
min: 1
max: 100
mode: slider
step: 1
secondary_media_player:
name: Secondary MediaPlayer
description: Ein weiterer MediaPlayer, der bei einem Tastendruck gesteuert werden soll
selector:
target:
entity:
domain: media_player
button_custom_action:
name: Button Custom Action
description: Benutzerdefinierte Aktion, die beim Tastendruck ausgeführt werden soll
selector:
action: {}
mode: restart
max_exceeded: silent
trigger:
- platform: event
event_type: zha_event
event_data:
device_id: !input 'remote'
action:
- variables:
command: '{{ trigger.event.data.command }}'
cluster_id: '{{ trigger.event.data.cluster_id }}'
endpoint_id: '{{ trigger.event.data.endpoint_id }}'
args: '{{ trigger.event.data.args }}'
step_type: >
{% if args %}
{% if 'StepMode.Up' in args %}
up
{% elif 'StepMode.Down' in args %}
down
{% endif %}
{% else %}
none
{% endif %}
amount: '{{ (args and args.split(",")[1] | int(default=50)) or 50 }}'
rate: '{{ (args and args.split(",")[2] | int(default=1)) or 1 }}'
volume_step_size: !input 'volume_step_size'
# --- Media Player ---
media_player_entity: !input 'media_player'
media_player_is_on: "{{ states(media_player_entity.entity_id) not in ['off', 'unavailable', 'idle'] }}" # Überprüft, ob der Media Player eingeschaltet oder am Abspielen ist.
- choose:
- conditions:
- '{{ command == "toggle" }}'
- '{{ cluster_id == 6 }}'
- '{{ endpoint_id == 1 }}'
sequence: !input 'button_custom_action'
- conditions:
- '{{ command == "step" }}'
- '{{ cluster_id == 8 }}'
- '{{ endpoint_id == 1 }}'
- '{{ media_player_is_on }}'
sequence:
- repeat:
count: '{{ rate }}'
sequence:
- service: media_player.volume_set
target: !input 'media_player'
data:
volume_level: >
{% set current_volume = state_attr(media_player_entity.entity_id, 'volume_level') | float %}
{% set volume_increment = (amount | float) / volume_step_size / 100 %}
{% if step_type == 'up' %}
{% set new_volume = current_volume + volume_increment %}
{% elif step_type == 'down' %}
{% set new_volume = current_volume - volume_increment %}
{% endif %}
{% set new_volume = new_volume if 0 <= new_volume <= 1 else 0 if new_volume < 0 else 1 %}
{{ new_volume }}
- delay: '00:00:01' # Eine konstante Verzögerung zwischen den Befehlen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment