Compare commits

...

7 Commits

25 changed files with 1368 additions and 62 deletions

View File

@@ -1 +1 @@
2026.1.2
2026.3.0

View File

@@ -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: 70
color_temp_kelvin: 2000
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: 70
color_temp_kelvin: 2000
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: 70
color_temp_kelvin: 2000
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

View File

@@ -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

View File

@@ -0,0 +1,35 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Home Assistant Setup**
Please indicate your version of HA and how it is installed.
Version:
Installation Type (put an X between the square brackets for your HA):
[] Home Assistant OS
[] Home Assistant Supervised
[] Home Assistant Container
[] Home Assistant Core
Hardware platform:
[] ARM
[] x86-64
Are you running in a container environment like Docker or Kubernetes?
[] Yes
[] No
If running in a container, how is your image built?
[] Official HA container image
[] Official HA container image with customizations
[] Custom built container image
**Describe the bug**
A clear and concise description of the bug

View File

@@ -0,0 +1,14 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "pip" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
day: "monday"
reviewers:
- "franc6"

View File

@@ -0,0 +1,10 @@
Fixes #
Description of change:
## Formatting, testing, and code coverage
Please note your pull request won't be accepted if you haven't properly formatted your source code, and ensured the unit tests are appropriate. Please note if you are not running on Windows, you can either run the scripts via a bash installation (like git-bash).
- [] formatstyle.sh reports no errors
- [] All unit tests pass (test.sh)
- [] Code coverage has not decreased (test.sh)

View File

@@ -0,0 +1,21 @@
name: Validate with hassfest and run HACS action
on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '0 0 * * *'
jobs:
validate:
runs-on: "ubuntu-latest"
steps:
- name: Checkout
uses: "actions/checkout@v4"
- name: Validate with hassfest
uses: "home-assistant/actions/hassfest@master"
- name: HACS Action
uses: "hacs/action@main"
with:
category: integration

View File

@@ -0,0 +1,46 @@
name: Lint
on:
pull_request:
branches: [releases]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
version: "0.4.20"
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version-file: "pyproject.toml"
- name: Install dependencies
run: |
uv sync --prerelease=allow --dev --extra tests
- name: Run isort --check
run: |
uv run --prerelease=allow isort --check custom_components/ics_calendar tests
- name: Run black --check
run: |
uv run --prerelease=allow black --check custom_components/ics_calendar tests
- name: Run flake8
run: |
uv run --prerelease=allow flake8
- name: Run pydocstyle
run: |
uv run --prerelease=allow pydocstyle -v custom_components/ics_calendar tests
- name: Run pylint
run: |
uv run --prerelease=allow pylint custom_components/ics_calendar

View File

@@ -0,0 +1,44 @@
name: Run Tests
on:
push:
branches: [releases]
pull_request:
branches: [releases]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Set timezone
run: |
sudo timedatectl set-timezone America/New_York
timedatectl
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
version: "0.4.20"
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version-file: "pyproject.toml"
- name: Install dependencies
run: |
uv sync --prerelease=allow --extra tests
- name: Run pytest
run: |
PYTHONDONTWRITEBYTECODE=1 uv run --prerelease=allow pytest tests/
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}

View File

