summaryrefslogtreecommitdiffstats
path: root/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
diff options
context:
space:
mode:
Diffstat (limited to 'makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix')
-rw-r--r--makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix107
1 files changed, 107 insertions, 0 deletions
diff --git a/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix b/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
new file mode 100644
index 00000000..f59f022f
--- /dev/null
+++ b/makefu/2configs/home/ham/media/remote_sound_arbeitszimmer.nix
@@ -0,0 +1,107 @@
+{ lib, ...}:
+let
+ statecond = cond: { # cond must be a list
+ condition = "template";
+ value_template = "{{ trigger.to_state.state in ( " +
+ (lib.concatMapStringsSep "," (x: "'${x}'") cond) + ") }}";
+ };
+ vol_change = 0.030;
+
+ max_repeat = "30"; # max loops to repeat before bailing out
+ remote = "sensor.arbeitszimmer_sound1_action";
+ player = "media_player.office";
+ last_state_sensor_name = "last_rotation_action_arbeitszimmer";
+ last_state_sensor = "input_text.${last_state_sensor_name}";
+ # - service: media_player.volume_set
+ # target:
+ # entity_id: media_player.kitchen
+ # data:
+ # volume_level: {{ state_attr('media_player.kitchen', 'volume_level') + 0.02 }}
+ rotate_stop = "brightness_stop";
+ rotate_right = "brightness_move_up";
+ rotate_left = "brightness_move_down" ;
+
+ single_click = "toggle";
+ double_click = "brightness_step_up";
+ triple_click = "brightness_step_down";
+in {
+ services.home-assistant.config.input_text."${last_state_sensor_name}".name = "Last action of the arbeitszimmer";
+ services.home-assistant.config.automation = [
+ {
+ trigger = {
+ platform = "state";
+ entity_id = remote;
+ to = [ rotate_stop ];
+ };
+ action = [
+ { service = "input_text.set_value";
+ target.entity_id = last_state_sensor;
+ data.value = "stop";
+ }
+ ];
+ }
+ {
+ alias = "Perform Actions with ${remote}";
+ trigger = {
+ platform = "state";
+ entity_id = remote;
+ to = [ single_click double_click triple_click rotate_left rotate_right ];
+ };
+ #mode = "queued";
+ #max = 5;
+ mode = "single";
+ #max_exceeded = "silent";
+ action = [
+ {
+ choose = [
+ {
+ conditions = statecond [ single_click ];
+ sequence = [
+ { service = "media_player.media_play_pause";
+ target.entity_id = player;
+ }
+ ];
+ }
+ {
+ conditions = statecond [ rotate_left rotate_right ];
+ sequence = let
+ vol_up = toString vol_change;
+ vol_down = toString (-1 * vol_change);
+ in [
+ {
+ variables.nextvol = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} ${vol_down} {% else -%} ${vol_up} {% endif -%}'';
+ variables.state = ''{% if trigger.to_state.state in ( "${rotate_left}" ) -%} left {% else -%} right {% endif -%}'';
+ }
+ { service = "input_text.set_value";
+ target.entity_id = last_state_sensor;
+ data.value = ''{{ state }}'';
+ }
+ {
+ repeat = {
+ sequence = [
+ { service = "media_player.volume_set";
+ target.entity_id = player;
+ data.volume_level = ''{{ state_attr("${player}","volume_level") + (nextvol|float) }}'';
+ }
+ { delay.milliseconds = "150"; }
+ ];
+ while = [
+ {
+ condition = "template";
+ value_template = ''{{ states("${last_state_sensor}") == state }}'';
+ }
+ {
+ condition = "template";
+ value_template = "{{ repeat.index <= ${max_repeat}}}";
+ }
+ ];
+ };
+ }
+ ];
+ }
+ ];
+ }
+ ];
+ }
+ ];
+}