From 8e94557f607f0bd05057c1b158ecb9fd71e86929 Mon Sep 17 00:00:00 2001 From: Christian Kauer Date: Tue, 2 Nov 2021 19:38:26 +0100 Subject: [PATCH] initial checkin --- .HA_VERSION | 1 + .gitignore | 7 ++ .vscode/settings.json | 5 ++ automations.yaml | 18 ++++ automations/system/start_notification.yaml | 14 +++ .../homeassistant/motion_light.yaml | 54 +++++++++++ .../homeassistant/notify_leaving_zone.yaml | 44 +++++++++ .../confirmable_notification.yaml | 84 ++++++++++++++++++ configuration.yaml | 20 +++++ entities/lights/attic_ceiling_spots.yaml | 11 +++ entities/lights/dining_room.yaml | 8 ++ entities/lights/dining_room_sw1.yaml | 9 ++ entities/lights/dining_room_sw2.yaml | 9 ++ entities/lights/kitchen.yaml | 8 ++ entities/lights/kitchen_sw1.yaml | 9 ++ entities/lights/kitchen_sw2.yaml | 7 ++ entities/lights/living_room.yaml | 9 ++ entities/lights/living_room_socket1.yaml | 9 ++ entities/notifiers/chk_telegram.yaml | 6 ++ entities/notifiers/dev_telegram.yaml | 5 ++ groups.yaml | 0 integrations/alexa.yaml | 3 + integrations/automation.yaml | 4 + integrations/groups.yaml | 4 + integrations/http.yaml | 7 ++ integrations/light.yaml | 3 + integrations/notify.yaml | 3 + integrations/script.yaml | 10 +++ integrations/telegram_bot.yaml | 9 ++ scenes.yaml | 0 scripts.yaml | 8 ++ scripts/telegram_test.yaml | 15 ++++ secrets.yaml | 9 ++ ...d391e987982fbbd3_en_-_google_translate.mp3 | Bin 0 -> 5118 bytes 34 files changed, 412 insertions(+) create mode 100644 .HA_VERSION create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 automations.yaml create mode 100644 automations/system/start_notification.yaml create mode 100644 blueprints/automation/homeassistant/motion_light.yaml create mode 100644 blueprints/automation/homeassistant/notify_leaving_zone.yaml create mode 100644 blueprints/script/homeassistant/confirmable_notification.yaml create mode 100644 configuration.yaml create mode 100644 entities/lights/attic_ceiling_spots.yaml create mode 100644 entities/lights/dining_room.yaml create mode 100644 entities/lights/dining_room_sw1.yaml create mode 100644 entities/lights/dining_room_sw2.yaml create mode 100644 entities/lights/kitchen.yaml create mode 100644 entities/lights/kitchen_sw1.yaml create mode 100644 entities/lights/kitchen_sw2.yaml create mode 100644 entities/lights/living_room.yaml create mode 100644 entities/lights/living_room_socket1.yaml create mode 100644 entities/notifiers/chk_telegram.yaml create mode 100644 entities/notifiers/dev_telegram.yaml create mode 100644 groups.yaml create mode 100644 integrations/alexa.yaml create mode 100644 integrations/automation.yaml create mode 100644 integrations/groups.yaml create mode 100644 integrations/http.yaml create mode 100644 integrations/light.yaml create mode 100644 integrations/notify.yaml create mode 100644 integrations/script.yaml create mode 100644 integrations/telegram_bot.yaml create mode 100644 scenes.yaml create mode 100644 scripts.yaml create mode 100644 scripts/telegram_test.yaml create mode 100644 secrets.yaml create mode 100644 tts/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3_en_-_google_translate.mp3 diff --git a/.HA_VERSION b/.HA_VERSION new file mode 100644 index 0000000..57ca1b6 --- /dev/null +++ b/.HA_VERSION @@ -0,0 +1 @@ +2021.10.6 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bd62d4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/*.log +/home-assistant.log.1 +/home-assistant.log.fault +/home-assistant_v2.db-wal +/home-assistant_v2.db +/home-assistant_v2.db-shm +/.storage diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a04b218 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "*.yaml": "home-assistant" + } +} \ No newline at end of file diff --git a/automations.yaml b/automations.yaml new file mode 100644 index 0000000..76cf6d9 --- /dev/null +++ b/automations.yaml @@ -0,0 +1,18 @@ +- id: '1635708587790' + alias: Außenbeleuchtung einschalten + description: '' + trigger: + - platform: sun + event: sunset + offset: -00:30:00 + condition: + - condition: time + before: '22:00' + action: + - service: telegram_bot.send_message + data: + title: Sonnenuntergang + message: Außenbeleuchtung wird eingeschaltet {"message":"Darksky:{{states('sun.sun')}}"} + target: -391668323 + message_tag: '' + mode: single diff --git a/automations/system/start_notification.yaml b/automations/system/start_notification.yaml new file mode 100644 index 0000000..0b87df0 --- /dev/null +++ b/automations/system/start_notification.yaml @@ -0,0 +1,14 @@ +description: Send notification on Home Assistant start +alias: system_start_notification +id: 104463f6-7524-48d9-bbe5-2bb09017e946 +mode: single +trigger: + platform: homeassistant + event: start +action: + - service: notify.dev_telegram + data: + message: Home Assistant is starting up again + # - service: notify.chk_telegram + # data: + # message: Home Assistant is starting up again \ No newline at end of file diff --git a/blueprints/automation/homeassistant/motion_light.yaml b/blueprints/automation/homeassistant/motion_light.yaml new file mode 100644 index 0000000..54a4a4f --- /dev/null +++ b/blueprints/automation/homeassistant/motion_light.yaml @@ -0,0 +1,54 @@ +blueprint: + name: Motion-activated Light + description: Turn on a light when motion is detected. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml + input: + motion_entity: + name: Motion Sensor + selector: + entity: + domain: binary_sensor + device_class: motion + light_target: + name: Light + selector: + target: + entity: + domain: light + no_motion_wait: + name: Wait time + description: Time to leave the light on after last motion is detected. + default: 120 + selector: + number: + min: 0 + max: 3600 + unit_of_measurement: seconds + +# If motion is detected within the delay, +# we restart the script. +mode: restart +max_exceeded: silent + +trigger: + platform: state + entity_id: !input motion_entity + from: "off" + to: "on" + +action: + - alias: "Turn on the light" + service: light.turn_on + target: !input light_target + - alias: "Wait until there is no motion from device" + wait_for_trigger: + platform: state + entity_id: !input motion_entity + from: "on" + to: "off" + - alias: "Wait the number of seconds that has been set" + delay: !input no_motion_wait + - alias: "Turn off the light" + service: light.turn_off + target: !input light_target diff --git a/blueprints/automation/homeassistant/notify_leaving_zone.yaml b/blueprints/automation/homeassistant/notify_leaving_zone.yaml new file mode 100644 index 0000000..71abf8f --- /dev/null +++ b/blueprints/automation/homeassistant/notify_leaving_zone.yaml @@ -0,0 +1,44 @@ +blueprint: + name: Zone Notification + description: Send a notification to a device when a person leaves a specific zone. + domain: automation + source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml + input: + person_entity: + name: Person + selector: + entity: + domain: person + zone_entity: + name: Zone + selector: + entity: + domain: zone + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + integration: mobile_app + +trigger: + platform: state + entity_id: !input person_entity + +variables: + zone_entity: !input zone_entity + # This is the state of the person when it's in this zone. + zone_state: "{{ states[zone_entity].name }}" + person_entity: !input person_entity + person_name: "{{ states[person_entity].name }}" + +condition: + condition: template + value_template: "{{ trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}" + +action: + - alias: "Notify that a person has left the zone" + domain: mobile_app + type: notify + device_id: !input notify_device + message: "{{ person_name }} has left {{ zone_state }}" diff --git a/blueprints/script/homeassistant/confirmable_notification.yaml b/blueprints/script/homeassistant/confirmable_notification.yaml new file mode 100644 index 0000000..d52e5a6 --- /dev/null +++ b/blueprints/script/homeassistant/confirmable_notification.yaml @@ -0,0 +1,84 @@ +blueprint: + name: Confirmable Notification + description: >- + A script that sends an actionable notification with a confirmation before + running the specified action. + domain: script + source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml + input: + notify_device: + name: Device to notify + description: Device needs to run the official Home Assistant app to receive notifications. + selector: + device: + integration: mobile_app + title: + name: "Title" + description: "The title of the button shown in the notification." + default: "" + selector: + text: + message: + name: "Message" + description: "The message body" + selector: + text: + confirm_text: + name: "Confirmation Text" + description: "Text to show on the confirmation button" + default: "Confirm" + selector: + text: + confirm_action: + name: "Confirmation Action" + description: "Action to run when notification is confirmed" + default: [] + selector: + action: + dismiss_text: + name: "Dismiss Text" + description: "Text to show on the dismiss button" + default: "Dismiss" + selector: + text: + dismiss_action: + name: "Dismiss Action" + description: "Action to run when notification is dismissed" + default: [] + selector: + action: + +mode: restart + +sequence: + - alias: "Set up variables" + variables: + action_confirm: "{{ 'CONFIRM_' ~ context.id }}" + action_dismiss: "{{ 'DISMISS_' ~ context.id }}" + - alias: "Send notification" + domain: mobile_app + type: notify + device_id: !input notify_device + title: !input title + message: !input message + data: + actions: + - action: "{{ action_confirm }}" + title: !input confirm_text + - action: "{{ action_dismiss }}" + title: !input dismiss_text + - alias: "Awaiting response" + wait_for_trigger: + - platform: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_confirm }}" + - platform: event + event_type: mobile_app_notification_action + event_data: + action: "{{ action_dismiss }}" + - choose: + - conditions: "{{ wait.trigger.event.data.action == action_confirm }}" + sequence: !input confirm_action + - conditions: "{{ wait.trigger.event.data.action == action_dismiss }}" + sequence: !input dismiss_action diff --git a/configuration.yaml b/configuration.yaml new file mode 100644 index 0000000..1ee88a5 --- /dev/null +++ b/configuration.yaml @@ -0,0 +1,20 @@ +homeassistant: + # Load packages + packages: !include_dir_named integrations + + + + +# Configure a default setup of Home Assistant (frontend, api, etc) +default_config: + +# Text to speech +tts: + - platform: google_translate + +#group: !include groups.yaml +#automation: !include automations.yaml +#script: !include scripts.yaml +scene: !include scenes.yaml + + diff --git a/entities/lights/attic_ceiling_spots.yaml b/entities/lights/attic_ceiling_spots.yaml new file mode 100644 index 0000000..3d2d53c --- /dev/null +++ b/entities/lights/attic_ceiling_spots.yaml @@ -0,0 +1,11 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +platform: group +name: Deckenstrahler +unique_id: 89e0b395-1c3b-4646-b0bb-101d77e1d867 +entities: + - light.hue_color_spot_1 + - light.hue_color_spot_2 + - light.hue_color_spot_3 + - light.hue_color_spot_4 + diff --git a/entities/lights/dining_room.yaml b/entities/lights/dining_room.yaml new file mode 100644 index 0000000..a88f8d0 --- /dev/null +++ b/entities/lights/dining_room.yaml @@ -0,0 +1,8 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +platform: group +name: Esszimmerlichter +unique_id: 89e0b396-1c3b-4646-b0bb-101d77e1d862 +entities: + - light.licht_esszimmer_tisch + - light.licht_esszimmer_wand diff --git a/entities/lights/dining_room_sw1.yaml b/entities/lights/dining_room_sw1.yaml new file mode 100644 index 0000000..e4c6dff --- /dev/null +++ b/entities/lights/dining_room_sw1.yaml @@ -0,0 +1,9 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +# switch als Licht einbinden, so dass eine Grupperung als light möglich ist +# https://community.home-assistant.io/t/light-groups-making-me-crazy/180978/6 +platform: switch +name: Licht Esszimmer Wand +entity_id: switch.double_switch_node9_3 + + diff --git a/entities/lights/dining_room_sw2.yaml b/entities/lights/dining_room_sw2.yaml new file mode 100644 index 0000000..c627de6 --- /dev/null +++ b/entities/lights/dining_room_sw2.yaml @@ -0,0 +1,9 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +# switch als Licht einbinden, so dass eine Grupperung als light möglich ist +# https://community.home-assistant.io/t/light-groups-making-me-crazy/180978/6 +platform: switch +name: Licht Esszimmer Tisch +entity_id: switch.double_switch_node9_2_2 + + diff --git a/entities/lights/kitchen.yaml b/entities/lights/kitchen.yaml new file mode 100644 index 0000000..241d3fd --- /dev/null +++ b/entities/lights/kitchen.yaml @@ -0,0 +1,8 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +platform: group +name: Küchenlichter +unique_id: 89e0b395-1c3b-4646-b0bb-101d77e1d862 +entities: + - light.kitchen1 + - light.kitchen2 diff --git a/entities/lights/kitchen_sw1.yaml b/entities/lights/kitchen_sw1.yaml new file mode 100644 index 0000000..2c45be3 --- /dev/null +++ b/entities/lights/kitchen_sw1.yaml @@ -0,0 +1,9 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +# switch als Licht einbinden, so dass eine Grupperung als light möglich ist +# https://community.home-assistant.io/t/light-groups-making-me-crazy/180978/6 +platform: switch +name: Licht Küche Gaube +entity_id: switch.double_switch_node18_6 + + diff --git a/entities/lights/kitchen_sw2.yaml b/entities/lights/kitchen_sw2.yaml new file mode 100644 index 0000000..02a44f7 --- /dev/null +++ b/entities/lights/kitchen_sw2.yaml @@ -0,0 +1,7 @@ +# https://www.home-assistant.io/integrations/group/ +# +# switch als Licht einbinden, so dass eine Grupperung als light möglich ist +# https://community.home-assistant.io/t/light-groups-making-me-crazy/180978/6 +platform: switch +name: Licht Küche Herd +entity_id: switch.double_switch_node18_2_5 \ No newline at end of file diff --git a/entities/lights/living_room.yaml b/entities/lights/living_room.yaml new file mode 100644 index 0000000..98543d5 --- /dev/null +++ b/entities/lights/living_room.yaml @@ -0,0 +1,9 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +platform: group +name: Wohnzimmerlichter +unique_id: 81e0b395-1c3b-4646-b0bb-101d77e1d862 +entities: + - light.hue_color_spot_5 + - light.hue_color_spot_6 + - light.hue_color_spot_7 diff --git a/entities/lights/living_room_socket1.yaml b/entities/lights/living_room_socket1.yaml new file mode 100644 index 0000000..89c4c87 --- /dev/null +++ b/entities/lights/living_room_socket1.yaml @@ -0,0 +1,9 @@ +# https://www.home-assistant.io/integrations/light.group/ +# +# switch als Licht einbinden, so dass eine Grupperung als light möglich ist +# https://community.home-assistant.io/t/light-groups-making-me-crazy/180978/6 +platform: switch +name: Stricklicht +entity_id: switch.nas_wr01z_node21 + + diff --git a/entities/notifiers/chk_telegram.yaml b/entities/notifiers/chk_telegram.yaml new file mode 100644 index 0000000..cd3621e --- /dev/null +++ b/entities/notifiers/chk_telegram.yaml @@ -0,0 +1,6 @@ +# Notifier for Telegram to Christian +# https://www.home-assistant.io/integrations/notify/ +# +name: chk_telegram +platform: telegram +chat_id: !secret telegram_chk \ No newline at end of file diff --git a/entities/notifiers/dev_telegram.yaml b/entities/notifiers/dev_telegram.yaml new file mode 100644 index 0000000..777d1ec --- /dev/null +++ b/entities/notifiers/dev_telegram.yaml @@ -0,0 +1,5 @@ +# Notifier for Telegram-Gruppe DEV-Gruppe (openhab) +# https://www.home-assistant.io/integrations/notify/ +name: dev_telegram +platform: telegram +chat_id: !secret telegram_dev \ No newline at end of file diff --git a/groups.yaml b/groups.yaml new file mode 100644 index 0000000..e69de29 diff --git a/integrations/alexa.yaml b/integrations/alexa.yaml new file mode 100644 index 0000000..da78bb5 --- /dev/null +++ b/integrations/alexa.yaml @@ -0,0 +1,3 @@ +# https://www.home-assistant.io/integrations/alexa.smart_home/#test-the-lambda-function +alexa: + smart_home: \ No newline at end of file diff --git a/integrations/automation.yaml b/integrations/automation.yaml new file mode 100644 index 0000000..15b6e23 --- /dev/null +++ b/integrations/automation.yaml @@ -0,0 +1,4 @@ +# https://www.home-assistant.io/docs/automation/ +# +automation: !include ../automations.yaml +automation split: !include_dir_list ../automations \ No newline at end of file diff --git a/integrations/groups.yaml b/integrations/groups.yaml new file mode 100644 index 0000000..ea60094 --- /dev/null +++ b/integrations/groups.yaml @@ -0,0 +1,4 @@ +# https://www.home-assistant.io/integrations/group/ +# +group: !include ../groups.yaml +group split: !include_dir_named ../entities/groups \ No newline at end of file diff --git a/integrations/http.yaml b/integrations/http.yaml new file mode 100644 index 0000000..ea3baf7 --- /dev/null +++ b/integrations/http.yaml @@ -0,0 +1,7 @@ +http: + ssl_certificate: /ssl/cert.pem + ssl_key: /ssl/privkey.pem + use_x_forwarded_for: true + trusted_proxies: + - 192.168.178.70 + - 127.0.0.1 \ No newline at end of file diff --git a/integrations/light.yaml b/integrations/light.yaml new file mode 100644 index 0000000..5bfa422 --- /dev/null +++ b/integrations/light.yaml @@ -0,0 +1,3 @@ +# https://www.home-assistant.io/integrations/light/ +# +light: !include_dir_list ../entities/lights \ No newline at end of file diff --git a/integrations/notify.yaml b/integrations/notify.yaml new file mode 100644 index 0000000..e99f4b9 --- /dev/null +++ b/integrations/notify.yaml @@ -0,0 +1,3 @@ +# https://www.home-assistant.io/integrations/notify/ +# +notify: !include_dir_list ../entities/notifiers \ No newline at end of file diff --git a/integrations/script.yaml b/integrations/script.yaml new file mode 100644 index 0000000..d1eb602 --- /dev/null +++ b/integrations/script.yaml @@ -0,0 +1,10 @@ +--- +# The script integration allows users to specify a sequence of actions to be +# executed by Home Assistant when turned on. +# +# This loads up my custom scripts. +# +# https://www.home-assistant.io/integrations/script/ +# +script: !include ../scripts.yaml +script split: !include_dir_named ../scripts \ No newline at end of file diff --git a/integrations/telegram_bot.yaml b/integrations/telegram_bot.yaml new file mode 100644 index 0000000..4e945c4 --- /dev/null +++ b/integrations/telegram_bot.yaml @@ -0,0 +1,9 @@ +# Telegram Integration +# https://www.home-assistant.io/integrations/telegram_bot/ + +telegram_bot: + - platform: polling + api_key: !secret telegram_api_key + allowed_chat_ids: + - !secret telegram_dev # dev chat + - !secret telegram_chk # christian \ No newline at end of file diff --git a/scenes.yaml b/scenes.yaml new file mode 100644 index 0000000..e69de29 diff --git a/scripts.yaml b/scripts.yaml new file mode 100644 index 0000000..7b35d5c --- /dev/null +++ b/scripts.yaml @@ -0,0 +1,8 @@ +script_test1: + alias: Skript Test1 + sequence: + - service: telegram_bot.send_message + data: + message: test from script 1 + target: -391668323 + mode: single diff --git a/scripts/telegram_test.yaml b/scripts/telegram_test.yaml new file mode 100644 index 0000000..8d8af54 --- /dev/null +++ b/scripts/telegram_test.yaml @@ -0,0 +1,15 @@ +alias: Telegram Test1 +sequence: + - service: telegram_bot.send_message + data: + message: test from Telegram Test1 + arget: -391668323 +mode: single + +# alias: Telegram Test1 +# mode: single +# sequence: +# - service: telegram_bot.send_message +# data: +# message: Sonne17 +# target: -391668323 \ No newline at end of file diff --git a/secrets.yaml b/secrets.yaml new file mode 100644 index 0000000..dff5f53 --- /dev/null +++ b/secrets.yaml @@ -0,0 +1,9 @@ + +# Use this file to store secrets like usernames and passwords. +# Learn more at https://www.home-assistant.io/docs/configuration/secrets/ +some_password: welcome + + +telegram_api_key: 448772521:AAHIIrXBVEUF7_1zYRCmGo5YHipRJyBlp7o +telegram_dev: -391668323 +telegram_chk: 14652347 \ No newline at end of file diff --git a/tts/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3_en_-_google_translate.mp3 b/tts/a94a8fe5ccb19ba61c4c0873d391e987982fbbd3_en_-_google_translate.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..709f232e000627af960bc39e5dfaa3815af1759e GIT binary patch literal 5118 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 literal 0 HcmV?d00001