@@ -88,6 +88,10 @@ TIMEOUT_OPTS_SCHEMA = vol.Schema(
{vol.Optional(CONF_CONNECTION_TIMEOUT, default=None): cv.positive_float}
)
FILTER_DOC_URL = (
"https://github.com/franc6/ics_calendar/blob/releases/README.md#filters"
)
def is_array_string(arr_str: str) -> bool:
"""Return true if arr_str starts with [ and ends with ]."""
@@ -231,6 +235,7 @@ class ICSCalendarConfigFlow(ConfigFlow, domain=DOMAIN):
data_schema=CALENDAR_OPTS_SCHEMA,
errors=errors,
last_step=False,
description_placeholders={"filterdoc": FILTER_DOC_URL},
)
async def async_step_connect_opts(

View File

@@ -1,6 +1,6 @@
"""Constants for ics_calendar platform."""
VERSION = "5.1.5"
VERSION = "5.1.7"
DOMAIN = "ics_calendar"
CONF_DEVICE_ID = "device_id"

View File

@@ -1,8 +1,6 @@
"""Provide GetParser class."""
from .icalendarparser import ICalendarParser
from .parsers.parser_ics import ParserICS
from .parsers.parser_rie import ParserRIE
class GetParser: # pylint: disable=R0903
@@ -20,8 +18,16 @@ class GetParser: # pylint: disable=R0903
# if parser_cls is not None:
# return parser_cls(*args)
if parser == "rie":
from .parsers.parser_rie import ( # pylint: disable=C0415
ParserRIE,
)
return ParserRIE(*args)
if parser == "ics":
from .parsers.parser_ics import ( # pylint: disable=C0415
ParserICS,
)
return ParserICS(*args)
return None

View File

@@ -8,6 +8,6 @@
"integration_type": "service",
"iot_class": "cloud_polling",
"issue_tracker": "https://github.com/franc6/ics_calendar/issues",
"requirements": ["icalendar~=6.1","python-dateutil>=2.9.0.post0","pytz>=2024.1","recurring_ical_events~=3.5,>=3.5.2","ics==0.7.2","arrow","httpx_auth>=0.22.0,<=0.23.1"],
"version": "5.1.5"
"requirements": ["icalendar~=6.1","python-dateutil>=2.9.0.post0","pytz>=2024.1","recurring_ical_events~=3.5,>=3.5.2","ics==0.7.2","arrow","httpx_auth>=0.22.0,<=0.23.1","tatsu>=4.2.6,<5.8.0"],
"version": "5.1.7"
}

View File

@@ -76,7 +76,12 @@ class ParserICS(ICalendarParser):
# summary = event.summary
# elif hasattr(event, "name"):
summary = event.name
rrule = None
for extra in event.extra:
if extra.name == "RRULE":
rrule = extra.value
calendar_event: ParserEvent = ParserEvent(
uid=event.uid,
summary=summary,
start=ParserICS.get_date(
event.begin, event.all_day, offset_hours
@@ -86,6 +91,14 @@ class ParserICS(ICalendarParser):
),
location=event.location,
description=event.description,
rrule=rrule,
recurrence_id=(
ParserICS.get_date(
event.begin, event.all_day, offset_hours
)
if rrule
else None
),
)
if self._filter.filter_event(calendar_event):
event_list.append(calendar_event)
@@ -145,7 +158,12 @@ class ParserICS(ICalendarParser):
# summary = temp_event.summary
# elif hasattr(event, "name"):
summary = temp_event.name
rrule = None
for extra in temp_event.extra:
if extra.name == "RRULE":
rrule = extra.value
return ParserEvent(
uid=temp_event.uid,
summary=summary,
start=ParserICS.get_date(
temp_event.begin, temp_event.all_day, offset_hours
@@ -155,6 +173,14 @@ class ParserICS(ICalendarParser):
),
location=temp_event.location,
description=temp_event.description,
rrule=rrule,
recurrence_id=(
ParserICS.get_date(
temp_event.begin, temp_event.all_day, offset_hours
)
if rrule
else None
),
)
@staticmethod

View File

@@ -75,11 +75,16 @@ class ParserRIE(ICalendarParser):
continue
calendar_event: ParserEvent = ParserEvent(
uid=event.get("UID"),
summary=event.get("SUMMARY"),
start=start,
end=end,
location=event.get("LOCATION"),
description=event.get("DESCRIPTION"),
# rrule=event.get("RRULE"),
recurrence_id=ParserRIE.get_date(
event.get("RECURRENCE-ID").dt
),
)
if self._filter.filter_event(calendar_event):
event_list.append(calendar_event)
@@ -141,11 +146,16 @@ class ParserRIE(ICalendarParser):
return None
return ParserEvent(
uid=temp_event.get("UID"),
summary=temp_event.get("SUMMARY"),
start=temp_start,
end=temp_end,
location=temp_event.get("LOCATION"),
description=temp_event.get("DESCRIPTION"),
# rrule=temp_event.get("RRULE"),
recurrence_id=ParserRIE.get_date(
temp_event.get("RECURRENCE-ID").dt
),
)
@staticmethod

View File

@@ -68,8 +68,8 @@
"empty_url": "The url must not be empty.",
"download_interval_too_small": "The download interval must be at least 15.",
"exclude_include_cannot_be_the_same": "The exclude and include strings must not be the same",
"exclude_must_be_array": "The exclude option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information.",
"include_must_be_array": "The include option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information."
"exclude_must_be_array": "The exclude option must be an array of strings or regular expressions. See {filterdoc} for more information.",
"include_must_be_array": "The include option must be an array of strings or regular expressions. See {filterdoc} for more information."
},
"abort": {
}

