From fdbbbb53004091b053308d8512171f30338a61c7 Mon Sep 17 00:00:00 2001 From: Commander1024 Date: Sat, 14 Feb 2026 14:58:06 +0100 Subject: [PATCH] Motion detection in the hallway, new lamp in the living room. --- automations.yaml | 111 ++++--- ...-myggspray-e2494-matter-motion-sensor.yaml | 232 ++++++++++++++ esphome/sleepingroom.yaml | 283 ------------------ template.yaml | 3 +- 4 files changed, 307 insertions(+), 322 deletions(-) create mode 100644 blueprints/automation/aledziko/ikea-myggspray-e2494-matter-motion-sensor.yaml delete mode 100644 esphome/sleepingroom.yaml diff --git a/automations.yaml b/automations.yaml index e31e577..7d79498 100644 --- a/automations.yaml +++ b/automations.yaml @@ -1,17 +1,26 @@ - id: '1623153060369' alias: Licht bei Sonnenuntergang einschalten description: '' - trigger: - - platform: sun - event: sunset + triggers: + - event: sunset offset: '-1:00' - condition: + trigger: sun + conditions: - condition: state entity_id: person.marcus_scholz state: home - action: - - service: script.moodlight_orange_plasma - data: {} + actions: + - data: {} + action: script.moodlight_orange_plasma + - action: light.turn_on + metadata: {} + target: + entity_id: + - light.kuche_anrichte + - light.kajplats_e14_cws_globe_806lm + data: + brightness_pct: 75 + color_temp_kelvin: 3035 mode: single - id: '1623224198352' alias: TV Anti-Reflexion @@ -33,14 +42,13 @@ - id: '1623526683767' alias: Licht bei Sonnenaufgang ausschalten description: '' - trigger: - - platform: sun - event: sunrise + triggers: + - event: sunrise offset: '+1:00' - condition: [] - action: - - service: light.turn_off - target: + trigger: sun + conditions: [] + actions: + - target: area_id: - schlafzimmer device_id: @@ -52,9 +60,10 @@ - 98a9eef603f8c8ae6200c4834a3dbf4f - 32d15eec63fe68d5770813d47da53657 - 9f42805af5b7e423023595390342b9ac - - 063e41329df7b29bbaa8df2f508ee6cb + entity_id: light.kajplats_e14_cws_globe_806lm data: transition: 2 + action: light.turn_off mode: single - id: '1623673821789' alias: Gute Nacht! @@ -464,35 +473,28 @@ - id: '1632477389492' alias: Licht beim Heimkommen einschalten description: Nur während Dunkelphase - trigger: - - platform: state - entity_id: person.marcus_scholz + triggers: + - entity_id: person.marcus_scholz to: home from: not_home - condition: - - condition: or - conditions: - - condition: sun - before: sunrise - before_offset: '+1' - - condition: sun - after_offset: '-1' - after: sunset - enabled: false + trigger: state + conditions: - condition: sun before: sunrise before_offset: '+1' after: sunset after_offset: '-1' - action: - - service: script.moodlight_orange_plasma - data: {} - - service: light.turn_on - target: + actions: + - data: {} + action: script.moodlight_orange_plasma + - target: device_id: - - 32d15eec63fe68d5770813d47da53657 - 53a27edf581fcf40f3bc8b253b1ee369 - data: {} + - 5abbb43e5d015ee75c7c900240b4329e + data: + brightness_pct: 75 + color_temp_kelvin: 2992 + action: light.turn_on mode: single - id: '1648485179021' alias: Schalte den Fernseher mit WoL ein @@ -825,13 +827,20 @@ actions: - data: {} action: script.moodlight_xmas + - target: + device_id: + - 53a27edf581fcf40f3bc8b253b1ee369 + - 5abbb43e5d015ee75c7c900240b4329e + data: + brightness_pct: 75 + color_temp_kelvin: 2992 + action: light.turn_on - action: switch.turn_on metadata: {} data: {} target: device_id: - 1f3c4b5de4aea99bac83688ceb22293b - - 48dafb7f4a8ed6ccbb046758cb660c23 mode: single - id: '1700483035319' alias: Licht bei Sonnenaufgang ausschalten (XMas) @@ -854,7 +863,7 @@ - 98a9eef603f8c8ae6200c4834a3dbf4f - 32d15eec63fe68d5770813d47da53657 - 9f42805af5b7e423023595390342b9ac - - 063e41329df7b29bbaa8df2f508ee6cb + - 5abbb43e5d015ee75c7c900240b4329e data: transition: 2 action: light.turn_off @@ -864,7 +873,6 @@ target: device_id: - 1f3c4b5de4aea99bac83688ceb22293b - - 48dafb7f4a8ed6ccbb046758cb660c23 mode: single - id: '1701774106609' alias: IKEA STYRBAR Wohnzimmer @@ -1328,3 +1336,30 @@ entity_id: a57a56132635ff48a6d2ae8df322b385 domain: switch mode: single +- id: '1771012833905' + alias: Bewegungssteuerung Flurlicht + description: '' + use_blueprint: + path: aledziko/ikea-myggspray-e2494-matter-motion-sensor.yaml + input: + motion_entity: binary_sensor.myggspray_wrlss_mtn_sensor_belegung + no_motion_wait: 0 + illuminance_entity: sensor.myggspray_wrlss_mtn_sensor_beleuchtungsstarke + battery_entity: sensor.myggspray_wrlss_mtn_sensor_batterie + motion_on_action: + - action: light.turn_on + metadata: {} + target: + entity_id: + - light.schreibtisch_deko + data: {} + motion_off_action: + - action: light.turn_off + metadata: {} + target: + entity_id: + - light.schreibtisch_deko + data: {} + motion_cutoff: 10 + illuminance_low_threshold: 10 + battery_low_threshold: 20 diff --git a/blueprints/automation/aledziko/ikea-myggspray-e2494-matter-motion-sensor.yaml b/blueprints/automation/aledziko/ikea-myggspray-e2494-matter-motion-sensor.yaml new file mode 100644 index 0000000..ece2d22 --- /dev/null +++ b/blueprints/automation/aledziko/ikea-myggspray-e2494-matter-motion-sensor.yaml @@ -0,0 +1,232 @@ +blueprint: + name: IKEA MYGGSPRAY E2494 Motion Sensor (Matter) v2.1 + description: 'Full-featured automation for the IKEA MYGGSPRAY E2494 Matter motion + sensor. Supports independent actions for motion, illuminance (high/low), and battery + alerts. ' + domain: automation + source_url: https://github.com/aledziko/HA-blueprints/blob/main/IKEA/Matter/ikea-myggspray-e2494/ikea-myggspray-e2494-matter-motion-sensor.yaml + author: aledziko + input: + motion_entity: + name: MYGGSPRAY Motion Sensor + description: Select the MYGGSPRAY motion sensor (binary_sensor). + selector: + entity: + filter: + - device_class: + - occupancy + domain: + - binary_sensor + - device_class: + - motion + domain: + - binary_sensor + reorder: false + multiple: false + use_time_window: + name: Enable Active Hours? + description: Restrict automation to a specific time window. + default: false + selector: + boolean: {} + active_start_time: + name: Active Start Time + description: Automation starts working at this time (if enabled). + default: 08:00:00 + selector: + time: {} + active_end_time: + name: Active End Time + description: Automation stops working at this time (if enabled). + default: '22:00:00' + selector: + time: {} + no_motion_wait: + name: Wait time (Motion) + description: Time to wait after last motion is detected before running the "off" + action. + default: 120 + selector: + number: + min: 0.0 + max: 3600.0 + unit_of_measurement: seconds + step: 1.0 + mode: slider + motion_on_action: + name: 'Action: Motion Detected' + description: Run when motion is detected (and dark enough). + default: [] + selector: + action: {} + motion_off_action: + name: 'Action: Motion Stopped' + description: Run after the sensor stops detecting motion and wait time elapsed. + default: [] + selector: + action: {} + illuminance_entity: + name: (Optional) Illuminance Sensor + description: Select the light sensor (sensor.illuminance). + default: [] + selector: + entity: + filter: + - domain: + - sensor + device_class: + - illuminance + reorder: false + multiple: false + motion_cutoff: + name: (Optional) Motion Light Cutoff + description: Only trigger "Motion Detected" action if LUX is BELOW this value + (0 to disable). + default: 0 + selector: + number: + min: 0.0 + max: 3000.0 + unit_of_measurement: lux + step: 1.0 + mode: slider + illuminance_high_threshold: + name: (Optional) Light High Threshold + description: Trigger "High Action" when LUX goes ABOVE this value (e.g. 500 + lx). + default: 500 + selector: + number: + min: 0.0 + max: 3000.0 + unit_of_measurement: lux + step: 1.0 + mode: slider + high_action: + name: 'Action: Light High' + description: Run when light exceeds threshold (e.g. close curtains). + default: [] + selector: + action: {} + illuminance_low_threshold: + name: (Optional) Light Low Threshold + description: Trigger "Low Action" when LUX goes BELOW this value (e.g. 5 lx). + default: 5 + selector: + number: + min: 0.0 + max: 3000.0 + unit_of_measurement: lux + step: 1.0 + mode: slider + low_action: + name: 'Action: Light Low' + description: Run when light drops below threshold (e.g. open curtains). + default: [] + selector: + action: {} + battery_entity: + name: (Optional) Battery Sensor + description: Select the battery level sensor (sensor.battery). + default: [] + selector: + entity: + filter: + - domain: + - sensor + device_class: + - battery + reorder: false + multiple: false + battery_low_threshold: + name: (Optional) Battery Low Level + description: Threshold for battery alert (%). + default: 30 + selector: + number: + min: 0.0 + max: 100.0 + unit_of_measurement: '%' + step: 1.0 + mode: slider + battery_low_action: + name: 'Action: Battery Low' + description: Run when battery drops below threshold. + default: [] + selector: + action: {} +mode: parallel +max_exceeded: silent +trigger_variables: + motion_entity_input: !input motion_entity + illuminance_entity_input: !input illuminance_entity + motion_cutoff_input: !input motion_cutoff + high_threshold_input: !input illuminance_high_threshold + low_threshold_input: !input illuminance_low_threshold + battery_entity_input: !input battery_entity + battery_threshold_input: !input battery_low_threshold + use_time_window_input: !input use_time_window +triggers: +- trigger: state + entity_id: !input motion_entity + from: 'off' + to: 'on' + id: motion_on +- trigger: state + entity_id: !input motion_entity + from: 'on' + to: 'off' + for: + seconds: !input no_motion_wait + id: motion_off +- trigger: template + value_template: "{{ illuminance_entity_input != none and \n states(illuminance_entity_input) + | is_number and \n states(illuminance_entity_input) | float(0) > high_threshold_input + | float(100000) }}\n" + id: light_high +- trigger: template + value_template: "{{ illuminance_entity_input != none and \n states(illuminance_entity_input) + | is_number and \n states(illuminance_entity_input) | float(100000) < low_threshold_input + | float(-1) }}\n" + id: light_low +- trigger: template + value_template: "{{ battery_entity_input != none and \n states(battery_entity_input) + | is_number and \n states(battery_entity_input) | float(100) < battery_threshold_input + | float(-1) }}\n" + id: battery_low +condition: +- condition: or + conditions: + - condition: template + value_template: '{{ not use_time_window_input }}' + - condition: time + after: !input active_start_time + before: !input active_end_time +actions: +- choose: + - conditions: + - condition: trigger + id: motion_on + sequence: + - delay: 1.5 + - condition: template + value_template: "{% set cutoff = motion_cutoff_input | float(0) %} {% if cutoff + == 0 %}\n true\n{% else %}\n {% set lux = states(illuminance_entity_input) + | float(-1) %}\n {{ lux == -1 or lux <= cutoff }}\n{% endif %}\n" + - sequence: !input motion_on_action + - conditions: + - condition: trigger + id: motion_off + sequence: !input motion_off_action + - conditions: + - condition: trigger + id: light_high + sequence: !input high_action + - conditions: + - condition: trigger + id: light_low + sequence: !input low_action + - conditions: + - condition: trigger + id: battery_low + sequence: !input battery_low_action diff --git a/esphome/sleepingroom.yaml b/esphome/sleepingroom.yaml deleted file mode 100644 index 01f5c5f..0000000 --- a/esphome/sleepingroom.yaml +++ /dev/null @@ -1,283 +0,0 @@ -substitutions: - name: "sleepingroom" - friendly_name: "Luftqualität Schlafzimmer" - -esphome: - name: ${name} - friendly_name: ${friendly_name} - name_add_mac_suffix: false - project: - name: sensor.${name} - version: "1.0" - min_version: 2021.9.0 - on_boot: - then: - - light.turn_on: - id: co2_light - red: 0% - green: 100% - blue: 9% - - delay: 1.5s - - light.turn_on: - id: co2_light - red: 100% - green: 75% - blue: 0% - - delay: 1.5s - - light.turn_on: - id: co2_light - red: 100% - green: 0% - blue: 0% - - delay: 1.5s - - light.turn_on: - id: co2_light - red: 100% - green: 75% - blue: 0% - - delay: 1.5s - - light.turn_on: - id: co2_light - red: 0% - green: 100% - blue: 9% - - text_sensor.template.publish: - id: co2_warn - state: "grün" - - text_sensor.template.publish: - id: pm25_warn - state: "grün" - -esp32: - board: nodemcu-32s - framework: - type: esp-idf - -wifi: - ssid: "Voltage-legacy" - password: !secret voltage_legacy_psk - use_address: ${name}.home - power_save_mode: high - fast_connect: on - min_auth_mode: WPA2 - - # Enable fallback hotspot (captive portal) in case wifi connection fails - ap: - ssid: "Schlafzimmer Fallback Hotspot" - password: !secret fallback_psk - -captive_portal: - -# Enable logging -logger: - level: DEBUG - -# Enable Home Assistant API -api: - encryption: - key: !secret apikey - -# Enable over-the-air updates -ota: - platform: esphome - password: !secret ota - -# Initialize I²C -i2c: - - id: bus_a - sda: 13 - scl: 16 - scan: true - -# Initialize LEDC GPIOs -output: - - platform: ledc - pin: GPIO17 - id: led_red - - platform: ledc - pin: GPIO18 - id: led_green - max_power: 50% - - platform: ledc - pin: GPIO19 - id: led_blue - -# Define RGB mode for LED -light: - - platform: rgb - id: co2_light - name: "CO2 Status LED" - red: led_red - green: led_green - blue: led_blue - internal: true - -# Initialize UART for Vindriktning sensor -uart: - id: uartPM - rx_pin: GPIO26 - baud_rate: 9600 - -# Create text sensor to represent CO2 LED warn state (somewhat redundant) -text_sensor: - - platform: template - name: "Schlafzimmer CO2 Warnstufe" - id: co2_warn - - platform: template - name: "Schlafzimmer Feinstaub Warnstufe" - id: pm25_warn - -sensor: - # WiFi signal strength - - platform: wifi_signal - name: "WiFi Signalstärke" - update_interval: 60s - # SCD30 CO2 + temperature + humidity sensor - # * air quality category 0: LED is purple, sensor needs calibration (<380ppm) - # • air quality category 1: LED is green (380-800ppm) - # • air quality category 2: LED is yellow (900-1200ppm) - # • air quality category 3: LED is orange/amber (1200 bis 1600ppm) - # • air quality category 4: LED is red (1600-2000ppm) - - platform: scd30 - i2c_id: bus_a - co2: - name: "Schlafzimmer CO2" - id: co2_value - accuracy_decimals: 1 - on_value_range: - - below: 380 - then: - - text_sensor.template.publish: - id: co2_warn - state: "Kalibrierung nötig" - - light.turn_on: - id: co2_light - red: 75% - green: 0% - blue: 100% - - above: 380 - below: 800 - then: - - text_sensor.template.publish: - id: co2_warn - state: "grün" - - light.turn_on: - id: co2_light - red: 0% - green: 100% - blue: 0% - - above: 800 - below: 1200 - then: - - text_sensor.template.publish: - id: co2_warn - state: "gelb" - - light.turn_on: - id: co2_light - red: 100% - green: 100% - blue: 0% - - above: 1200 - below: 1600 - then: - - text_sensor.template.publish: - id: co2_warn - state: "orange" - - light.turn_on: - id: co2_light - red: 100% - green: 75% - blue: 0% - - above: 1600 - then: - - text_sensor.template.publish: - id: co2_warn - state: "rot" - - light.turn_on: - id: co2_light - red: 100% - green: 0% - blue: 0% - temperature: - name: "Schlafzimmer Temperatur" - accuracy_decimals: 2 - filters: - - offset: -2.5 - humidity: - name: "Schlafzimmer Luftfeuchtigkeit" - accuracy_decimals: 1 - # SCD30 temp sensor is a bit off - ambient_pressure_compensation: 1 - automatic_self_calibration: True - address: 0x61 - update_interval: 10s - # Vindriktning particulate matter sensor - - platform: pm1006 - uart_id: uartPM - pm_2_5: - name: "Feinstaub PM 2.5µm" - on_value_range: - - above: 0 - below: 35 - then: - - text_sensor.template.publish: - id: pm25_warn - state: "grün" - - above: 35 - below: 85 - then: - - text_sensor.template.publish: - id: pm25_warn - state: "orange" - - above: 85 - then: - - text_sensor.template.publish: - id: pm25_warn - state: "rot" - # Analog photo diode voltage - - platform: adc - pin: 32 - name: "Spannung Photodiode" - attenuation: 12db - update_interval: 1s - internal: true - on_value_range: - - below: 0.25 - then: - light.turn_on: - id: co2_light - brightness: 30% - - above: 0.5 - then: - light.turn_on: - id: co2_light - brightness: 60% - -# IR Receiver, dumps all received values into serial -remote_receiver: - pin: - number: 23 - inverted: True - dump: all - -# IR Transmitter -remote_transmitter: - non_blocking: True - pin: GPIO22 - # Infrared remotes use a 50% carrier signal - carrier_duty_percent: 50% - -# Temporary test switches -switch: - - platform: template - name: Yamaha Power Button - turn_on_action: - - remote_transmitter.transmit_nec: - address: 0x7E81 - command: 0x54AB - - platform: template - name: Samsung Power Button - turn_on_action: - - remote_transmitter.transmit_samsung: - data: 0xE0E040BF - nbits: 32 diff --git a/template.yaml b/template.yaml index b20fa1e..81849d2 100644 --- a/template.yaml +++ b/template.yaml @@ -72,7 +72,8 @@ {% set waeschetrockner = states('sensor.waschetrockner_leistung') | float %} {% set waschmaschine = states('sensor.waschmaschine_leistung') | float %} {% set arcade = states('sensor.arcade_automat_leistung') | float %} - {{ (total + solar - raumduft - keller - musik - bett - heimkino_sz - deko - schreibtisch - serverraum - heimkino_wz - spieleschrank - kuehlschrank - kaffeemaschine - waeschetrockner - waschmaschine - arcade) | round(1) }} + {% set spuelmaschine = states('sensor.spulmaschine_leistung') | float %} + {{ (total + solar - raumduft - keller - musik - bett - heimkino_sz - deko - schreibtisch - serverraum - heimkino_wz - spieleschrank - kuehlschrank - kaffeemaschine - waeschetrockner - waschmaschine - arcade - spuelmaschine) | round(1) }} device_class: power state_class: measurement attributes: