diff --git a/Gemfile b/Gemfile index 71db3069a7a9..2c1b6f2d1b72 100644 --- a/Gemfile +++ b/Gemfile @@ -10,10 +10,10 @@ group :development do gem 'stringex', '2.8.6' # > 2.1.0 causes slowdowns https://github.com/sass/sassc-ruby/issues/189 gem 'sassc', '2.1.0' - gem 'sass-embedded', '1.80.6' + gem 'sass-embedded', '1.81.0' gem 'rubocop', '1.68.0' - gem 'ruby-lsp', '0.21.3' - gem 'rackup', '2.2.0' + gem 'ruby-lsp', '0.22.1' + gem 'rackup', '2.2.1' end group :jekyll_plugins do @@ -23,7 +23,7 @@ group :jekyll_plugins do gem 'jekyll-toc', '0.19.0' end -gem 'sinatra', '4.0.0' +gem 'sinatra', '4.1.1' gem 'nokogiri', '1.16.7' # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem diff --git a/Gemfile.lock b/Gemfile.lock index e45c236d766d..b8a84e30e531 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -8,7 +8,7 @@ GEM bigdecimal (3.1.8) chunky_png (1.4.0) colorator (1.1.0) - commonmarker (0.23.10) + commonmarker (0.23.11) compass (1.0.3) chunky_png (~> 1.2) compass-core (~> 1.0.2) @@ -66,9 +66,9 @@ GEM nokogiri (~> 1.12) jekyll-watch (2.2.1) listen (~> 3.0) - json (2.8.1) - kramdown (2.4.0) - rexml + json (2.8.2) + kramdown (2.5.1) + rexml (>= 3.3.9) kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) language_server-protocol (3.17.0.3) @@ -95,12 +95,13 @@ GEM public_suffix (6.0.1) racc (1.8.1) rack (3.1.8) - rack-protection (4.0.0) + rack-protection (4.1.1) base64 (>= 0.1.0) + logger (>= 1.6.0) rack (>= 3.0.0, < 4) rack-session (2.0.0) rack (>= 3.0.0) - rackup (2.2.0) + rackup (2.2.1) rack (>= 3) rainbow (3.1.1) rake (13.2.1) @@ -111,7 +112,7 @@ GEM logger regexp_parser (2.9.2) rexml (3.3.9) - rouge (4.4.0) + rouge (4.5.1) rubocop (1.68.0) json (~> 2.3) language_server-protocol (>= 3.17.0) @@ -122,9 +123,9 @@ GEM rubocop-ast (>= 1.32.2, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 3.0) - rubocop-ast (1.34.0) + rubocop-ast (1.36.1) parser (>= 3.3.1.0) - ruby-lsp (0.21.3) + ruby-lsp (0.22.1) language_server-protocol (~> 3.17.0) prism (>= 1.2, < 2.0) rbs (>= 3, < 4) @@ -133,9 +134,9 @@ GEM ruby2_keywords (0.0.5) safe_yaml (1.0.5) sass (3.4.25) - sass-embedded (1.80.6-arm64-darwin) + sass-embedded (1.81.0-arm64-darwin) google-protobuf (~> 4.28) - sass-embedded (1.80.6-x86_64-linux-gnu) + sass-embedded (1.81.0-x86_64-linux-gnu) google-protobuf (~> 4.28) sass-globbing (1.1.5) sass (>= 3.1) @@ -143,13 +144,14 @@ GEM ffi (~> 1.9) sassc (2.1.0-x86_64-linux) ffi (~> 1.9) - sinatra (4.0.0) + sinatra (4.1.1) + logger (>= 1.6.0) mustermann (~> 3.0) rack (>= 3.0.0, < 4) - rack-protection (= 4.0.0) + rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11641) + sorbet-runtime (0.5.11663) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) @@ -173,14 +175,14 @@ DEPENDENCIES jekyll-sitemap (= 1.4.0) jekyll-toc (= 0.19.0) nokogiri (= 1.16.7) - rackup (= 2.2.0) + rackup (= 2.2.1) rake (= 13.2.1) rubocop (= 1.68.0) - ruby-lsp (= 0.21.3) - sass-embedded (= 1.80.6) + ruby-lsp (= 0.22.1) + sass-embedded (= 1.81.0) sass-globbing (= 1.1.5) sassc (= 2.1.0) - sinatra (= 4.0.0) + sinatra (= 4.1.1) stringex (= 2.8.6) tzinfo (~> 2.0) tzinfo-data diff --git a/_config.yml b/_config.yml index 67d3ee2ec799..d0a1062a21ad 100644 --- a/_config.yml +++ b/_config.yml @@ -108,8 +108,8 @@ social: # Home Assistant release details current_major_version: 2024 current_minor_version: 11 -current_patch_version: 0 -date_released: 2024-11-06 +current_patch_version: 3 +date_released: 2024-11-22 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/sass/homeassistant/_overrides.scss b/sass/homeassistant/_overrides.scss index 609776c748a5..a186fb45e2e4 100644 --- a/sass/homeassistant/_overrides.scss +++ b/sass/homeassistant/_overrides.scss @@ -366,7 +366,7 @@ header .breadcrumbs { margin: 0 -24px; text-align: left; - h4 { + h3 { text-transform: uppercase; font-size: .9rem; letter-spacing: 0.005em; diff --git a/source/_data/people.yml b/source/_data/people.yml index 5eecd1608bf7..9a6d0fb3037b 100644 --- a/source/_data/people.yml +++ b/source/_data/people.yml @@ -84,4 +84,8 @@ Joakim Sørensen: Andy Gill: name: Andy Gill - github: ncandyg \ No newline at end of file + github: ncandyg + +Missy Quarry: + name: Missy Quarry + github: missyquarry \ No newline at end of file diff --git a/source/_docs/backend/database.markdown b/source/_docs/backend/database.markdown index 3f5965cb7fde..99b2e0647979 100644 --- a/source/_docs/backend/database.markdown +++ b/source/_docs/backend/database.markdown @@ -41,61 +41,198 @@ Get all available tables from your current Home Assistant database: sqlite> SELECT sql FROM sqlite_master; ------------------------------------------------------------------------------------- -CREATE TABLE events ( - event_id INTEGER NOT NULL, - event_type VARCHAR(32), - event_data TEXT, - origin VARCHAR(32), - time_fired DATETIME, - created DATETIME, - context_id VARCHAR(36), - context_user_id VARCHAR(36), context_parent_id CHARACTER(36), - PRIMARY KEY (event_id) +CREATE TABLE event_data ( + data_id INTEGER NOT NULL, + hash BIGINT, + shared_data TEXT, + PRIMARY KEY (data_id) +) + +CREATE TABLE event_types ( + event_type_id INTEGER NOT NULL, + event_type VARCHAR(64), + PRIMARY KEY (event_type_id) +) + +CREATE TABLE state_attributes ( + attributes_id INTEGER NOT NULL, + hash BIGINT, + shared_attrs TEXT, + PRIMARY KEY (attributes_id) +) + +CREATE TABLE states_meta ( + metadata_id INTEGER NOT NULL, + entity_id VARCHAR(255), + PRIMARY KEY (metadata_id) +) + +CREATE TABLE statistics_meta ( + id INTEGER NOT NULL, + statistic_id VARCHAR(255), + source VARCHAR(32), + unit_of_measurement VARCHAR(255), + has_mean BOOLEAN, + has_sum BOOLEAN, + name VARCHAR(255), + PRIMARY KEY (id) ) + CREATE TABLE recorder_runs ( - run_id INTEGER NOT NULL, - start DATETIME, - "end" DATETIME, - closed_incorrect BOOLEAN, - created DATETIME, - PRIMARY KEY (run_id), - CHECK (closed_incorrect IN (0, 1)) + run_id INTEGER NOT NULL, + start DATETIME NOT NULL, + "end" DATETIME, + closed_incorrect BOOLEAN NOT NULL, + created DATETIME NOT NULL, + PRIMARY KEY (run_id) +) + +CREATE TABLE migration_changes ( + migration_id VARCHAR(255) NOT NULL, + version SMALLINT NOT NULL, + PRIMARY KEY (migration_id) ) + + + CREATE TABLE schema_changes ( - change_id INTEGER NOT NULL, - schema_version INTEGER, - changed DATETIME, - PRIMARY KEY (change_id) + change_id INTEGER NOT NULL, + schema_version INTEGER, + changed DATETIME NOT NULL, + PRIMARY KEY (change_id) ) + +CREATE TABLE statistics_runs ( + run_id INTEGER NOT NULL, + start DATETIME NOT NULL, + PRIMARY KEY (run_id) +) + +CREATE TABLE events ( + event_id INTEGER NOT NULL, + event_type CHAR(0), + event_data CHAR(0), + origin CHAR(0), + origin_idx SMALLINT, + time_fired CHAR(0), + time_fired_ts FLOAT, + context_id CHAR(0), + context_user_id CHAR(0), + context_parent_id CHAR(0), + data_id INTEGER, + context_id_bin BLOB, + context_user_id_bin BLOB, + context_parent_id_bin BLOB, + event_type_id INTEGER, + PRIMARY KEY (event_id), + FOREIGN KEY(data_id) REFERENCES event_data (data_id), + FOREIGN KEY(event_type_id) REFERENCES event_types (event_type_id) +) + CREATE TABLE states ( - state_id INTEGER NOT NULL, - domain VARCHAR(64), - entity_id VARCHAR(255), - state VARCHAR(255), - attributes TEXT, - event_id INTEGER, - last_changed DATETIME, - last_updated DATETIME, - created DATETIME, - context_id VARCHAR(36), - context_user_id VARCHAR(36), context_parent_id CHARACTER(36), old_state_id INTEGER, - PRIMARY KEY (state_id), - FOREIGN KEY(event_id) REFERENCES events (event_id) + state_id INTEGER NOT NULL, + entity_id CHAR(0), + state VARCHAR(255), + attributes CHAR(0), + event_id SMALLINT, + last_changed CHAR(0), + last_changed_ts FLOAT, + last_reported_ts FLOAT, + last_updated CHAR(0), + last_updated_ts FLOAT, + old_state_id INTEGER, + attributes_id INTEGER, + context_id CHAR(0), + context_user_id CHAR(0), + context_parent_id CHAR(0), + origin_idx SMALLINT, + context_id_bin BLOB, + context_user_id_bin BLOB, + context_parent_id_bin BLOB, + metadata_id INTEGER, + PRIMARY KEY (state_id), + FOREIGN KEY(old_state_id) REFERENCES states (state_id), + FOREIGN KEY(attributes_id) REFERENCES state_attributes (attributes_id), + FOREIGN KEY(metadata_id) REFERENCES states_meta (metadata_id) +) + +CREATE TABLE statistics ( + id INTEGER NOT NULL, + created CHAR(0), + created_ts FLOAT, + metadata_id INTEGER, + start CHAR(0), + start_ts FLOAT, + mean FLOAT, + min FLOAT, + max FLOAT, + last_reset CHAR(0), + last_reset_ts FLOAT, + state FLOAT, + sum FLOAT, + PRIMARY KEY (id), + FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE ) + +CREATE TABLE statistics_short_term ( + id INTEGER NOT NULL, + created CHAR(0), + created_ts FLOAT, + metadata_id INTEGER, + start CHAR(0), + start_ts FLOAT, + mean FLOAT, + min FLOAT, + max FLOAT, + last_reset CHAR(0), + last_reset_ts FLOAT, + state FLOAT, + sum FLOAT, + PRIMARY KEY (id), + FOREIGN KEY(metadata_id) REFERENCES statistics_meta (id) ON DELETE CASCADE +) + CREATE TABLE sqlite_stat1(tbl,idx,stat) -CREATE INDEX ix_events_context_user_id ON events (context_user_id) -CREATE INDEX ix_events_event_type ON events (event_type) -CREATE INDEX ix_events_context_id ON events (context_id) -CREATE INDEX ix_events_time_fired ON events (time_fired) + +CREATE INDEX ix_event_data_hash ON event_data (hash) + +CREATE UNIQUE INDEX ix_event_types_event_type ON event_types (event_type) + +CREATE INDEX ix_state_attributes_hash ON state_attributes (hash) + +CREATE UNIQUE INDEX ix_states_meta_entity_id ON states_meta (entity_id) + +CREATE UNIQUE INDEX ix_statistics_meta_statistic_id ON statistics_meta (statistic_id) + CREATE INDEX ix_recorder_runs_start_end ON recorder_runs (start, "end") -CREATE INDEX ix_states_entity_id ON states (entity_id) -CREATE INDEX ix_states_context_user_id ON states (context_user_id) -CREATE INDEX ix_states_last_updated ON states (last_updated) -CREATE INDEX ix_states_event_id ON states (event_id) -CREATE INDEX ix_states_entity_id_last_updated ON states (entity_id, last_updated) -CREATE INDEX ix_states_context_id ON states (context_id) -CREATE INDEX ix_states_context_parent_id ON states (context_parent_id) -CREATE INDEX ix_events_context_parent_id ON events (context_parent_id) + +CREATE INDEX ix_statistics_runs_start ON statistics_runs (start) + +CREATE INDEX ix_events_data_id ON events (data_id) + +CREATE INDEX ix_events_event_type_id_time_fired_ts ON events (event_type_id, time_fired_ts) + +CREATE INDEX ix_events_context_id_bin ON events (context_id_bin) + +CREATE INDEX ix_events_time_fired_ts ON events (time_fired_ts) + +CREATE INDEX ix_states_attributes_id ON states (attributes_id) + +CREATE INDEX ix_states_metadata_id_last_updated_ts ON states (metadata_id, last_updated_ts) + +CREATE INDEX ix_states_old_state_id ON states (old_state_id) + +CREATE INDEX ix_states_context_id_bin ON states (context_id_bin) + +CREATE INDEX ix_states_last_updated_ts ON states (last_updated_ts) + +CREATE UNIQUE INDEX ix_statistics_statistic_id_start_ts ON statistics (metadata_id, start_ts) + +CREATE INDEX ix_statistics_start_ts ON statistics (start_ts) + +CREATE INDEX ix_statistics_short_term_start_ts ON statistics_short_term (start_ts) + +CREATE UNIQUE INDEX ix_statistics_short_term_statistic_id_start_ts ON statistics_short_term (metadata_id, start_ts) ``` To only show the details about the `states` table (since we are using that one in the next examples): @@ -110,7 +247,7 @@ The identification of the available columns in the table is done and we are now ```bash sqlite> .width 30, 10, -sqlite> SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10; +sqlite> SELECT states_meta.entity_id, COUNT(*) as count FROM states INNER JOIN states_meta ON states.metadata_id = states_meta.metadata_id GROUP BY states_meta.entity_id ORDER BY count DESC LIMIT 10; entity_id count ------------------------------ ---------- sensor.cpu 28874 diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 86a8b5fe6e5f..3cda6becfd9e 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -106,6 +106,10 @@ Extensions allow templates to access all of the Home Assistant specific states a Templates for some [triggers](/docs/automation/trigger/) as well as `trigger_variables` only support a subset of the Home Assistant template extensions. This subset is referred to as "Limited Templates". +### This + +State-based and trigger-based template entities have the special template variable `this` available in their templates and actions. See more details and examples in the [Template integration documentation](/integrations/template). + ### States Not supported in [limited templates](#limited-templates). @@ -318,7 +322,7 @@ List of lights that are on with a brightness of 255: {% raw %} ```text -{{ ['light.kitchen', 'light.dinig_room'] | select('is_state', 'on') | select('is_state_attr', 'brightness', 255) | list }} +{{ ['light.kitchen', 'light.dining_room'] | select('is_state', 'on') | select('is_state_attr', 'brightness', 255) | list }} ``` {% endraw %} @@ -1459,12 +1463,14 @@ To evaluate a response, go to **{% my developer_template title="Developer Tools ### Using templates with the MQTT integration -The [MQTT integration](/integrations/mqtt/) relies heavily on templates. Templates are used to transform incoming payloads (value templates) to status updates or incoming actions (command templates) to payloads that configure the MQTT device. +The [MQTT integration](/integrations/mqtt/) relies heavily on templates. Templates are used to transform incoming payloads (value templates) to state updates or incoming actions (command templates) to payloads that configure the MQTT device. #### Using value templates with MQTT -For incoming data a value template translates incoming JSON or raw data to a valid payload. -Incoming payloads are rendered with possible JSON values, so when rendering the `value_json` can be used access the attributes in a JSON based payload. +Value templates translate received MQTT payload to a valid state or attribute. +The received MQTT is available in the `value` template variable, and in the `value_json` template variable if the received MQTT payload is valid JSON. + +In addition, the template variables `entity_id`, `name` and `this` are available for MQTT entity value templates. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. {% note %} @@ -1478,13 +1484,13 @@ With given payload: Template {% raw %}`{{ value_json.temperature | round(1) }}`{% endraw %} renders to `21.9`. -Additional the MQTT entity attributes `entity_id`, `name` and `this` can be used as variables in the template. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. - {% endnote %} #### Using command templates with MQTT -For actions, command templates are defined to format the outgoing MQTT payload to the device. When an action is executed, `value` can be used to generate the correct payload to the device. +For actions, command templates are defined to format the outgoing MQTT payload to a format supported by the remote device. When an action is executed, the template variable `value` has the action data in most cases unless otherwise specified in the documentation. + +In addition, the template variables `entity_id`, `name` and `this` are available for MQTT entity command templates. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. {% note %} @@ -1498,8 +1504,6 @@ With given value `21.9` template {% raw %}`{"temperature": {{ value }} }`{% endr } ``` -Additional the MQTT entity attributes `entity_id`, `name` and `this` can be used as variables in the template. The `this` attribute refers to the [entity state](/docs/configuration/state_object) of the MQTT item. - {% endnote %} **Example command template with raw data:** diff --git a/source/_docs/quality_scale.markdown b/source/_docs/quality_scale.markdown index 8803e2ce3ae6..2a9d9cda2792 100644 --- a/source/_docs/quality_scale.markdown +++ b/source/_docs/quality_scale.markdown @@ -5,7 +5,7 @@ description: "Details about the classification of integrations." The Integration Quality Scale scores each integration based on the code quality and user experience. Each level of the quality scale consists of a list of requirements. If an integration matches all requirements, it's considered to have reached that level. -[Integration Quality Scale](https://developers.home-assistant.io/docs/en/integration_quality_scale_index.html) for developers. +[Integration Quality Scale](https://developers.home-assistant.io/docs/core/integration-quality-scale/) for developers. ## No score diff --git a/source/_docs/scene.markdown b/source/_docs/scene.markdown index 2606fd02884a..fc635d81941c 100644 --- a/source/_docs/scene.markdown +++ b/source/_docs/scene.markdown @@ -38,7 +38,7 @@ name: type: string description: description: Description of the scene. - required: true + required: false type: string entities: description: Entities to control and their desired state. diff --git a/source/_docs/scripts/conditions.markdown b/source/_docs/scripts/conditions.markdown index f6aa2c19e080..f7209c8a808f 100644 --- a/source/_docs/scripts/conditions.markdown +++ b/source/_docs/scripts/conditions.markdown @@ -560,7 +560,7 @@ Time condition windows can span across the midnight threshold if **both** `after A better weekday condition could be by using the [Workday Binary Sensor](/integrations/workday/). {% endtip %} -For the `after` and `before` options a time helper (`input_datetime` entity) +For the `after` and `before` options a time helper (`input_datetime` entity), a `time` entity, or another `sensor` entity containing a timestamp with the "timestamp" device class, can be used instead. @@ -571,6 +571,9 @@ conditions: after: input_datetime.house_silent_hours_start before: input_datetime.house_silent_hours_end + - alias: "Example referencing a time entity" + before: time.dnd_start + - alias: "Example referencing another sensor" after: sensor.groceries_delivery_time ``` diff --git a/source/_includes/asides/docs_sitemap.html b/source/_includes/asides/docs_sitemap.html index 1b6e214ca55d..64c93a510ec3 100644 --- a/source/_includes/asides/docs_sitemap.html +++ b/source/_includes/asides/docs_sitemap.html @@ -109,44 +109,48 @@
Sign up for our newsletter {% icon "tabler:external-link" %}
Screenshots showing the conversion of a view in masonry into sections
+ +Work will continue with the dashboard working group. The group is currently looking into standardizing the appearance of our default cards. **Please [reach out to us](/blog/2024/07/26/dashboard-chapter-2/#process-how-can-we-work-together) if you are a frontend developer** who would like to contribute and be part of the journey! + +#### Newly in progress: Make default dashboards more useful and relevant + +Now that we’ve made customization of dashboards easier than ever, what’s next? We understand that it can be intimidating for users when they are faced with a blank slate. Some may be full of ideas on how they would like to fill their dashboards up, but some would prefer if Home Assistant came with something useful out-of-the-box. Therefore, we are now looking into making dashboards easier, even if you don’t know how to create one. + +Case studies of many dashboards of our users
+ +Over the past year, we have looked into dozens of case studies - dashboards created by many of you, from the most popular to the most pragmatic - and began to notice patterns in how our users organize their dashboards. Home Assistant is unique compared to other smart home platforms in that our dashboards are not just about controlling devices. After all, the perfect app is no app, as in, opening an app to control your light bulb is less convenient than simply flicking a light switch, or better yet, just automating it. + +What we see our users have built instead are dashboards that help them keep track of information for their daily lives at a glance, and keep a birds-eye view of everything that is going on around their homes. For example, while you can automate Home Assistant to notify you when energy usage is too high, or you can ask Assist the current power usage, our dashboards shine at data visualization and its ability to tell you lots of information you need by just glancing at it. + +Currently, our default dashboard simply dumps every single entity that a home has onto one page, making it wildly unmanageable as the smart home grows. While it can automatically group entities by areas, we have learned that areas are not the only way users look at their dashboard information. What we saw instead are dashboards that are specialized and focused on the functions of a home, such as energy usage, security and safety, and network status, on complex objects, such as a car and a 3D printer, or on information unrelated to the home itself, such as weather, neighborhood information, or even rocket launches. While we can simply show every entity by domain, we know we can make these function-focused dashboards much more useful by exposing insights by curating and juxtaposing information. + +#### Next priority: Improve privacy in user, guest, and public access + +The inability to fine-tune access to Home Assistant by guests or other members of the family has been a pain point requested by many of our users. We want to investigate ways to mitigate this while improving the privacy of the household. Our research on what privacy means to users will hopefully bring more clarity to this before we start working on it. + +### Voice Assistants + +#### In good shape: Improve Assist capabilities out of the box + +Assist, our private voice assistant, received a lot of love over the last 6 months. Our first focus was to improve its capabilities out of the box, without needing to tinker with it. We added a lot of features that were heavily requested by the community, features that bring us one step closer to feature parity with our non-private competitors. + +We brought area awareness, which allows you to target devices in the same area without mentioning the area (like “Close the curtains” or “Turn off the lights”). We brought floor support, which allows you to target devices across areas on the same floor; very useful for homes with an open floor design (for example “Turn on all lights on the first floor”). + +A teaser of our voice hardware
+ +However, this is changing - over the past 6 months, we have built our own hardware! It will be the first voice assistant hardware built from the ground up to work with Home Assistant, fully open source (firmware and hardware), and it is going to be released *very soon*. It is truly the missing hardware piece to a more approachable voice experience in Home Assistant, and we cannot wait to see what you will build with it. + +#### Later priority: Make Assist more conversational + +The more functionality we add to Assist, the more we reach its transactional limitations. Indeed, today, an interaction is one way, from a user (issuing a command) to Assist (acting on that command). We would like to improve this, allowing more conversational interactions with Assist. + +In the future, Assist will be able to ask for clarifications before fulfilling a command, such as requesting the duration of a timer if it was not part of the original command or asking for confirmation before processing critical actions, such as unlocking all doors. On top of that, we would like to allow the conversation to start from Assist, and not from the user, such as greeting someone when they enter a room. +This pairs very well with LLM-based conversation agents due to their ability to retain context, but we will make sure these types of complex interactions are also possible with our default conversation agent. + +### Research + +#### In good shape: Build local LLM infrastructure + +In the past six months, we’ve introduced support for LLM local tools and [Ollama](/blog/2024/08/07/release-20248/#control-home-assistant-using-ai-with-ollama), pushing our efforts to make AI more accessible and private for experimentation within Home Assistant. We’ve also dedicated significant effort to creating realistic benchmarks, focusing on natural, conversational use cases rather than edge cases. This approach lets us better understand performance and user experience in day-to-day interactions. + +Our latest benchmark for local language models (LLMs) can be explored [here](https://github.com/allenporter/home-assistant-datasets/tree/main/reports), showcasing how models like qwen2.5 perform in realistic settings. With these insights, we’re continuing to refine LLM integrations and to ensure that LLMs can be depended upon for common use cases at home. + + + +You can now expand LLM capabilities by [allowing them access to your scripts](/blog/2024/07/03/release-20247/#expand-an-llm-using-your-scripts). This feature lets you precisely control what the LLM does in specific situations, while still benefiting from the flexibility and natural language processing that AIs excel at. + +#### In progress: Investigate on privacy + +Since our last roadmap update, we have expanded the product and design team working on the Home Assistant project, and we have hired our first ever dedicated user researcher! + +While we are ramping up our user research pipeline, we have started working on investigating what privacy means to our users. Of the three Open Home values, privacy, choice, and sustainability, while we have a pretty solid understanding of choice and some understanding of sustainability, the idea of privacy can benefit from more clarity. We have interviewed a handful of users on this topic recently, and we can’t wait to show you what we have found. + +## Home Assistant Cloud + +Home Assistant Cloud, powered by our commercial partner Nabu Casa brings, to the many, the hard-to-reach features of Home Assistant usually reserved for power users with expensive hardware at home, with no compromise on privacy. + +In recent months, the Nabu Casa team has been hard at work in bringing peace of mind to using Home Assistant. For the cloud backup feature, the Home Assistant team and the Nabu Casa team are now working closely together on a comprehensive revamp of backup integrations, to create an easy one-stop solution to a good backup strategy. We are also working to ensure users have a smooth onboarding for backing up to Home Assistant Cloud, as well as other third-party backup locations. + +The team had to postpone some features in favor of others like [WebRTC](/blog/2024/11/06/release-202411/#low-latency-cameras-using-webrtc). They had successfully released the infrastructure needed to support WebRTC, both STUN servers for every Home Assistant user and TURN servers for every Home Assistant Cloud subscriber, enhancing real-time communication capabilities within Home Assistant. Two-factor authentication (2FA) is one of the postponed features, but it is still in the Nabu Casa pipeline. + +## Open Protocols + +We remain committed to supporting open smart home standards, including Z-Wave Zigbee, Matter, and Thread, aligning with our Open Home mission to offer choice, privacy, and sustainability through locally controlled, cloud-independent devices. + +In the past six months, we have made significant steps towards certifications, ensuring our open standards implementations are up to industry standards. + +### Z-Wave + +In [September](/blog/2024/09/24/we-are-joining-the-z-wave-alliance-board/), Paulus, the founder of Home Assistant, announced his new role on the Z-Wave Alliance Board of Directors, representing Nabu Casa. Serving on the board will allow Nabu Casa to contribute meaningfully to Z-Wave’s development and ensure that the needs of Home Assistant users and open-source values are represented. + +As interest in Z-Wave devices in our ecosystem continues to grow, this has driven Home Assistant to advance the Z-Wave JS stack and create its own Z-Wave hardware. While we are working on the [certification of our Z-Wave implementation](/blog/2024/05/08/zwave-is-not-dead), our work on building our own Z-Wave antenna has also been progressing smoothly. We base the design of our antenna on the [Z-Wave Reference Application Design](https://github.com/drzwave/ZRAD) to create a Z-Wave antenna with the best performance in the market. + +### Matter + +As one of the first in the industry, in June, we proudly announced that Home Assistant is now based on the [latest Matter 1.3 specification](/blog/2024/06/05/release-20246/#matter-turns-13). Since then, we continued to update our Matter implementation to improve the reliability and compatibility of Matter devices, and Matter certification should hopefully happen any day now soon! + +We have brought expanded device support and performance improvements to Home Assistant's Matter integration. Air purifiers, room air conditioners, and thermostats are now better supported, along with custom clusters, which allow Home Assistant to detect data changes in real-time, improving network efficiency. + +Update entities now provide firmware updates via official Matter update channels, while event entities provide more event types, allowing you to react to single-press or double-press events with ease. Additional features include water valve support, operation state tracking for appliances, and smoke and CO sensor integration. Matter 1.3 power and energy sensors are also supported, providing useful data for the energy dashboard. + +In the meantime, we will continue to work on Matter 1.4 compatibility, as well as making device commissioning easier and working with Thread credentials. We have made major strides forward and hopefully we will be able to get through some of our roadblocks soon. + +### Zigbee + +The Zigbee Home Automation (ZHA) integration got a massive overhaul [during Summer](/blog/2024/08/07/release-20248/#zigbee-home-automation-zha-updates). The whole integration has been split into a separate codebase, making it easier to maintain and improve. This is a huge step forward for the integration, and took months of work to get done. This change will make the integration easier to maintain and improve in the future, including allowing code contributors to contribute more easily. + +## What’s next? + +We hope that you can feel the results of all this work. Given the positive feedback we have received from our users, we will continue to follow our roadmap to work on the next product initiatives. + +We will also start preparing for the roadmap for next year. It will have a new theme, and we would like to have our community be more involved in the process of its creation. Planning has already begun, and we hope to announce it at the next State of the Open Home. Last but not the least, please get in the comments and give us your feedback - we read it all! + +See you next year! + +\- [Madelena] & [JLo] + +[Madelena]: https://github.com/Madelena +[JLo]: https://github.com/jlpouffier diff --git a/source/_posts/2024-11-18-event-wrapup-github-universe-24.markdown b/source/_posts/2024-11-18-event-wrapup-github-universe-24.markdown new file mode 100644 index 000000000000..dc17ba5c7a44 --- /dev/null +++ b/source/_posts/2024-11-18-event-wrapup-github-universe-24.markdown @@ -0,0 +1,86 @@ +--- +layout: post +title: "Event wrap-up - GitHub Universe '24" +description: "Home Assistant had pretty huge presence at this year's GitHub Universe, and here are the highlights" +date: 2024-11-18 00:00:00 +date_formatted: "November 18, 2024" +author: Missy Quarry +comments: true +categories: community +og_image: /images/blog/2024-11-universe/art.jpg +--- + + + +In case you missed it, we had a pretty huge presence at this year's [GitHub Universe](https://githubuniverse.com/), their global annual developer conference. 2024 was the culmination of many years of our community growing, and there were some really big moments---our community meetup in San Francisco, awards, rising in GitHub's rankings, and being a part of the event's Day 2 keynote. + +After a few years of being in 2nd place, we are now the #1 open source project on GitHub with over 21,000 contributors helping build Home Assistant. We also won the Wonderfully Welcoming award for being the 2nd most active project for *new* contributors. This is really just scratching the surface of the week we spent together in San Francisco, and I ([Missy Quarry](https://github.com/missyquarry), your Community & Social Media Manager) would like to share the highlights with everyone who couldn't make it this year. + +### Table of contents + +- [Community comes together](#community-comes-together) +- [We are number 1!](#we-are-number-1) +- [Open Source - ⭐️ of the show](#open-source---️-of-the-show) +- [Connecting with the community](#connecting-with-the-community) + + + +## Community comes together + +What started as a simple request to attend the event tumbled into not only being a part of the Day 2 Keynote of GitHub Universe ❗❗ but being offered a venue at GitHub HQ for a community meetup. It picked up from there - interviews, speaking on panels, and after-parties - this 2-day event spun into a 7-day trip to San Francisco. Not only was this my first event as a part of an open source project, but it was also my first time meeting [Paulus](https://github.com/balloob) and [Frenck](https://github.com/frenck) in person. Paulus is taller than I expected 😅 and Frenck has legs! 😱 + +While there is a lot of good news for us that came out of GitHub Universe (and I _will_ get to that), I would be a poor community manager if I didn't start this out with the first in-person meetup I coordinated for Home Assistant. 😌 + +I knew immediately that I needed custom swag for the event, and got to work with our Graphic Artist, Clelia. We wanted to make sure it was connected to where we were holding the meetup and that it was collectible - we landed on postcards and pins in the shape of stamps. + +Limited edition San Fran postcard and badge
+ +And, of course, you can't go to an event without stickers, so we took our Home Assistant and ESPHome logos with an Open Home Foundation badge and made holographic stickers. ✨ + + + +The event itself ended up being a small gathering, but it was filled with amazing connections and conversations. Paulus and Frenck talked for over an hour about the status of Home Assistant and what we're working on right now, then took questions from the community members. It was great talking to everyone who attended - being able to bring people from different aspects of life together energizes me, and I am excited to plan whatever the next meetup will be. 👀 + + + +## We are number 1! + + + +It was an honor just for Home Assistant to be asked to speak at the Day 2 Keynote; what we _didn't_ know when we started this ride was that the keynote would announce something new: **we are the #1 open source project on GitHub** by active contributors!! 🎉 Not only that, on the rankings for first-time contributors, we moved up to 2nd place, and an Open Home Foundation collaboration partner, [Zigbee2MQTT](https://www.zigbee2mqtt.io/), is also now in the top 10! 🥳 This is all featured in the [GitHub Octoverse 2024 report](https://github.blog/news-insights/octoverse/octoverse-2024/), which is a really interesting read. + + + +Our friends at GitHub did a great job of making sure we were surprised by this news---and believe me when I say we lost our collective minds when they revealed it to us. 😎 We also found out that we've won GitHub's [Wonderfully Welcoming Award](https://github.blog/news-insights/company-news/celebrating-the-github-awards-2024-recipients/#wonderfully-welcoming-award), which recognizes how we attract and support new contributors to our project. + + + +## Open Source - ⭐️ of the show + +Paulus and Frenck were at keynote rehearsals Friday, Sunday, and Monday to be prepared for Wednesday. So I picked up my badge Monday morning, which was a hackable board with an e-ink display programmed to show our names - the little details they put into this event were quite pleasing. 🤩 + +There was a community session where GitHub showed off a little of what they would reveal on Day 2. At the breakout session, I was able to share our pain points about moderating a community directly on GitHub, and it was good to hear how other projects do this on the platform. + +Paulus, Frenck and myself at the Day 1 keynote
+ +Day 1 is when we had our booth in the [Open Source Zone](https://github.blog/open-source/10-projects-in-the-open-source-zone-at-github-universe-2024/), but I was also set to represent Home Assistant at a panel. The session was called [Cha-ching! How to attract funding for your open source projects](https://reg.githubuniverse.com/flow/github/universe24/attendee-portal/page/sessioncatalog/session/1715376172449001OEqW); I was very excited to tell our story since Home Assistant is funded by y'all - the community - through our [Home Assistant Cloud subscription](/cloud/), and not investors. I was pleasantly surprised to hear that others on the panel shared our approach to building a sustainable project through community support! I had great conversations with several people working on other open source projects like Homebrew and Ladybird. + +Our booth was a great success, and we had so many members of the community come up to us to let us know how much they love Home Assistant, along with some people who had never heard of us curious to learn more. We were surprised to hear that some people had not yet tried the [new Sections dashboard](/blog/2024/11/06/release-202411/#sections-dashboard-no-longer-experimental), which we were demoing at the booth. It was really useful to get this feedback in person. All of them took stickers. 😆 + +Our booth in the Open Source Zone
+ +Day 2 was when Paulus and Frenck took the stage, and I got there early to ensure I got a good seat up front. We had not only a good crowd in person, but [Joost](https://github.com/joostlek) hosted a watch party on the Community Stage in [our Discord server](/join-chat)! + +Their final message to the crowd - what are you going to build?
+ +The guys did amazing up on stage! 🤩 It was wonderful to see Paulus explain why Home Assistant was built and how it connects to GitHub's ambitious goal of 1 billion developers. Frenck shared not only what we've done to grow the largest open community on GitHub, but also how the community collectively shapes the project's direction. [Kyle Daigle](https://github.com/kdaigle), a fellow Home Assistant user and GitHub COO, joined Frenck and Paulus on stage and did a really fun Home Assistant live demo. Paulus also shared how he secured the future of the project by giving it to the [Open Home Foundation](https://www.openhomefoundation.org/), and its mission to bring privacy, choice, and sustainability to the smart home. Catch their segment [here](https://www.youtube.com/watch?v=uh9A4LvuGHM&t=679s), but I would recommend watching the entire keynote - GitHub is doing good stuff for new developers. 😌 + +