View File

@@ -67,8 +67,8 @@
"empty_url": "Die URL darf nicht leer sein.",
"download_interval_too_small": "Das Download-Intervall muss mindestens 15 betragen.",
"exclude_include_cannot_be_the_same": "Die Ausschluss- und Einschluss-Strings dürfen nicht identisch sein.",
"exclude_must_be_array": "Die \"auszuschließenden Ereignisse\" müssen ein Array von Zeichenfolgen oder regulären Ausdrücken sein. Weitere Informationen finden Sie unter https://github.com/franc6/ics_calendar/blob/releases/README.md#filters.",
"include_must_be_array": "Die \"einzuschließenden Ereignisse\" müssen ein Array von Zeichenfolgen oder regulären Ausdrücken sein. Weitere Informationen finden Sie unter https://github.com/franc6/ics_calendar/blob/releases/README.md#filters."
"exclude_must_be_array": "Die \"auszuschließenden Ereignisse\" müssen ein Array von Zeichenfolgen oder regulären Ausdrücken sein. Weitere Informationen finden Sie unter {filterdoc}.",
"include_must_be_array": "Die \"einzuschließenden Ereignisse\" müssen ein Array von Zeichenfolgen oder regulären Ausdrücken sein. Weitere Informationen finden Sie unter {filterdoc}."
},
"abort": {
}

View File

@@ -68,8 +68,8 @@
"empty_url": "The url must not be empty.",
"download_interval_too_small": "The download interval must be at least 15.",
"exclude_include_cannot_be_the_same": "The exclude and include strings must not be the same",
"exclude_must_be_array": "The exclude option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information.",
"include_must_be_array": "The include option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information."
"exclude_must_be_array": "The exclude option must be an array of strings or regular expressions. See {filterdoc} for more information.",
"include_must_be_array": "The include option must be an array of strings or regular expressions. See {filterdoc} for more information."
},
"abort": {
}

View File

@@ -68,8 +68,8 @@
"empty_url": "La url no debe estar vacía.",
"download_interval_too_small": "El intervalo de descarga debe ser de al menos 15.",
"exclude_include_cannot_be_the_same": "Las cadenas de exclusión e inclusión no deben ser las mismas",
"exclude_must_be_array": "La opción de exclusión debe ser una matriz de cadenas o expresiones regulares. Consulte https://github.com/franc6/ics_calendar/blob/releases/README.md#filters para obtener más información.",
"include_must_be_array": "La opción de inclusión debe ser un array de cadenas o expresiones regulares. Consulte https://github.com/franc6/ics_calendar/blob/releases/README.md#filters para obtener más información."
"exclude_must_be_array": "La opción de exclusión debe ser una matriz de cadenas o expresiones regulares. Consulte {filterdoc} para obtener más información.",
"include_must_be_array": "La opción de inclusión debe ser un array de cadenas o expresiones regulares. Consulte {filterdoc} para obtener más información."
},
"abort": {
}

View File

@@ -67,8 +67,8 @@
"empty_url": "L'URL du calendrier doit être renseignée.",
"download_interval_too_small": "L'intervalle de téléchargement ne peut pas être inférieur à 15 minutes.",
"exclude_include_cannot_be_the_same": "Les valeurs d'exclusion et d'inclusion ne peuvent pas être identiques.",
"exclude_must_be_array": "The exclude option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information.",
"include_must_be_array": "The include option must be an array of strings or regular expressions. See https://github.com/franc6/ics_calendar/blob/releases/README.md#filters for more information."
"exclude_must_be_array": "L'option d'exclusion doit être un tableau de chaînes ou d'expressions régulières. Voir {filterdoc} pour plus d'informations.",
"include_must_be_array": "L'option d'inclusion doit être un tableau de chaînes ou d'expressions régulières. Voir {filterdoc} pour plus d'informations."
},
"abort": {
}

View File

