Skip to content

Commit 88e791e

Browse files
committed
Update HA version to 2026.3.4, adjust August automation battery threshold to 20%, enhance BearClaw Telegram integration with LLM-first routing context, and expand Docker monitored containers configuration.
1 parent cd22832 commit 88e791e

6 files changed

Lines changed: 95 additions & 66 deletions

File tree

config/.HA_VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2026.3.2
1+
2026.3.4

config/packages/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ Live collection of plug-and-play Home Assistant packages. Each YAML file in this
5151
| [onenote_indexer.yaml](onenote_indexer.yaml) | OneNote indexer health/status monitoring for Joanna, failure-repair automation, and a daily duplicate-delete maintenance request. | `sensor.onenote_indexer_last_job_status`, `binary_sensor.onenote_indexer_last_job_successful` |
5252
| [mqtt_status.yaml](mqtt_status.yaml) | Command-line MQTT broker reachability probe with Spook Repairs escalation and Joanna troubleshooting dispatch on outage. | `binary_sensor.mqtt_status_raw`, `binary_sensor.mqtt_broker_problem`, `repairs.create`, `rest_command.bearclaw_command` |
5353
| [mariadb.yaml](mariadb.yaml) | MariaDB recorder health and capacity SQL sensors. | `sensor.mariadb_status`, `sensor.database_size` |
54-
| [tugtainer_updates.yaml](tugtainer_updates.yaml) | Tugtainer container update notifications via webhook + persistent alerts, event-based Joanna dispatch for `### Available:` updates (24h cooldown), and Home Assistant core post-update digest dispatch that derives `core-YYYY.M` changelog URLs and requests GitHub Update Digest issue refresh/create. | `persistent_notification.create`, `event: tugtainer_available_detected`, `event: tugtainer_home_assistant_core_updated`, `script.joanna_dispatch`, `input_datetime.tugtainer_last_update` |
54+
| [tugtainer_updates.yaml](tugtainer_updates.yaml) | Tugtainer container update notifications via webhook + persistent alerts, plus event-based Joanna dispatch when reports include `### Available:` (24h cooldown via `mode: single` + delay, no new helpers). | `persistent_notification.create`, `event: tugtainer_available_detected`, `script.joanna_dispatch`, `input_datetime.tugtainer_last_update` |
5555
| [bearclaw.yaml](bearclaw.yaml) | Joanna/BearClaw bridge automations that forward Telegram commands to codex_appliance, include LLM-first routing context for freeform text, relay replies back, ingest `/api/bearclaw/status` telemetry, and expose dispatch KPI sensors for Infrastructure dashboards. | `rest_command.bearclaw_*`, `sensor.bearclaw_status_telemetry`, `sensor.joanna_*`, `automation.bearclaw_*`, `script.send_to_logbook` |
5656
| [telegram_bot.yaml](telegram_bot.yaml) | Telegram script wrappers used by BearClaw and other ops flows (UI integration remains the source for bot config). | `script.joanna_send_telegram`, `telegram_bot.send_message` |
5757
| [phynplus.yaml](phynplus.yaml) | Phyn shutoff automations with push + Activity feed + Repairs issues for leak events. | `valve.phyn_shutoff_valve`, `binary_sensor.phyn_leak_test_running`, `repairs.create` |

config/packages/august.yaml

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ automation:
3838
trigger:
3939
- platform: numeric_state
4040
entity_id: sensor.front_door_battery
41-
below: 25
41+
below: 20
4242

4343
action:
4444
- service: script.notify_engine
@@ -51,24 +51,3 @@ automation:
5151
topic: "BATTERY"
5252
message: "August Door lock battery low: {{ states('sensor.front_door_battery') }}%"
5353

54-
# - alias: 'FrontDoor Bell Camera on Front Door Lock'
55-
# id: Doorbell_camera_front_door
56-
# mode: single
57-
# trigger:
58-
# - platform: state
59-
# entity_id: lock.front_door
60-
# to: 'unlocked'
61-
# action:
62-
# - service: media_player.play_media
63-
# target:
64-
# entity_id: media_player.kitchen
65-
# data:
66-
# media_content_id: 'show front doorbell camera'
67-
# media_content_type: custom
68-
# - delay: '00:20:00'
69-
# - service: media_player.play_media
70-
# target:
71-
# entity_id: media_player.kitchen
72-
# data:
73-
# media_content_id: 'hide front doorbell camera'
74-
# media_content_type: custom

