Compare commits
7 Commits
aea16e59c4
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 67b2c2edde | |||
| db9b8a73d3 | |||
| 093be6f2d2 | |||
| 3d5693ceaa | |||
| 247c96df5d | |||
| 13cdc7ee67 | |||
| 24eecc7c97 |
@@ -1 +1 @@
|
|||||||
2025.11.2
|
2025.12.1
|
||||||
@@ -203,7 +203,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|||||||
|
|
||||||
hass.data.setdefault(DOMAIN, {})
|
hass.data.setdefault(DOMAIN, {})
|
||||||
hass.data[DOMAIN][entry.entry_id] = full_data
|
hass.data[DOMAIN][entry.entry_id] = full_data
|
||||||
await hass.config_entries.async_forward_entry_setups(entry, ["calendar"])
|
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -286,18 +286,15 @@ class ICSCalendarData: # pylint: disable=R0902
|
|||||||
minutes=device_data[CONF_DOWNLOAD_INTERVAL]
|
minutes=device_data[CONF_DOWNLOAD_INTERVAL]
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
)
|
).headers(
|
||||||
|
|
||||||
self._calendar_data.set_headers(
|
|
||||||
device_data[CONF_USERNAME],
|
device_data[CONF_USERNAME],
|
||||||
device_data[CONF_PASSWORD],
|
device_data[CONF_PASSWORD],
|
||||||
device_data[CONF_USER_AGENT],
|
device_data[CONF_USER_AGENT],
|
||||||
device_data[CONF_ACCEPT_HEADER],
|
device_data[CONF_ACCEPT_HEADER],
|
||||||
)
|
)
|
||||||
|
|
||||||
if device_data.get(CONF_SET_TIMEOUT):
|
if device_data.get(CONF_SET_TIMEOUT):
|
||||||
self._calendar_data.set_timeout(
|
self._calendar_data.timeout(
|
||||||
device_data[CONF_CONNECTION_TIMEOUT]
|
device_data.get(CONF_CONNECTION_TIMEOUT)
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_get_events(
|
async def async_get_events(
|
||||||
@@ -313,7 +310,9 @@ class ICSCalendarData: # pylint: disable=R0902
|
|||||||
event_list: list[ParserEvent] = []
|
event_list: list[ParserEvent] = []
|
||||||
if await self._calendar_data.download_calendar():
|
if await self._calendar_data.download_calendar():
|
||||||
_LOGGER.debug("%s: Setting calendar content", self.name)
|
_LOGGER.debug("%s: Setting calendar content", self.name)
|
||||||
self.parser.set_content(self._calendar_data.get())
|
await self._hass.async_add_executor_job(
|
||||||
|
lambda: self.parser.set_content(self._calendar_data.get())
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
event_list = self.parser.get_event_list(
|
event_list = self.parser.get_event_list(
|
||||||
start=start_date,
|
start=start_date,
|
||||||
@@ -345,7 +344,9 @@ class ICSCalendarData: # pylint: disable=R0902
|
|||||||
parser_event: ParserEvent | None = None
|
parser_event: ParserEvent | None = None
|
||||||
if await self._calendar_data.download_calendar():
|
if await self._calendar_data.download_calendar():
|
||||||
_LOGGER.debug("%s: Setting calendar content", self.name)
|
_LOGGER.debug("%s: Setting calendar content", self.name)
|
||||||
self.parser.set_content(self._calendar_data.get())
|
await self._hass.async_add_executor_job(
|
||||||
|
lambda: self.parser.set_content(self._calendar_data.get())
|
||||||
|
)
|
||||||
try:
|
try:
|
||||||
parser_event: ParserEvent | None = self.parser.get_current_event(
|
parser_event: ParserEvent | None = self.parser.get_current_event(
|
||||||
include_all_day=self.include_all_day,
|
include_all_day=self.include_all_day,
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ class CalendarData: # pylint: disable=R0902
|
|||||||
"""
|
"""
|
||||||
return self._calendar_data
|
return self._calendar_data
|
||||||
|
|
||||||
def set_headers(
|
def headers(
|
||||||
self,
|
self,
|
||||||
user_name: str,
|
user_name: str,
|
||||||
password: str,
|
password: str,
|
||||||
@@ -124,14 +124,17 @@ class CalendarData: # pylint: disable=R0902
|
|||||||
self._headers.append(("User-agent", user_agent))
|
self._headers.append(("User-agent", user_agent))
|
||||||
if accept_header != "":
|
if accept_header != "":
|
||||||
self._headers.append(("Accept", accept_header))
|
self._headers.append(("Accept", accept_header))
|
||||||
|
return self
|
||||||
|
|
||||||
def set_timeout(self, connection_timeout: float):
|
def timeout(self, connection_timeout: float | None):
|
||||||
"""Set the connection timeout.
|
"""Set the connection timeout.
|
||||||
|
|
||||||
:param connection_timeout: The timeout value in seconds.
|
:param connection_timeout: The timeout value in seconds.
|
||||||
:type connection_timeout: float
|
:type connection_timeout: float
|
||||||
"""
|
"""
|
||||||
self.connection_timeout = connection_timeout
|
if connection_timeout:
|
||||||
|
self.connection_timeout = connection_timeout
|
||||||
|
return self
|
||||||
|
|
||||||
def _decode_data(self, data):
|
def _decode_data(self, data):
|
||||||
return data.replace("\0", "")
|
return data.replace("\0", "")
|
||||||
@@ -202,7 +205,6 @@ class CalendarData: # pylint: disable=R0902
|
|||||||
|
|
||||||
def _get_month_year(self, url: str, month: int, year: int) -> int:
|
def _get_month_year(self, url: str, month: int, year: int) -> int:
|
||||||
(month, url) = self._get_year_as_months(url, month)
|
(month, url) = self._get_year_as_months(url, month)
|
||||||
print(f"month: {month}\n")
|
|
||||||
month_match = re.search("\\{month([-+])([0-9]+)\\}", url)
|
month_match = re.search("\\{month([-+])([0-9]+)\\}", url)
|
||||||
if month_match:
|
if month_match:
|
||||||
if month_match.group(1) == "-":
|
if month_match.group(1) == "-":
|
||||||
|
|||||||
@@ -286,14 +286,14 @@ class ICSCalendarConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
errors = {}
|
errors = {}
|
||||||
if user_input is not None:
|
if user_input is not None:
|
||||||
|
|
||||||
if not errors:
|
# if not errors:
|
||||||
self.data.update(user_input)
|
self.data.update(user_input)
|
||||||
if user_input.get(CONF_SET_TIMEOUT, False):
|
if user_input.get(CONF_SET_TIMEOUT, False):
|
||||||
return await self.async_step_timeout_opts()
|
return await self.async_step_timeout_opts()
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(
|
||||||
title=self.data[CONF_NAME],
|
title=self.data[CONF_NAME],
|
||||||
data=self.data,
|
data=self.data,
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="adv_connect_opts",
|
step_id="adv_connect_opts",
|
||||||
@@ -308,12 +308,12 @@ class ICSCalendarConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
errors = {}
|
errors = {}
|
||||||
if user_input is not None:
|
if user_input is not None:
|
||||||
|
|
||||||
if not errors:
|
# if not errors:
|
||||||
self.data.update(user_input)
|
self.data.update(user_input)
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(
|
||||||
title=self.data[CONF_NAME],
|
title=self.data[CONF_NAME],
|
||||||
data=self.data,
|
data=self.data,
|
||||||
)
|
)
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="timeout_opts",
|
step_id="timeout_opts",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"""Constants for ics_calendar platform."""
|
"""Constants for ics_calendar platform."""
|
||||||
|
|
||||||
VERSION = "5.1.3"
|
VERSION = "5.1.5"
|
||||||
DOMAIN = "ics_calendar"
|
DOMAIN = "ics_calendar"
|
||||||
|
|
||||||
CONF_DEVICE_ID = "device_id"
|
CONF_DEVICE_ID = "device_id"
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"issue_tracker": "https://github.com/franc6/ics_calendar/issues",
|
"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"],
|
"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.3"
|
"version": "5.1.5"
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -44,6 +44,7 @@ wifi:
|
|||||||
use_address: atorch-dc-load.home
|
use_address: atorch-dc-load.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ wifi:
|
|||||||
use_address: bathroom.home
|
use_address: bathroom.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ wifi:
|
|||||||
use_address: epaperframe.home
|
use_address: epaperframe.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ wifi:
|
|||||||
use_address: ${name}.home
|
use_address: ${name}.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ wifi:
|
|||||||
#use_address: ${name}.home
|
#use_address: ${name}.home
|
||||||
#power_save_mode: high
|
#power_save_mode: high
|
||||||
#fast_connect: on
|
#fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -54,8 +54,12 @@ i2c:
|
|||||||
sda: GPIO26
|
sda: GPIO26
|
||||||
scl: GPIO27
|
scl: GPIO27
|
||||||
|
|
||||||
|
psram:
|
||||||
|
speed: 80MHz
|
||||||
|
|
||||||
# Camera
|
# Camera
|
||||||
esp32_camera:
|
esp32_camera:
|
||||||
|
frame_buffer_location: PSRAM
|
||||||
name: ${friendly_name}
|
name: ${friendly_name}
|
||||||
external_clock:
|
external_clock:
|
||||||
pin: GPIO0
|
pin: GPIO0
|
||||||
|
|||||||
@@ -41,16 +41,25 @@ api:
|
|||||||
ota:
|
ota:
|
||||||
platform: esphome
|
platform: esphome
|
||||||
password: !secret ota
|
password: !secret ota
|
||||||
|
|
||||||
|
# Initialize I²C
|
||||||
|
i2c:
|
||||||
|
- id: bus_c
|
||||||
|
sda: GPIO26
|
||||||
|
scl: GPIO27
|
||||||
|
|
||||||
|
psram:
|
||||||
|
speed: 80MHz
|
||||||
|
|
||||||
# Camera
|
# Camera
|
||||||
esp32_camera:
|
esp32_camera:
|
||||||
|
frame_buffer_location: PSRAM
|
||||||
name: ${friendly_name}
|
name: ${friendly_name}
|
||||||
external_clock:
|
external_clock:
|
||||||
pin: GPIO0
|
pin: GPIO0
|
||||||
frequency: 20MHz
|
frequency: 20MHz
|
||||||
i2c_pins:
|
i2c_id:
|
||||||
sda: GPIO26
|
bus_c
|
||||||
scl: GPIO27
|
|
||||||
data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
|
data_pins: [GPIO5, GPIO18, GPIO19, GPIO21, GPIO36, GPIO39, GPIO34, GPIO35]
|
||||||
vsync_pin: GPIO25
|
vsync_pin: GPIO25
|
||||||
href_pin: GPIO23
|
href_pin: GPIO23
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ wifi:
|
|||||||
use_address: ${name}.home
|
use_address: ${name}.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
@@ -236,7 +237,7 @@ sensor:
|
|||||||
- platform: adc
|
- platform: adc
|
||||||
pin: 34
|
pin: 34
|
||||||
name: "Spannung Photodiode"
|
name: "Spannung Photodiode"
|
||||||
attenuation: 11db
|
attenuation: 12db
|
||||||
update_interval: 1s
|
update_interval: 1s
|
||||||
internal: true
|
internal: true
|
||||||
on_value_range:
|
on_value_range:
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ wifi:
|
|||||||
use_address: ${name}.home
|
use_address: ${name}.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
ssid: "Raspiaudio Fallback Hotspot"
|
ssid: "Raspiaudio Fallback Hotspot"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ wifi:
|
|||||||
use_address: ${name}.home
|
use_address: ${name}.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
ssid: "Raspiaudio Fallback Hotspot"
|
ssid: "Raspiaudio Fallback Hotspot"
|
||||||
@@ -46,7 +47,7 @@ esphome:
|
|||||||
board_build.arduino.memory_type: qio_opi
|
board_build.arduino.memory_type: qio_opi
|
||||||
project:
|
project:
|
||||||
name: raspiaudio.voice-assistant
|
name: raspiaudio.voice-assistant
|
||||||
version: "2025.2.6"
|
version: "2025.3.1"
|
||||||
on_boot:
|
on_boot:
|
||||||
priority: -100.0
|
priority: -100.0
|
||||||
then:
|
then:
|
||||||
@@ -67,6 +68,7 @@ esp32:
|
|||||||
micro_wake_word:
|
micro_wake_word:
|
||||||
id: mww
|
id: mww
|
||||||
models:
|
models:
|
||||||
|
- model: okay_nabu
|
||||||
- model: https://github.com/kahrendt/microWakeWord/releases/download/okay_nabu_20241226.3/okay_nabu.json
|
- model: https://github.com/kahrendt/microWakeWord/releases/download/okay_nabu_20241226.3/okay_nabu.json
|
||||||
# - model: hey_jarvis
|
# - model: hey_jarvis
|
||||||
# - model: hey_mycroft
|
# - model: hey_mycroft
|
||||||
@@ -164,16 +166,20 @@ sensor:
|
|||||||
update_interval: 15s
|
update_interval: 15s
|
||||||
attenuation: auto
|
attenuation: auto
|
||||||
filters:
|
filters:
|
||||||
- multiply: 2 # https://forum.raspiaudio.com/t/esp-muse-luxe-bluetooth-speaker/294/12
|
- multiply: 2
|
||||||
|
- calibrate_linear:
|
||||||
|
- 0.0 -> 0.0
|
||||||
|
# Map measured full charge to real value to compensate divider/ADC bias
|
||||||
|
- 4.58 -> 4.20
|
||||||
- exponential_moving_average:
|
- exponential_moving_average:
|
||||||
alpha: 0.2
|
alpha: 0.2
|
||||||
send_every: 2
|
send_every: 2
|
||||||
- delta: 0.002
|
- delta: 0.002
|
||||||
on_value:
|
on_value:
|
||||||
then:
|
then:
|
||||||
- sensor.template.publish:
|
- sensor.template.publish:
|
||||||
id: battery_percent
|
id: battery_percent
|
||||||
state: !lambda "return x;"
|
state: !lambda "return x ;"
|
||||||
|
|
||||||
- platform: template
|
- platform: template
|
||||||
name: Battery
|
name: Battery
|
||||||
@@ -185,32 +191,32 @@ sensor:
|
|||||||
entity_category: diagnostic
|
entity_category: diagnostic
|
||||||
update_interval: 15s
|
update_interval: 15s
|
||||||
filters:
|
filters:
|
||||||
- calibrate_polynomial:
|
- calibrate_polynomial:
|
||||||
degree: 3
|
degree: 3
|
||||||
datapoints:
|
datapoints:
|
||||||
- 4.58 -> 100.0
|
- 4.20 -> 100.0
|
||||||
- 4.5 -> 97.1
|
- 4.13 -> 97.1
|
||||||
- 4.47 -> 94.2
|
- 4.10 -> 94.2
|
||||||
- 4.44 -> 88.4
|
- 4.07 -> 88.4
|
||||||
- 4.42 -> 82.7
|
- 4.05 -> 82.7
|
||||||
- 4.41 -> 76.9
|
- 4.04 -> 76.9
|
||||||
- 4.41 -> 71.1
|
- 4.04 -> 71.1
|
||||||
- 4.37 -> 65.3
|
- 4.01 -> 65.3
|
||||||
- 4.35 -> 59.5
|
- 3.99 -> 59.5
|
||||||
- 4.31 -> 53.8
|
- 3.95 -> 53.8
|
||||||
- 4.28 -> 48.0
|
- 3.93 -> 48.0
|
||||||
- 4.26 -> 42.2
|
- 3.91 -> 42.2
|
||||||
- 4.23 -> 36.4
|
- 3.88 -> 36.4
|
||||||
- 4.21 -> 30.6
|
- 3.86 -> 30.6
|
||||||
- 4.19 -> 24.9
|
- 3.84 -> 24.9
|
||||||
- 4.16 -> 19.1
|
- 3.82 -> 19.1
|
||||||
- 4.1 -> 13.3
|
- 3.76 -> 13.3
|
||||||
- 4.07 -> 10.4
|
- 3.73 -> 10.4
|
||||||
- 4.03 -> 7.5
|
- 3.70 -> 7.5
|
||||||
- 3.97 -> 4.6
|
- 3.64 -> 4.6
|
||||||
- 3.82 -> 1.7
|
- 3.50 -> 1.7
|
||||||
- 3.27 -> 0.0
|
- 3.00 -> 0.0
|
||||||
- lambda: return clamp(x, 0.0f, 100.0f);
|
- lambda: return clamp(x, 0.0f, 100.0f);
|
||||||
|
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
- platform: gpio
|
- platform: gpio
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ wifi:
|
|||||||
use_address: riden-labornetzteil-18a.home
|
use_address: riden-labornetzteil-18a.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ wifi:
|
|||||||
use_address: riden-labornetzteil-6a.home
|
use_address: riden-labornetzteil-6a.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ wifi:
|
|||||||
use_address: serverroom.home
|
use_address: serverroom.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ wifi:
|
|||||||
use_address: ${name}.home
|
use_address: ${name}.home
|
||||||
power_save_mode: high
|
power_save_mode: high
|
||||||
fast_connect: on
|
fast_connect: on
|
||||||
|
min_auth_mode: WPA2
|
||||||
|
|
||||||
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
# Enable fallback hotspot (captive portal) in case wifi connection fails
|
||||||
ap:
|
ap:
|
||||||
@@ -235,7 +236,7 @@ sensor:
|
|||||||
- platform: adc
|
- platform: adc
|
||||||
pin: 32
|
pin: 32
|
||||||
name: "Spannung Photodiode"
|
name: "Spannung Photodiode"
|
||||||
attenuation: 11db
|
attenuation: 12db
|
||||||
update_interval: 1s
|
update_interval: 1s
|
||||||
internal: true
|
internal: true
|
||||||
on_value_range:
|
on_value_range:
|
||||||
@@ -259,6 +260,7 @@ remote_receiver:
|
|||||||
|
|
||||||
# IR Transmitter
|
# IR Transmitter
|
||||||
remote_transmitter:
|
remote_transmitter:
|
||||||
|
non_blocking: True
|
||||||
pin: GPIO22
|
pin: GPIO22
|
||||||
# Infrared remotes use a 50% carrier signal
|
# Infrared remotes use a 50% carrier signal
|
||||||
carrier_duty_percent: 50%
|
carrier_duty_percent: 50%
|
||||||
|
|||||||
14
sensors.yaml
14
sensors.yaml
@@ -46,20 +46,6 @@
|
|||||||
entity_id: sensor.internet_speed_out
|
entity_id: sensor.internet_speed_out
|
||||||
sampling_size: 10
|
sampling_size: 10
|
||||||
|
|
||||||
- platform: template
|
|
||||||
sensors:
|
|
||||||
sun_rising_template:
|
|
||||||
friendly_name: "Sun Rising Template"
|
|
||||||
unique_id: '0680294616247'
|
|
||||||
value_template: "{{ as_timestamp(states.sun.sun.attributes.next_rising) | timestamp_custom ('%H:%M') }}"
|
|
||||||
|
|
||||||
- platform: template
|
|
||||||
sensors:
|
|
||||||
sun_setting_template:
|
|
||||||
friendly_name: "Sun Setting Template"
|
|
||||||
unique_id: '8298170865533'
|
|
||||||
value_template: "{{ as_timestamp(states.sun.sun.attributes.next_setting) | timestamp_custom ('%H:%M') }}"
|
|
||||||
|
|
||||||
# Sensor for Riemann sum of energy import (W -> Wh)
|
# Sensor for Riemann sum of energy import (W -> Wh)
|
||||||
- platform: integration
|
- platform: integration
|
||||||
source: sensor.power_import
|
source: sensor.power_import
|
||||||
|
|||||||
@@ -39,6 +39,16 @@
|
|||||||
data:
|
data:
|
||||||
value: "{{ option }}"
|
value: "{{ option }}"
|
||||||
- sensor:
|
- sensor:
|
||||||
|
- unique_id: 0680294616247
|
||||||
|
default_entity_id: sensor.sun_rising_template
|
||||||
|
name: Sun Rising Template
|
||||||
|
state: '{{ as_timestamp(states.sun.sun.attributes.next_rising) | timestamp_custom
|
||||||
|
(''%H:%M'') }}'
|
||||||
|
- unique_id: '8298170865533'
|
||||||
|
default_entity_id: sensor.sun_setting_template
|
||||||
|
name: Sun Setting Template
|
||||||
|
state: '{{ as_timestamp(states.sun.sun.attributes.next_setting) | timestamp_custom
|
||||||
|
(''%H:%M'') }}'
|
||||||
- name: "power_other"
|
- name: "power_other"
|
||||||
unique_id: '5579422933393'
|
unique_id: '5579422933393'
|
||||||
unit_of_measurement: "W"
|
unit_of_measurement: "W"
|
||||||
|
|||||||
Reference in New Issue
Block a user