@@ -68,8 +68,8 @@
"empty_url": "A URL não pode estar vazia.",
"download_interval_too_small": "O intervalo de download deve ser de pelo menos 15.",
"exclude_include_cannot_be_the_same": "As strings de exclusão e inclusão não podem ser as mesmas.",
"exclude_must_be_array": "A opção de exclusão deve ser um array de strings ou expressões regulares. Veja https://github.com/franc6/ics_calendar/blob/releases/README.md#filters para mais informações.",
"include_must_be_array": "A opção de inclusão deve ser um array de strings ou expressões regulares. Veja https://github.com/franc6/ics_calendar/blob/releases/README.md#filters para mais informações."
"exclude_must_be_array": "A opção de exclusão deve ser um array de strings ou expressões regulares. Veja {filterdoc} para mais informações.",
"include_must_be_array": "A opção de inclusão deve ser um array de strings ou expressões regulares. Veja {filterdoc} para mais informações."
},
"abort": {
}

View File

@@ -136,19 +136,19 @@ sensor:
id: co2_livingroom
- platform: homeassistant
entity_id: sensor.sleepingroom_feinstaub_pm_2_5_m
entity_id: sensor.alpstuga_air_quality_monitor_pm25_2
id: pm25_sleepingroom
- platform: homeassistant
entity_id: sensor.schlafzimmer_temperatur
entity_id: sensor.alpstuga_air_quality_monitor_temperatur_2
id: temp_sleepingroom
- platform: homeassistant
entity_id: sensor.schlafzimmer_luftfeuchtigkeit
entity_id: sensor.alpstuga_air_quality_monitor_luftfeuchtigkeit_2
id: humid_sleepingroom
- platform: homeassistant
entity_id: sensor.schlafzimmer_co2
entity_id: sensor.alpstuga_air_quality_monitor_kohlendioxid_2
id: co2_sleepingroom
- platform: homeassistant

View File