config/packages/bearclaw.yaml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# Notes: Inbound Telegram handling enforces user_id + chat_id allowlists from secrets CSV values.
1515
# Notes: Reply webhook writes JOANNA activity entries to logbook for traceability.
1616
# Notes: Status telemetry polling expects !secret bearclaw_status_url (token header stays !secret bearclaw_token).
17+
# Notes: Telegram freeform input now includes LLM-first routing context to improve intent understanding before entity lookups.
1718
# Notes: Blog: https://www.vcloudinfo.com/2026/03/joanna-dispatch-telemetry-home-assistant-infrastructure-dashboard/
1819
######################################################################
1920

@@ -341,7 +342,7 @@ automation:
341342

342343
- id: bearclaw_telegram_text_no_slash_needed
343344
alias: BearClaw Telegram Text No Slash Needed
344-
description: Treats plain Telegram text as BearClaw command input.
345+
description: Treats plain Telegram text as BearClaw command input and forwards LLM-first routing context.
345346
mode: queued
346347
trigger:
347348
- platform: event
@@ -363,12 +364,36 @@ automation:
363364
action:
364365
- variables:
365366
plain_text: "{{ trigger.event.data.text | default('') | trim }}"
367+
plain_text_lower: "{{ plain_text | lower }}"
366368
from_user: "{{ (trigger.event.data.from_first | default('carlo')) | lower }}"
369+
command_like_request: >-
370+
{% set action_verbs = ['disable', 'enable', 'turn off', 'turn on', 'stop', 'start', 'restart', 'review', 'fix', 'change', 'update', 'set', 'open', 'close'] %}
371+
{{ action_verbs | select('in', plain_text_lower) | list | count > 0 }}
372+
status_like_request: >-
373+
{{ (plain_text_lower.startswith('is ')
374+
or plain_text_lower.startswith('are ')
375+
or plain_text_lower.startswith('what is ')
376+
or plain_text_lower.startswith("what's ")
377+
or ' status' in plain_text_lower
378+
or plain_text_lower.startswith('status '))
379+
and not command_like_request }}
380+
llm_route_hint: >-
381+
{% if command_like_request %}
382+
llm_first_action
383+
{% elif status_like_request %}
384+
llm_first_status
385+
{% else %}
386+
llm_first_general
387+
{% endif %}
388+
llm_context: >-
389+
telegram_freeform route={{ llm_route_hint | trim }}.
390+
Prefer LLM intent interpretation and clarification for action or automation requests before returning entity status.
367391
- service: rest_command.bearclaw_command
368392
data:
369393
text: "{{ plain_text }}"
370394
user: "{{ from_user }}"
371395
source: telegram_text
396+
context: "{{ llm_context | trim }}"
372397

373398
- id: bearclaw_reply_webhook
374399
alias: BearClaw Reply Webhook

config/packages/docker_infrastructure.yaml

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,53 +72,115 @@ switch:
7272
name: Docker Monitored Containers
7373
unique_id: docker_monitored_containers
7474
entities:
75+
- switch.3a446393a8c5_dozzle_container
76+
- switch.5b3503372936_wordpress_db_container
77+
- switch.7a83770eb321_rc_price_checker_container
78+
- switch.91aca40203c0_portainer_agent_container
7579
- switch.cloudflared_kch_container
80+
- switch.cloudflared_kch_container_2
7681
- switch.cloudflared_wp_container
82+
- switch.cloudflared_wp_container_2
7783
- switch.codex_appliance_container
84+
- switch.codex_appliance_container_2
7885
- switch.college_budget_app_container
86+
- switch.college_budget_app_container_2
7987
- switch.cruise_tracker_container
88+
- switch.cruise_tracker_container_2
8089
- switch.dashy_container
90+
- switch.dashy_container_2
8191
- switch.docker_socket_proxy_container
82-
- switch.dozzle_container
92+
- switch.docker_socket_proxy_container_2
8393
- switch.dozzle_agent_10_container
94+
- switch.dozzle_agent_10_container_2
8495
- switch.dozzle_agent_14_container
96+
- switch.dozzle_agent_14_container_2
8597
- switch.dozzle_agent_17_container
98+
- switch.dozzle_agent_17_container_2
8699
- switch.dozzle_agent_69_container
100+
- switch.dozzle_agent_69_container_2
101+
- switch.dozzle_container
102+
- switch.dozzle_container_2
87103
- switch.duplicati_container
104+
- switch.duplicati_container_2
88105
- switch.esphome_container
106+
- switch.esphome_container_2
89107
- switch.fed437a0f191_tugtainer_socket_proxy_container
90108
- switch.foodie_tracker_container
109+
- switch.foodie_tracker_container_2
91110
- switch.frigate_container
111+
- switch.frigate_container_2
92112
- switch.games_hub_container
113+
- switch.games_hub_container_2
93114
- switch.home_assistant_container
115+
- switch.home_assistant_container_2
94116
- switch.imposter_container
117+
- switch.imposter_container_2
95118
- switch.infra_info_container
119+
- switch.infra_info_container_2
96120
- switch.kingcrafthomes_container
121+
- switch.kingcrafthomes_container_2
97122
- switch.lmediaservices_container
98-
- switch.mariadb_container
123+
- switch.lmediaservices_container_2
99124
- switch.mariadb_backup_container
125+
- switch.mariadb_backup_container_2
126+
- switch.mariadb_container
127+
- switch.mariadb_container_2
100128
- switch.matter_server_container
129+
- switch.matter_server_container_2
101130
- switch.mqtt_container
131+
- switch.mqtt_container_2
102132
- switch.nebula_sync_container
133+
- switch.nebula_sync_container_2
134+
- switch.onenote_indexer_container
135+
- switch.onenote_indexer_container_2
136+
- switch.optimistic_mclaren_container
103137
- switch.panel_notes_container
138+
- switch.panel_notes_container_2
104139
- switch.pihole_container
140+
- switch.pihole_container_2
105141
- switch.pihole_secondary_container
142+
- switch.pihole_secondary_container_2
106143
- switch.poker_tracker_container
107-
- switch.portainer_container
144+
- switch.poker_tracker_container_2
145+
- switch.portainer_agent_69_container
108146
- switch.portainer_agent_container
147+
- switch.portainer_agent_container_2
148+
- switch.portainer_container
149+
- switch.portainer_container_2
109150
- switch.postgres_webhooks_engine_container
151+
- switch.postgres_webhooks_engine_container_2
110152
- switch.rc_price_checker_container
153+
- switch.rc_price_checker_container_2
111154
- switch.redis_webhooks_engine_container
155+
- switch.redis_webhooks_engine_container_2
112156
- switch.rvtools_ppt_web_container
157+
- switch.rvtools_ppt_web_container_2
158+
- switch.steelesharing_home_container
113159
- switch.tapple_container
114-
- switch.tugtainer_container
160+
- switch.tapple_container_2
161+
- switch.tugtainer_agent_14_container
162+
- switch.tugtainer_agent_17_container
163+
- switch.tugtainer_agent_69_container
115164
- switch.tugtainer_agent_container
165+
- switch.tugtainer_agent_container_2
166+
- switch.tugtainer_container
167+
- switch.tugtainer_container_2
168+
- switch.tugtainer_socket_proxy_14_container
169+
- switch.tugtainer_socket_proxy_17_container
170+
- switch.tugtainer_socket_proxy_69_container
116171
- switch.tugtainer_socket_proxy_container
172+
- switch.tugtainer_socket_proxy_container_2
117173
- switch.unifi_container
174+
- switch.unifi_container_2
118175
- switch.webhooks_engine_container
176+
- switch.webhooks_engine_container_2
119177
- switch.wordpress_db_container
178+
- switch.wordpress_db_container_2
120179
- switch.wordpress_wp_container
180+
- switch.wordpress_wp_container_2
121181
- switch.wyze_bridge_container
182+
- switch.wyze_bridge_container_2
183+
122184

123185
template:
124186
- sensor:

config/packages/garadget.yaml

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -241,43 +241,6 @@ automation:
241241
topic: "garadget/GLarge/command"
242242
payload: "get-status"
243243

244-
- alias: 'Garage Door State Change'
245-
id: afec0987-edb1-4341-a524-a00ae4df9fb7
246-
mode: restart
247-
trigger:
248-
- platform: state
249-
entity_id:
250-
- cover.large_garage_door
251-
- cover.small_garage_door
252-
from: 'open'
253-
to: 'closed'
254-
for: '00:02:00'
255-
256-
- platform: state
257-
entity_id:
258-
- cover.large_garage_door
259-
- cover.small_garage_door
260-
from: 'closed'
261-
to: 'open'
262-
for: '00:10:00'
263-
264-
action:
265-
- choose:
266-
- conditions: "{{ is_state('cover.large_garage_door','closed') }}"
267-
sequence:
268-
- service: script.speech_engine
269-
data:
270-
DoorClosed: "The {{ trigger.entity_id.split('.')[1]|replace('_', ' ') }} is now {{ (trigger.to_state.state)|replace('_', ' ') }}."
271-
call_garage_check: 1
272-
- delay: "00:10:00"
273-
274-
default:
275-
- service: script.speech_engine
276-
data:
277-
DoorClosed: "The {{ trigger.entity_id.split('.')[1]|replace('_', ' ') }} is now {{ (trigger.to_state.state)|replace('_', ' ') }}."
278-
call_garage_check: 1
279-
280-
281244
###################################
282245
## Garadget Wind Door Checks - [Garadget](https://amzn.to/2jQLpVQ)
283246
###################################

0 commit comments

Comments
 (0)