@@ -2419,3 +2419,824 @@
entity_only: true
select.wohnzimmer_hinten_color_palette:
entity_only: true
- id: '1771105514417'
name: Lavalampe
entities:
light.wohnzimmer_hinten:
effect_list:
- Solid
- Blink
- Breathe
- Wipe
- Wipe Random
- Random Colors
- Sweep
- Dynamic
- Colorloop
- Rainbow
- Scan
- Scan Dual
- Fade
- Theater
- Theater Rainbow
- Running
- Saw
- Twinkle
- Dissolve
- Dissolve Rnd
- Sparkle
- Sparkle Dark
- Sparkle+
- Strobe
- Strobe Rainbow
- Strobe Mega
- Blink Rainbow
- Android
- Chase
- Chase Random
- Chase Rainbow
- Chase Flash
- Chase Flash Rnd
- Rainbow Runner
- Colorful
- Traffic Light
- Sweep Random
- Chase 2
- Aurora
- Stream
- Scanner
- Lighthouse
- Fireworks
- Rain
- Tetrix
- Fire Flicker
- Gradient
- Loading
- Rolling Balls
- Fairy
- Two Dots
- Fairytwinkle
- Running Dual
- RSVD
- Chase 3
- Tri Wipe
- Tri Fade
- Lightning
- ICU
- Multi Comet
- Scanner Dual
- Stream 2
- Oscillate
- Pride 2015
- Juggle
- Palette
- Fire 2012
- Colorwaves
- Bpm
- Fill Noise
- Noise 1
- Noise 2
- Noise 3
- Noise 4
- Colortwinkles
- Lake
- Meteor
- Meteor Smooth
- Railway
- Ripple
- Twinklefox
- Twinklecat
- Halloween Eyes
- Solid Pattern
- Solid Pattern Tri
- Spots
- Spots Fade
- Glitter
- Candle
- Fireworks Starburst
- Fireworks 1D
- Bouncing Balls
- Sinelon
- Sinelon Dual
- Sinelon Rainbow
- Popcorn
- Drip
- Plasma
- Percent
- Ripple Rainbow
- Heartbeat
- Pacifica
- Candle Multi
- Solid Glitter
- Sunrise
- Phased
- Twinkleup
- Noise Pal
- Sine
- Phased Noise
- Flow
- Chunchun
- Dancing Shadows
- Washing Machine
- Rotozoomer
- Blends
- TV Simulator
- Dynamic Smooth
- Spaceships
- Crazy Bees
- Ghost Rider
- Blobs
- Scrolling Text
- Drift Rose
- Distortion Waves
- Soap
- Octopus
- Waving Cell
- Pixels
- Pixelwave
- Juggles
- Matripix
- Gravimeter
- Plasmoid
- Puddles
- Midnoise
- Noisemeter
- Freqwave
- Freqmatrix
- GEQ
- Waterfall
- Freqpixels
- RSVD
- Noisefire
- Puddlepeak
- Noisemove
- Noise2D
- Perlin Move
- Ripple Peak
- Firenoise
- Squared Swirl
- RSVD
- DNA
- Matrix
- Metaballs
- Freqmap
- Gravcenter
- Gravcentric
- Gravfreq
- DJ Light
- Funky Plank
- RSVD
- Pulser
- Blurz
- Drift
- Waverly
- Sun Radiation
- Colored Bursts
- Julia
- RSVD
- RSVD
- RSVD
- Game Of Life
- Tartan
- Polar Lights
- Swirl
- Lissajous
- Frizzles
- Plasma Ball
- Flow Stripe
- Hiphotic
- Sindots
- DNA Spiral
- Black Hole
- Wavesins
- Rocktaves
- Akemi
supported_color_modes:
- rgbw
effect: Plasma
color_mode: rgbw
brightness: 51
hs_color:
- 105.829
- 78.039
rgb_color:
- 103
- 255
- 56
xy_color:
- 0.234
- 0.662
rgbw_color:
- 103
- 255
- 56
- 0
friendly_name: Wohnzimmer hinten
supported_features: 36
state: 'on'
select.wohnzimmer_hinten_preset:
options: []
friendly_name: Wohnzimmer hinten Voreinstellung
state: unavailable
select.wohnzimmer_hinten_playlist:
options: []
friendly_name: Wohnzimmer hinten Wiedergabeliste
state: unavailable
light.wohnzimmer_vorne:
effect_list:
- Solid
- Blink
- Breathe
- Wipe
- Wipe Random
- Random Colors
- Sweep
- Dynamic
- Colorloop
- Rainbow
- Scan
- Scan Dual
- Fade
- Theater
- Theater Rainbow
- Running
- Saw
- Twinkle
- Dissolve
- Dissolve Rnd
- Sparkle
- Sparkle Dark
- Sparkle+
- Strobe
- Strobe Rainbow
- Strobe Mega
- Blink Rainbow
- Android
- Chase
- Chase Random
- Chase Rainbow
- Chase Flash
- Chase Flash Rnd
- Rainbow Runner
- Colorful
- Traffic Light
- Sweep Random
- Chase 2
- Aurora
- Stream
- Scanner
- Lighthouse
- Fireworks
- Rain
- Tetrix
- Fire Flicker
- Gradient
- Loading
- Rolling Balls
- Fairy
- Two Dots
- Fairytwinkle
- Running Dual
- RSVD
- Chase 3
- Tri Wipe
- Tri Fade
- Lightning
- ICU
- Multi Comet
- Scanner Dual
- Stream 2
- Oscillate
- Pride 2015
- Juggle
- Palette
- Fire 2012
- Colorwaves
- Bpm
- Fill Noise
- Noise 1
- Noise 2
- Noise 3
- Noise 4
- Colortwinkles
- Lake
- Meteor
- Meteor Smooth
- Railway
- Ripple
- Twinklefox
- Twinklecat
- Halloween Eyes
- Solid Pattern
- Solid Pattern Tri
- Spots
- Spots Fade
- Glitter
- Candle
- Fireworks Starburst
- Fireworks 1D
- Bouncing Balls
- Sinelon
- Sinelon Dual
- Sinelon Rainbow
- Popcorn
- Drip
- Plasma
- Percent
- Ripple Rainbow
- Heartbeat
- Pacifica
- Candle Multi
- Solid Glitter
- Sunrise
- Phased
- Twinkleup
- Noise Pal
- Sine
- Phased Noise
- Flow
- Chunchun
- Dancing Shadows
- Washing Machine
- Rotozoomer
- Blends
- TV Simulator
- Dynamic Smooth
- Spaceships
- Crazy Bees
- Ghost Rider
- Blobs
- Scrolling Text
- Drift Rose
- Distortion Waves
- Soap
- Octopus
- Waving Cell
- Pixels
- Pixelwave
- Juggles
- Matripix
- Gravimeter
- Plasmoid
- Puddles
- Midnoise
- Noisemeter
- Freqwave
- Freqmatrix
- GEQ
- Waterfall
- Freqpixels
- RSVD
- Noisefire
- Puddlepeak
- Noisemove
- Noise2D
- Perlin Move
- Ripple Peak
- Firenoise
- Squared Swirl
- RSVD
- DNA
- Matrix
- Metaballs
- Freqmap
- Gravcenter
- Gravcentric
- Gravfreq
- DJ Light
- Funky Plank
- RSVD
- Pulser
- Blurz
- Drift
- Waverly
- Sun Radiation
- Colored Bursts
- Julia
- RSVD
- RSVD
- RSVD
- Game Of Life
- Tartan
- Polar Lights
- Swirl
- Lissajous
- Frizzles
- Plasma Ball
- Flow Stripe
- Hiphotic
- Sindots
- DNA Spiral
- Black Hole
- Wavesins
- Rocktaves
- Akemi
supported_color_modes:
- rgbw
effect: Plasma
color_mode: rgbw
brightness: 51
hs_color:
- 105.829
- 78.039
rgb_color:
- 103
- 255
- 56
xy_color:
- 0.234
- 0.662
rgbw_color:
- 103
- 255
- 56
- 0
friendly_name: Wohnzimmer vorne
supported_features: 36
state: 'on'
select.wohnzimmer_vorne_preset:
options: []
friendly_name: Wohnzimmer vorne Voreinstellung
state: unavailable
select.wohnzimmer_vorne_playlist:
options: []
friendly_name: Wohnzimmer vorne Wiedergabeliste
state: unavailable
light.kajplats_e14_cws_globe_806lm:
min_color_temp_kelvin: 1801
max_color_temp_kelvin: 6535
min_mireds: 153
max_mireds: 555
supported_color_modes:
- color_temp
- hs
- xy
color_mode: hs
brightness: 192
color_temp_kelvin:
color_temp:
hs_color:
- 65.197
- 100
rgb_color:
- 233
- 255
- 0
xy_color:
- 0.417
- 0.539
friendly_name: Högvind
supported_features: 32
state: 'on'
select.all_wled_effects:
restored: true
options:
- Solid
- Blink
- Breathe
- Wipe
- Wipe Random
- Random Colors
- Sweep
- Dynamic
- Colorloop
- Rainbow
- Scan
- Scan Dual
- Fade
- Theater
- Theater Rainbow
- Running
- Saw
- Twinkle
- Dissolve
- Dissolve Rnd
- Sparkle
- Sparkle Dark
- Sparkle+
- Strobe
- Strobe Rainbow
- Strobe Mega
- Blink Rainbow
- Android
- Chase
- Chase Random
- Chase Rainbow
- Chase Flash
- Chase Flash Rnd
- Rainbow Runner
- Colorful
- Traffic Light
- Sweep Random
- Chase 2
- Aurora
- Stream
- Scanner
- Lighthouse
- Fireworks
- Rain
- Tetrix
- Fire Flicker
- Gradient
- Loading
- Rolling Balls
- Fairy
- Two Dots
- Fairytwinkle
- Running Dual
- RSVD
- Chase 3
- Tri Wipe
- Tri Fade
- Lightning
- ICU
- Multi Comet
- Scanner Dual
- Stream 2
- Oscillate
- Pride 2015
- Juggle
- Palette
- Fire 2012
- Colorwaves
- Bpm
- Fill Noise
- Noise 1
- Noise 2
- Noise 3
- Noise 4
- Colortwinkles
- Lake
- Meteor
- Meteor Smooth
- Railway
- Ripple
- Twinklefox
- Twinklecat
- Halloween Eyes
- Solid Pattern
- Solid Pattern Tri
- Spots
- Spots Fade
- Glitter
- Candle
- Fireworks Starburst
- Fireworks 1D
- Bouncing Balls
- Sinelon
- Sinelon Dual
- Sinelon Rainbow
- Popcorn
- Drip
- Plasma
- Percent
- Ripple Rainbow
- Heartbeat
- Pacifica
- Candle Multi
- Solid Glitter
- Sunrise
- Phased
- Twinkleup
- Noise Pal
- Sine
- Phased Noise
- Flow
- Chunchun
- Dancing Shadows
- Washing Machine
- RSVD
- Blends
- TV Simulator
- Dynamic Smooth
- Spaceships
- Crazy Bees
- Ghost Rider
- Blobs
- Scrolling Text
- Drift Rose
- Distortion Waves
- Soap
- Octopus
- Waving Cell
- Pixels
- Pixelwave
- Juggles
- Matripix
- Gravimeter
- Plasmoid
- Puddles
- Midnoise
- Noisemeter
- Freqwave
- Freqmatrix
- GEQ
- Waterfall
- Freqpixels
- RSVD
- Noisefire
- Puddlepeak
- Noisemove
- Noise2D
- Perlin Move
- Ripple Peak
- Firenoise
- Squared Swirl
- RSVD
- DNA
- Matrix
- Metaballs
- Freqmap
- Gravcenter
- Gravcentric
- Gravfreq
- DJ Light
- Funky Plank
- RSVD
- Pulser
- Blurz
- Drift
- Waverly
- Sun Radiation
- Colored Bursts
- Julia
- RSVD
- RSVD
- RSVD
- Game Of Life
- Tartan
- Polar Lights
- Swirl
- Lissajous
- Frizzles
- Plasma Ball
- Flow Stripe
- Hiphotic
- Sindots
- DNA Spiral
- Black Hole
- Wavesins
- Rocktaves
- Akemi
icon: mdi:firework
friendly_name: Wohnzimmer Effekt
supported_features: 0
state: unavailable
select.wohnzimmer_hinten_color_palette:
options:
- '* Color 1'
- '* Color Gradient'
- '* Colors 1&2'
- '* Colors Only'
- '* Random Cycle'
- Analogous
- April Night
- Aqua Flash
- Atlantica
- Aurora
- Aurora 2
- Autumn
- Beach
- Beech
- Blink Red
- Breeze
- C9
- C9 2
- C9 New
- Candy
- Candy2
- Cloud
- Cyane
- Default
- Departure
- Drywet
- Fairy Reaf
- Fire
- Forest
- Grintage
- Hult
- Hult 64
- Icefire
- Jul
- Landscape
- Lava
- Light Pink
- Lite Light
- Magenta
- Magred
- Ocean
- Orange & Teal
- Orangery
- Party
- Pastel
- Pink Candy
- Rainbow
- Rainbow Bands
- Red & Blue
- Red Flash
- Red Reaf
- Red Shift
- Red Tide
- Retro Clown
- Rewhi
- Rivendell
- Sakura
- Semi Blue
- Sherbet
- Splash
- Sunset
- Sunset 2
- Temperature
- Tertiary
- Tiamat
- Toxy Reaf
- Vintage
- Yelblu
- Yelblu Hot
- Yellowout
- Yelmag
friendly_name: Wohnzimmer hinten Farbpalette
state: '* Colors 1&2'
select.wohnzimmer_vorne_color_palette:
options:
- '* Color 1'
- '* Color Gradient'
- '* Colors 1&2'
- '* Colors Only'
- '* Random Cycle'
- Analogous
- April Night
- Aqua Flash
- Atlantica
- Aurora
- Aurora 2
- Autumn
- Beach
- Beech
- Blink Red
- Breeze
- C9
- C9 2
- C9 New
- Candy
- Candy2
- Cloud
- Cyane
- Default
- Departure
- Drywet
- Fairy Reaf
- Fire
- Forest
- Grintage
- Hult
- Hult 64
- Icefire
- Jul
- Landscape
- Lava
- Light Pink
- Lite Light
- Magenta
- Magred
- Ocean
- Orange & Teal
- Orangery
- Party
- Pastel
- Pink Candy
- Rainbow
- Rainbow Bands
- Red & Blue
- Red Flash
- Red Reaf
- Red Shift
- Red Tide
- Retro Clown
- Rewhi
- Rivendell
- Sakura
- Semi Blue
- Sherbet
- Splash
- Sunset
- Sunset 2
- Temperature
- Tertiary
- Tiamat
- Toxy Reaf
- Vintage
- Yelblu
- Yelblu Hot
- Yellowout
- Yelmag
friendly_name: Wohnzimmer vorne Farbpalette
state: '* Colors 1&2'
metadata:
select.all_wled_effects:
entity_only: true
select.wohnzimmer_hinten_color_palette:
entity_only: true
select.wohnzimmer_vorne_color_palette:
entity_only: true
icon: mdi:lava-lamp

View File

@@ -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: