# Changelog All notable user-visible changes to Hauser are documented here. The project uses Semantic Versioning for its public release line. ## [0.50.0] - 2026-11-02 - Room: every device on the picture can be resized like a lamp. A shape button switches between ellipse and rectangle, whose four corners can be adjusted individually like window corners; the button moves to the left near the image edge. Web and iOS share the shape, and the tappable area follows it. - Room: the hint about devices without a position no longer floats over the room editor; it stays in the view settings. ## [0.49.1] - 2026-10-29 - Installation: the baseline x86-64 image installs its native build tools without running unrelated dependency hooks. - Media: player inputs can be selected from Home Assistant's source list. Saved radio streams and playlists use real media IDs and the correct playback parameters; demo presets no longer appear in live households. Presets and their music/playlist type are shared with the native app. - Laundry setup: when translated state names do not match a sensor, the error shows the source's internal state values. The native app now applies an existing sensor through the current validate-and-confirm flow. - Room: the stage view selector uses light text on its dark surface in the light theme, so “Full screen” and “All rooms” remain clearly readable and look selectable next to “Image control”. - Room: “Fade lamps when switched off” can be disabled per room under Room image → Set up image → Devices & light zones. It is on by default; switching it off keeps the light glow and device controls intact. The native app shares the same setting. - Image control on the wall panel: whoever lands there no longer gets stuck without the controls. A tap on an empty spot of the picture shows the placed devices together with the way back, a swipe in from the left edge brings the controls in, and the room still changes with a swipe anywhere else. In the locked mode, pressing and holding the picture explains right away how to unlock it ([#42](https://github.com/ralleur/hauser/issues/42)). - Room on phones: hiding the controls now lets you operate devices directly where they are placed in the picture. Tap to control, press and hold for details, or double-tap an empty spot to show their zones and names briefly. ## [0.48.2] - 2026-10-25 - Room: the pale veil of a lamp that is off now stays on the lamp in the demo rooms. Its zone had reached well past the globe, the shade or the bedside lamp; demo visitors who still carry the old zones get the close ones once, places they set themselves stay. - Room: tapping the lamp picture on the project page opens the demo straight in image control in the living room, where the lamps can really be tapped. `demo/#image` leads there; opening the demo normally afterwards starts with the usual view again. ## [0.48.1] - 2026-10-24 - Scenes: leaving the scene editor puts every lamp back the way it was, also when a Home Assistant light group sits next to its lamps in the room — before, the group switched a lamp back on that had been off. Adjusting one lamp no longer runs the whole scene again. - Room: “Assign devices” is back in the room settings, next to the room image and the scenes; it is still also reachable under “Set up image”. ## [0.48.0] - 2026-10-24 - Room: on the wall panel, a lamp that is off now goes pale inside its light zone in the room picture, and its warm colour fades back as soon as it is switched on, from its tile or by tapping it in the picture. - The live demo places its lamps on the lamps drawn in its room pictures, so the effect can be tried in the evening living room, bedroom, bathroom and kitchen. - The project page shows it in moment 02 as a short, calm sequence of the living room lamps coming on; the guide mentions it under devices in the picture. ## [0.47.0] - 2026-10-23 - Room and exterior pictures: clear “Change image” and “Set up image” entries, with devices and light zones, windows and weather, and surfaces together in one editor. A missing device position is an optional configuration hint. - The manual image workflow guides photo preparation, uploading the four variants and reviewing them before applying the set. The workspace keeps a dark, responsive surface with readable controls and simpler navigation. - Reliability: a light tile uses its own Home Assistant entity when switching, even while its previous room assignment is being replaced. - Maintenance: Stresshaus distinguishes intentional HA outages from failures and avoids stale iPad button queries and system keyboard controls. ## [0.46.1] - 2026-10-21 - Gate: Home Assistant no longer marks the Hauser app as experimental in its app store, and it no longer needs advanced mode to show up. The beta note stays in the app's documentation. - Room: the project page shows the room picture as the switch. A new moment after the day-evening-off preview shows image control in the evening, with the lamps and blinds marked where they stand, and links to how it works. - Energy on the phone: the project page shows the new energy screen next to the iOS living room, with the house at the top and solar, battery and grid below. - The guide describes the three home-screen views, the room configuration that now holds the layout settings, and devices in the picture (light zones, points, tap and hold). ## [0.46.0] - 2026-10-19 - A glance: the lightbulb on a room only lights up for lamps. Smart plugs, configuration switches, open blinds and vacuums stay listed and controllable without lighting it, in existing homes too. A plug or relay that powers a lamp can be counted with **Counts for the room light indicator** in the device settings. Thanks to @ferlodavid (#32, #35). - A glance: open doors and open windows are told apart. The overview, the phone notice, the ambient screen and the room cards say "1 window open", "1 door open" or both, based on the contact's Home Assistant device class (`door` and `garage_door` are doors). Thanks to @ferlodavid (#33, #36). - A glance: when the add-on has a newer Hauser version waiting, a notification says so and where to update it. Hauser reads Home Assistant's own update entity for the add-on, so nothing is fetched from the internet. Dismissed, it stays away until the next version. - Touch: blinds can be raised, stopped and lowered right on their tile. The blind's settings cycle through three tile views: large (one tile wide, two high, up and down stacked with stop beside them; the default), compact (the buttons replace name and state on a normal tile) and the previous tile without buttons. Only the buttons a blind supports are shown, and the direction it is moving in lights up. Suggested by @ferlodavid (#39). - Touch: the temperature control can be switched. A button at the top right of the climate overlay and the thermostat detail cycles through a tick slider (default, as in the iOS app), plus and minus, and an upright tick slider like a lamp's brightness. The choice is kept per room. - Room: the panel's room picker shows as many rooms on a page as look good, up to eight by default (two columns, up to four rows), so a home with eight rooms no longer has to page. The room configuration sets the upper limit per page (4 to 16); with more rooms per page the picker uses three or four columns. "Rooms per row" now belongs to the "All rooms" view. Suggested by @ferlodavid (#40). - Gate: Hauser speaks Spanish (Spain, informal "tú"). The whole interface is translated, Spanish dates and numbers follow es-ES, and the language picker offers Español. Translation by @ferlodavid (#30, #31). - Weakness with dignity: the library asks for the Jellyfin server address on its sign-in card when none is set yet. Before, it signed in against a built-in default and could not be set up from there. - Hidden simulator: tapping the clock five times opens it again with a mouse or at a relaxed pace; only the pause between two taps counts now. - A glance: the room temperature now shows on the room cards of the **All rooms** view and on the phone, not only in the panel's room picker, and it follows the room's **Show temperature** setting everywhere. - Room: in **Assign lamps** the light zone shows its real size as a see-through area with a white dot at its centre. Handles at the corners stretch it into an ellipse of any width and height, and a handle on top rotates it, so the zone can follow a lampshade. The night glow on the room image takes the same shape. - Room: **Assign lamps** is now **Assign devices**. Every device in the room can get a spot on the room image: lamps keep their light zone, everything else gets a point. Tapping a placed device on the room image does what tapping its tile does (switch, open or show the detail), holding it opens the detail, and a soft ring confirms the tap. A camera tapped on the image brings its picture to the front. - Room: one configuration mode. Pressing and holding a room or the background opens the room configuration, which now also holds what the layout panel from the right used to: a pill next to the control surface drags its width, the view switch sits at the top centre, rooms per page, rooms per row and rows at once sit under the rooms, and auto-hide, the second control surface and reset are in the side column. Swiping left on the stage opens it as well. - Room: a third view, **Image control**. Only the room image is shown; the control surface stays away outside configuration, and devices are used through their spots on the image. Swipe to change rooms; double-tap an empty spot to see the zones and names for a moment. - Energy on the phone: the house now stands large and sharp at the top instead of lying pale behind the numbers. The power right now sits in the sky of the picture; below it, solar, battery and grid stand side by side, each marked by a small coloured line instead of an icon. - Energy: a home battery can be assigned under Services → Energy (charge level, optionally its power, signed like the Home Assistant energy dashboard). The phone shows the charge level with a small battery and whether it is charging or discharging; the grid value accounts for it. - Energy: consumers that were saved with only their entity ID (such as `sensor.strom_pi_power`) now show their Home Assistant name, or else a readable form of the ID, on the phone and the wall panel. - The iOS app follows all of this with its next TestFlight build. ## [0.45.0] - 2026-10-15 - Room on the phone: an eye button hides the room controls so only the room image remains; tapping it again brings them back, as in the iOS app. - Cameras that Home Assistant cannot reach (offline, battery cameras without an image) are answered as unavailable instead of being recorded as Hauser server errors, so the error book no longer fills up with them. ## [0.44.0] - 2026-10-14 - A glance: room notifications occupy a scrollable sidebar on the right and follow the room controls' automatic-hide delay. A visible count opens every current message in full, including those beyond the first two on phones. Opening notifications no longer dismisses them. - The native iOS app receives Home Assistant's `hauser_` notifications and dismisses them at their source. Its notifications list also works with Apple Home states, observed doorbells and due reminders; notification links now open that list. Open windows remain until closed, and completing a reminder updates its source. - Room: Music Assistant players are discovered through Home Assistant in web and native media screens, with current title/artist, playback controls, volume and starting a track, album, artist or station by name. Music library browsing and queue editing are not part of this first integration. - The notification guide includes a call-monitor automation for the last caller display. Recipe integration remains a recorded suggestion. ## [0.43.5] - 2026-10-12 - Notification rules show the current Home Assistant entity name. Condition notifications disappear when none of the rule's enabled triggers still match; missing readings do not count as resolution, and finished laundry stays for acknowledgement. Existing rules receive the updated blueprints on startup. - The native iOS notification-rule editor now sends the server's trigger format correctly, including numeric thresholds and zero-delay state rules. - Image processing on older x86-64 hosts now has a native baseline fallback for CPUs that cannot run the WebAssembly SIMD fallback either. Modern hosts keep their existing image library. - Room selection and device controls now scroll together on web panels and in the native iPad app, keeping lower switches reachable when room cards take up the available height. Vertical touch scrolling also works when starting on the web room selector. ## [0.43.4] - 2026-10-11 - Scenes now keep checking actual device states until every remaining target is confirmed together. Only devices that still differ receive another command; temporary read or connection failures no longer end the check. New controls and Undo take precedence. Available in the web app and the native iOS app. ## [0.43.3] - 2026-10-10 - Dignity when things fail: older Linux x86-64 hosts no longer lose the entire app when the native image library crashes with an illegal instruction. Hauser tests the library in a separate process and uses portable image processing if that test fails. The portable library now matches the current sharp version. ## [0.43.2] - 2026-10-08 - A camera whose stream keeps breaking no longer floods Home Assistant: Hauser waits half a minute before opening the stream again instead of retrying many times a second, each time with a fresh still image. Cameras also pause while the standby screen covers them, while the room controls are hidden and while the browser tab is in the background; a camera popup still plays over the standby screen. The native iOS app stops fetching camera stills under its standby screen as well. - The image library behind room pictures is updated to close a reported security issue in one of its components. ## [0.43.1] - 2026-10-06 - Dimming an Apple Home light no longer keeps ramping after you let go: the brightness glides briefly and then goes straight to the value you chose, even when a lamp answers slowly. Same in the web panel and the native iOS app. ## [0.43.0] - 2026-10-06 - Moving to another Home Assistant no longer means starting over: Settings → Maintenance now downloads one backup file with rooms, devices, scenes, settings, notification rules, family data and room pictures, and restores it on any Hauser server. Credentials such as tokens and PINs stay out of the file. Restoring keeps the previous state as a backup on the server and restarts Hauser by itself. Available in the web panel and the native iOS app. ## [0.42.0] - 2026-10-05 - Room-picture settings now offer “Define objects” directly in the web and native iOS apps. View existing objects, change their type and outline, or add shapes freehand or with a rectangle and draggable corners. - Object edits also work with the bundled room pictures and remain associated with the selected room and picture. ## [0.41.0] - 2026-10-05 - Room and touch: drag window corners to fit slanted panes; existing polygon markings keep their shape when edited. Available in web and native iOS. - Room: uploaded pictures now receive a local overcast version alongside evening and night. Older pictures get missing overcast versions after updating, while supplied versions stay intact. Each derived version can be restored from day, without an AI account or provider call. ## [0.40.0] - 2026-10-04 ### Changed - Room-picture settings now separate choosing a first picture from managing an existing one. The current picture, its creation method, window marking and lighting variants are available directly in the room editor. You can change the method or choose another picture from the same overview. - Uploaded and manually created pictures expose their supplied and derived variants. Replacing a variant preserves the creation method and window areas. The native iOS app includes the same workflow in build 106 and saves Home Assistant picture changes to the shared server. - Reworked the README and wiki around setup choices, everyday use and the differences between the web and native apps. ### Fixed - Drawing window areas on a phone no longer triggers a room swipe. - Apple Home brightness changes through the web bridge ease through every dimming step, including with slow devices. A newer command cancels the previous transition without switching the light back on. ## [0.39.2] - 2026-10-03 ### Fixed - Light commands use a short 300 ms transition, including brightness changes from sliders, scenes and undo. Controls respond immediately while supported Home Assistant lights fade smoothly to the new setting. Also available in the native iOS app with build 103. ## [0.39.1] - 2026-10-03 ### Fixed - Room-photo uploads accept streamed requests without Content-Length, while retaining the 12 MiB limit and rejecting incomplete transfers. The image wizard now shows the specific upload error instead of a generic message. - The optional Tailscale sign-in reminder appears once per tunnel process instead of repeating every few seconds, without exposing its login URL. ## [0.39.0] - 2026-10-03 ### Added - Camera popups: long-press a camera to enable an automatic fullscreen view, choose a motion, person-detection or doorbell trigger, and set a duration from 5 to 120 seconds. The previous screen returns automatically; the popup can also be closed manually. Settings apply to this device. ## [0.38.1] - 2026-10-03 ### Fixed - **Grace under failure:** room sensors keep their correct room after Home Assistant areas are renamed, including humidity and CO₂. - A delayed failure from an earlier device command no longer rolls back a newer setting. Home Assistant timeouts while reading a response are reported as temporarily unavailable. - Sensor dropdowns remain readable on glass surfaces. Room and energy sensor lists can be searched by name or entity ID. - Updated development dependencies to address the reported vulnerabilities. ## [0.38.0] - 2026-10-02 ### Added - **Rain shows on the lock screen icon, and outside pictures get the weather too.** The weather line on the lock screen shows sun, clouds, rain or snow as it is outside instead of a fixed sun. A new room setting, “Weather across the whole image”, lets rain and snow fall over a garden or terrace picture instead of only inside drawn windows — on the panel and in the iOS app. - **CO₂ next to temperature and humidity.** Room settings have a CO₂ switch; the room tile on the panel, the value strip on the phone and the iOS app then show the room's CO₂ sensor in ppm. - **Glass light.** Under Appearance → Card style a third option keeps the glass look with fewer effects, for tablets where the full glass stutters. ### Fixed - Fuel stations from the Tankerkönig integration no longer appear under “Windows and doors” — their “open” sensor describes opening hours, not a door. A station that was already listed disappears on its own. - When a stored lock screen layout made the clock or week wider than the screen, arranging it left the element hanging over both edges. Elements now shrink a step until they fit, on the panel and in the iOS app. - The central temperature control explains how to get the room list back when a single climate entity is selected. ## [0.37.2] - 2026-10-01 ### Added - **Hauser tells you when it updates older room images.** After an update, Hauser recalculates the evening and night versions of room photos uploaded before 0.33. While it works, the room-image sign turns in the header and a notification says so; when it is done, a notification names the rooms that now darken in the evening. The same message appears in the iOS app, and the App log records how long it took. ### Fixed - **Older photos in the image library darken too.** Photos that sat only in the library, not assigned to a room, kept their bright evening versions and stayed bright when picked again later. ## [0.36.1] - 2026-09-30 ### Fixed - **The demo always shows the latest release.** Anyone who had opened the demo before could keep seeing an older version, because the new one waited for a confirmation the wall panel layout never offers. The demo now switches to the new version right away. ## [0.36.0] - 2026-09-30 ### Added - **A new area in Home Assistant becomes a room.** When a new light, switch, cover or vacuum shows up in an area Hauser has never seen, or a device on the panel moves there, Hauser adds the room on its own and puts the device in it, without running the setup again. The room starts without an image. An area whose room you removed in Hauser does not come back by itself. ## [0.35.1] - 2026-09-30 ### Fixed - **Room settings on the wall panel read calmly.** The column with the room's devices now stands on the same solid surface as the settings next to it, so the blueprint lines no longer run through names and values. Room image, scenes and lamps stay at the top while only the settings below them scroll, with room to breathe in between. Hints under these entries use Hauser's own typeface instead of a typewriter font. ## [0.35.0] - 2026-09-29 ### Changed - **Room settings sit right under "Assign lamps".** On the wall panel and the phone, heating, temperature, humidity, windows and motion are shown directly below the room image, scenes and lamps entries instead of behind a separate "Advanced" page — the same layout as the iOS app. ### Fixed - **Own room photos from older versions darken in the evening.** Photos uploaded before 0.33 kept their bright daylight look at night, because the evening and night versions were copies of the day picture. Hauser now recalculates them once on start, so old and new photos follow the time of day alike. ## [0.34.3] - 2026-09-28 ### Fixed - **Energy sensors save while the Energy page is switched off.** Choosing producers and consumers under Settings → Services → Energy failed with "Could not be saved" as long as the Energy module was off — which it is on a new installation. The selection now saves, stays when you switch Energy off and comes back when you switch it on. ## [0.34.2] - 2026-09-28 ### Fixed - **Panel settings survive a browser restart.** Panel width, rooms per row and "return to use mode automatically" now come back from the server when a browser starts with empty storage; before, the first start wrote the defaults over the saved layout, and the return-to-use timer lived only in the browser ([#28](https://github.com/ralleur/hauser/issues/28)). ## [0.34.1] - 2026-09-28 ### Fixed - **Room settings stay readable on the blueprint.** When you configure a room on the wall panel, the control column and the settings next to it now sit on solid surfaces, so the blueprint lines no longer run through names and values. - **Two texts follow the interface language.** The width under Settings → Control surfaces and the open-window note on the lock screen were still in German in every language. - **The lock-screen editor's bar is readable in the light theme.** The bar with Reset and Done and the size menu now sit on paper with black ink in every theme; before, the light theme drew them light with white text. ## [0.34.0] - 2026-09-28 ### Added - **Arrange the lock screen.** A long press on the lock screen (in edit mode) or "Customize the lock screen" under Settings → Ambient & Standby dips the screen into blueprint blue. Drag the clock, the weather, the week band, the shopping list and the notes wherever you like; tap one and a small menu next to it makes it larger or smaller in five steps — the menu jumps to the other side when it would run out of the picture, and back when there is room again. Every element keeps its natural anchor (the week band hangs from the bottom, notes hang from the top), so it grows the way it always did when events or items are added. Done keeps it, Reset brings the familiar layout back; deep night still shows only the dimmed clock in the middle. Stored on the device, like the other standby switches. The iOS app does the same on the iPad. ## [0.33.0] - 2026-09-27 ### Added - **The room-image wizard asks one question at a time and draws for free.** Do you have a ChatGPT plan? Sign in and everything is drawn for you. Do you have a Cloudflare account? Enter its ID and a Workers AI token, and the wizard draws within Cloudflare's free daily allowance; evening and night are derived from the day picture. Otherwise you draw it yourself: a workbench per room shows for day, evening with lights, night without lights and overcast whether a picture is there, only derived or missing, hands you the wizard's wording for each version to paste into Gemini, ChatGPT or Bing together with the input picture, and takes the finished picture back. Below it, mark the windows by dragging rectangles — rain and snow are drawn only there. The same four ways as in the iOS app. ### Changed - **Your own photo has a night now.** An uploaded photo gets evening and lights-off derived from it, darkened, instead of staying bright at night. - Pictures you drew or uploaded yourself are no longer sent to the image provider during the night runs for the overcast variant or the surfaces. ## [0.32.0] - 2026-09-27 ### Added - **Hauser speaks Dutch.** Choose Nederlands under Settings → Appearance → Interface language; dates and times follow, and a Belgian device gets the Belgian format. The translation was contributed by [@pservais](https://github.com/pservais) ([#26](https://github.com/ralleur/hauser/issues/26)); the texts for today's energy balance, the Apple TV remote and the quick-action bar were added since and still wait for a native review. The iOS app follows. - **The room image gets the panel to itself.** In the layout menu (long press on the free stage) the control surface can hide itself after a time without touch, from 5 seconds to 2 minutes; the next touch brings it back. "All rooms" shows as many rows at once as you set and scrolls the rest, like the phone, instead of squeezing many rooms into thin strips. Both also in the iOS app. - **Room setup on the panel stands where you control the room.** The room selection, scenes and tiles sit exactly where they are in the control surface, with the minus at the corner, holding to reorder and the plus tile to add; room image, lamps and settings stand beside them. Tapping another room in the selection sets up that room. ### Fixed - **A thermostat you add to a room becomes its climate.** A thermostat added to a room without one, for example a Versatile Thermostat, used to stay a plain device tile. It now drives the room's climate tile, target temperature and central climate control. Heat pumps and boilers stay devices, as in the setup. - **One unreadable calendar entry no longer breaks the standby week.** An event whose start Home Assistant sends in a form no date can be read from is left out, also from the stored calendar, instead of stopping the week on the standby screen and the agenda. ## [0.31.0] - 2026-09-27 ### Added - **Errors write themselves down.** Hauser keeps an error log: when something fails on the server, in the browser or in the iOS app, it notes where and what kind of error it was, and repeats only raise a counter. Entity IDs, names, readings, addresses and keys are removed before anything is written. The log stays in your home; the question mark offers to include it and shows every line first. Nothing leaves on its own. ### Fixed - **One odd device no longer freezes the rest.** When Home Assistant sent a state the panel could not read, the whole update stopped and every device after it kept its old state. That device now drops out alone and lands in the error log. - **Feedback from the iOS app without a Hauser server** goes straight to the inbox instead of opening a GitHub form. ## [0.30.2] - 2026-09-27 ### Fixed - **Notification rules reach Home Assistant again in the Add-on.** Saving a rule ended with "The rules were saved, but Home Assistant did not apply them" and a note that a bundled blueprint was missing. The Add-on image ships the built app only, and the server looked for its blueprints next to the source tree; it now finds them in the built app. The laundry assistant installed its automation over the same path and is fixed with it (#25). ## [0.30.1] - 2026-09-26 ### Changed - **The project page reflects the current release.** It now names both ways to Hauser — the panel for Home Assistant and the iOS app for Apple Home or Home Assistant, with the public TestFlight link — and walks through what changed since its last update: configuring on the blueprint and the mode mark in the title bar, the day's energy balance and the sun arc, the phone's quick bar, room sheet and in-place configuration, the week lying open on the standby map, presence dots on room tiles and the one type family. Every screenshot was retaken from this release and from the current iOS build. ## [0.30.0] - 2026-09-26 ### Added - **Shops can be renamed.** Under Settings → Content → Shopping list, open a shop and change its name; the bound list and the category order stay. Name a shop after the list it shows, for example one "Groceries" instead of three supermarkets. ## [0.29.0] - 2026-09-26 ### Changed - **Ticking off on the phone holds.** A tick no longer bounces back when the list happens to refresh at the same moment, and the ring is larger so it is easier to hit in the shop; the whole row still takes the tap. - **Done items stay under their shop for a day**, struck through, and a tap brings one back if a finger slipped. The separate "Done" group at the end of the page is gone. ### Documentation - The wiki explains how a **Bring!** list becomes a shop through the Home Assistant integration, and how any automation can **send its own notification** to the panel with a `hauser_` notification id. ## [0.28.0] - 2026-09-25 ### Changed - **The week on the standby screen lies open on the map.** Seven columns with a fine line per day instead of a dark glass band; times and today stand in dark amber on the light ground and in the gold of the logo at night. - **Configuring happens on the blueprint.** On the panel, room configuration now sits on a blueprint of the room instead of a dark veil, and moving the notes on the energy screen turns the house into a blueprint — as on the phone and in the iOS app. ## [0.27.0] - 2026-09-25 ### Added - **Room tiles show who is around.** A green dot appears on a room tile while a motion or presence sensor in that room reports someone, and fades away once the sensor goes idle. Rooms with a camera carry a quiet camera symbol in the top left corner. Both appear on the phone and in "All rooms". ## [0.26.1] - 2026-09-25 ### Fixed - **Notification rules save again.** Saving a new rule ended in "Saving failed" as soon as the list held more than the laundry rule, and the rules were lost whenever the App restarted. The server now accepts the full list and keeps it with the other household data (#25). - **A birthday no longer stops Hauser.** A birthday in the calendar whose name contains letters such as "Ł" or an emoji stopped the server on that day. ## [0.26.0] - 2026-09-24 ### Added - **Hauser follows Home Assistant.** Move a device to another area in Home Assistant and it moves to that room in Hauser, without reloading. A light, switch, blind or vacuum added to Home Assistant from now on appears in the room of its area. A device placed or hidden by hand in Hauser stays where it is until its area changes in Home Assistant. ### Fixed - **Room settings are stored for the whole household.** The chosen room sensors, the phone action, central climate and several settings of the iOS app were kept only on the device that set them. They are now saved centrally and shown the same everywhere ([#24](https://github.com/ralleur/hauser/issues/24)). ## [0.25.0] - 2026-09-24 ### Changed - **Rain shows on the standby screen.** The rain over the standby screen was so faint that it showed on no screenshot. Its streaks are now clearly visible and still quieter than the clock. ## [0.24.1] - 2026-09-24 ### Fixed - **A heat pump is no longer taken for a room's heating.** Setup used to put a heat pump or boiler found in a room on its tile, power button and flow temperature included. Setup now skips heating plants, and the room configuration has a “Show heating” switch to hide a heater that is already there. ## [0.24.0] - 2026-09-24 ### Added - **A moving blind stops with a tap.** While a blind, shutter or motorised door is opening or closing, tapping its tile stops it, like the switch on the wall. Blinds whose slats can only open and close get two tilt buttons in the device detail. ## [0.23.2] - 2026-09-24 ### Fixed - **A room's chosen sensor shows on every device.** The temperature and humidity sensor picked for a room was stored centrally, but other browsers kept showing their old choice until their site data was cleared. Every device now picks up the household's choice on start ([#24](https://github.com/ralleur/hauser/issues/24)). ## [0.23.1] - 2026-09-24 ### Fixed - **Remove a person from the reminders board.** The example residents could be renamed but never removed; the person dialog now has “Remove person”. Their reminders stay in the list and move to the shared ones; the last person stays, as in the iOS app. A pencil beside each name shows that a tap renames it. Reported in the simon42 forum. ## [0.23.0] - 2026-09-24 ### Added - **The TV gets its remote.** When Home Assistant places a remote beside a media player, as it does for an Apple TV, the device detail shows a direction pad with select in the middle and back, home and play below — as in the iOS app. - **The phone greets on special days.** Birthdays, holidays and the first snow now show their line at the top of the phone's home, with the same confetti as the panel; the rooms move down instead of being covered. - **Adding a device celebrates.** In the room configuration the plus springs into a gold check, six sparks fly up, and the device moves into the room. - **Today's energy balance.** A second tap on “Today” lays the day's balance beside the energy wall: the share of your use that came from your own sun, the gap the grid filled, and two bars on one kWh axis — produced above, consumed below, the part used at home bridged in gold. A tap on a piece shows its paper note with share and whether it was measured or calculated. On the phone the balance sits directly under “Today”. It reads the daily meters Hauser knows or, without them, the meters of Home Assistant's energy dashboard since midnight — as in the iOS app. - **The sun above the energy.** An arc between sunrise and sunset sits under the day's figures on the panel and beside the title on the phone: the path already walked drawn through, the one ahead dotted, flatter in winter; under clouds only a pale shimmer, at night the sun rests. Hauser asks the weather service it already uses for the times. - **The house follows the weather.** When it is cloudy the energy screen shows the overcast version of the house (the placeholder brings its own, a house drawn by the assistant has one too), and rain and snow fall over the whole picture — as in the iOS app, and switched off with the weather on the stage. - **The phone's quick bar is yours.** Its four fields are filled in “Adjust home” (swipe left on the rooms): all off, the central temperature over two fields or compact as a thermometer with the home average, and your own buttons. A button of your own runs its steps with one tap — scenes and devices from any room (toggle, on or off) and vacation mode — and a long press in edit mode opens its sheet with name, symbol and steps. The fixed vacation button is gone; a device you had placed on it becomes a button of your own, and a running vacation keeps its button so you can end it. - **Cameras together.** When a room has several cameras, they sit side by side in one split view with fine seams; with an odd number the first takes the full width. The room configuration switches it off, and the iOS app reads the same switch. - **Rename a room where you set it up.** A tap on the room's name (with the pencil) in the room configuration renames it for the whole household — on the panel, the phone and in the iOS app, which now uses the same way on a Home Assistant server instead of keeping the name on one device. - **Cameras before or after the tiles.** A camera stands above the device tiles when it comes before the first tile in the room's order, otherwise below — as in the iOS app. On the panel you drag it in the device list; in the phone's room configuration an arrow on the camera card moves it. ## [0.22.1] - 2026-09-24 ### Fixed - **Energy totals appear.** Week, month and total now count the meters Home Assistant already knows from its energy dashboard: grid import and feed-in, solar and battery; house consumption is balanced the way the dashboard does it. Setup never recorded such meters, so “Total” stayed empty in every home and week and month were estimated from power sensors. Where no dashboard is set up, the note under “Total” now says what it needs. ### Changed - **The mode switch in the title bar is the h signet.** In use mode the h stands alone; in edit mode the gold dot sits on it. Switching lets the dot spring in or pop away, and the new mode shows beside the h for two seconds. The h takes the colour of the date on the left, light over an image and dark on a plain surface, on the panel and in the iOS app. ## [0.22.0] - 2026-09-24 ### Changed - **Hauser writes in its own hand.** One type family now carries both voices: Alegreya Sans for everything you operate, Alegreya for the paper — the greeting in standby, notes, the calendar sheet and the energy figures. It replaces Inter and Instrument Serif on the panel, the phone, the iOS app, the project page and the docs. Figures stand upright and keep their width, so a clock or a slider value never jumps; every letter of the six languages is part of the font. - **The wordmark “hauser” beside the h signet is drawn from the same family** and no longer depends on a font installed on the viewer's device. ### Fixed - **A sensor tile keeps its value at full size.** A value whose box was a fraction of a pixel wider than a whole pixel counted as too long and shrank to the smallest size, for example “21 °C”. - **The media screen stays up when a player vanishes for a moment.** While Home Assistant reloads an integration, the player shows as unavailable instead of taking the screen down; the climate stepper ignores a thermostat it cannot see. - **The iOS app works with a Docker installation, too.** Adding devices to a room and camera pictures reached Home Assistant through Hauser only in the Home Assistant app setup; with Docker the iOS app could not assign a device and cameras stayed black. Hauser now uses the connection from setup for both. ## [0.21.5] - 2026-09-24 ### Fixed - **A room called “Constructor” no longer stops Hauser from starting.** The name became an internal ID that every JavaScript object already carries, and the start check failed with “The safe check failed”. Setup now gives such a room a safe ID, and the configuration check refuses reserved IDs. - **Lists with two entries sharing one ID keep working.** A CalDAV list can hand out the same ID twice; the notes page, the standby screen and the phone then failed with “each_key_duplicate”. The second entry gets a counter, and ticking it off still reaches the right item — in the web app and the iOS app. - **The scene editor survives a room without scenes**, and a device that disappears while its command is under way (Home Assistant reloads an integration) no longer takes its tile or detail down. - **Turning on Media without any media player now says so** instead of just failing: “No media player found. Media can be turned on after ‘Reload rooms and devices’.” ### Added - **Stress house, big round.** Every device type with every kind of broken data, forty more rooms, floods of events and list entries, every button and slider inside every device detail, scenes and room editing, a Home Assistant that restarts and drops devices, an empty house, an all-unavailable house and an imperial one — in the web app and the iOS app. The fixes above are what it found. ## [0.21.4] - 2026-09-24 ### Fixed - **A device detail opens even when Home Assistant lists an option twice.** A robot vacuum reporting its fan speeds as `quiet, quiet, max` took the whole view down with "each_key_duplicate"; modes, presets, sources and speeds are now listed once each. - **The notes page survives a reminder with an unreadable due date.** A to-do item whose due value is not a date stopped the page with "Invalid time value"; such an item now simply shows no due date. - **Energy settings save when a sensor also appears in a room.** Choosing the power sensor of a plug that is already shown in its room as a consumer was rejected as a duplicate and the save ended in an error. Energy only reads a sensor, so it may appear in a room as well; the same sensor twice within the energy selection is still refused. ### Added - **Stress house.** Before each release the built app is set up against a simulated Home Assistant full of real-world pitfalls and clicked through end to end — every room, every tile with its detail, every tab and settings section, the standby screen and the phone layout. The three fixes above are its first findings. ## [0.21.3] - 2026-09-24 ### Fixed - **Home opens again when two devices share a name across domains.** Hauser named its device tiles after the entity ID without the domain, so `switch.hallway` and `light.hallway` (Home Assistant's "switch as light" helper) or `media_player.tv` and `remote.tv` got the same name. In one room the home screen then failed with "each_key_duplicate", and tapping one tile could switch or open the other device. The second device now keeps its full entity ID. ## [0.21.2] - 2026-09-23 ### Fixed - **A house picture from the assistant turns grey on cloudy days as a house.** The overcast version that follows every new picture set was drawn with the room recipe, so an exterior set could come back as a room. It now keeps the recipe of the job that created the set, and the nightly run and the manual button recognise the picture assigned to "Outside (energy)". ## [0.21.1] - 2026-09-23 ### Fixed - **The standby city map is generated again.** One of the two public map services Hauser asked no longer answers and held every attempt for a minute and a half; the other turns requests away for a few seconds when it is busy. Generation then always ended in “The map service is currently unreachable”, whatever location you chose. Hauser now asks the working service first, falls back to a second mirror, and tries once more after a short pause before it gives up (#22). ## [0.21.0] - 2026-09-20 ### Added - **On the phone, configuring a room happens where you control it.** Opened from the room sheet, the configuration no longer flies in: the room picture dissolves in place into its own blueprint — fine light drawing lines on blue, computed from the picture you already have, so it works with your own photos too. The room name, the scene bar, every device tile and the climate card stay exactly where they are when you operate them. - **Arrange devices by moving their tiles.** Hold a tile for a moment and drag it to its new place; the others glide aside. A small minus on the corner takes a device out of the room, and a dashed tile after the last device opens the search with its category filters. The quick setup entries follow below the devices. - **A scene can set a colour per lamp.** The scene editor now offers colour next to brightness and colour temperature, with the same swatches as the lamp detail; “White” hands the lamp back to its colour temperature. Only what a lamp can do is shown. - **On the phone, a room's readings sit under its name.** Temperature, humidity and presence stand above the scenes instead of taking up device tiles — each only if the room measures it, and the presence circle glows green when someone is there. The climate controls live behind the temperature: a tap opens them, and a switch there puts the card back with the devices for rooms that want it. - **On the phone, the energy page shows your house.** The picture from the wall panel lies pale behind the figures — your own house if you assigned one — and fades towards the bottom, so the curve and the consumer list stay calm. ### Fixed - **The hint under “Generation” says which sensor is meant.** It is what your solar system produces right now, not the feed-in to the grid; Hauser derives feed-in and draw from generation and consumption itself. - **The laundry notification can be set up on any installation.** Validating or saving the washer or dryer ended in “Laundry setup failed. Try again from a new preview.” wherever Hauser was opened under an address of its own — which is every add-on installation. The setup now accepts the address it is served from, like every other part of the settings (#21). - **Saved energy sensors stay visible as saved.** After saving the selection under Services, the page went back to the old selection as soon as you left and returned, so it looked as if nothing had been saved. The selection now stays as you saved it, and the reload hint appears, because the energy page picks up new sensors on the next start. - **A room you created yourself can pick its sensors.** Under “Advanced”, a room only offered sensors from the Home Assistant area with the same name — a hand-made room has none, so the list stayed empty or showed a single sensor. The temperature and humidity pickers now also list every other sensor in the home, and sensors and contacts you place in the room count as the room's own. ## [0.20.6] - 2026-09-20 ### Changed - **Removing a device from a room is an animation, not a jump cut.** The row puffs up for a moment, tips out of the list to the right and fades, and the rows below glide up into the gap once it is gone. ### Fixed - **Dragging devices into order no longer shivers.** The row now hangs on the finger while its neighbours glide aside, and it changes places only after passing a quarter of the next row — before, the list swapped back and forth along the edges of the rows it was measuring against. - **The bottom bar on the phone sits evenly.** The navigation pill kept less room above it than below, so on phones with a home indicator it looked pushed towards the quick actions. Both gaps now match on every device. ## [0.20.5] - 2026-09-18 ### Fixed - **A hand-written Compose file gets the picture wizard.** The image now sets the room-image boundary (`HMI_ROOM_IMAGE_AUTH_MODE=direct`) itself. A Compose file that does not copy the shipped environment answered `503 AUTH_BOUNDARY_MISSING` to every room-image request, so saving the OpenAI key and opening the wizard failed ([#19](https://github.com/ralleur/hauser/issues/19)). - **The ambient texts stop asking for a model that is not there.** Hauser only calls a language model for the standby lines when `HMI_AMBIENT_HOST` or `HMI_AMBIENT_PORT` names one. Without it the route answers `204`, the lines come from the built-in generator as before, and the browser console no longer shows a `502` on every refresh ([#19](https://github.com/ralleur/hauser/issues/19)). - **A fresh add-on install no longer hits a missing image.** The add-on manifest on `main` named the new version before its image was built, so for the first hour after a release the Supervisor failed with `manifest unknown` ([#20](https://github.com/ralleur/hauser/issues/20)). The release now publishes the image first and makes the version visible afterwards. ## [0.20.4] - 2026-09-17 ### Added - **The energy screen takes your own photo directly.** Long-press the picture in configure mode and choose "Choose custom image" — the photo becomes the house picture and lands in the library, just like a room picture. Until now the energy screen only offered the picture wizard or an image already in the library. ## [0.20.3] - 2026-09-17 ### Fixed - **A calendar with a recurring event opens again.** Every occurrence of a series carries the same identifier, and the calendar view stopped with "This view failed to build" as soon as a series had more than one date in view. Each occurrence now has its own identifier. ## [0.20.2] - 2026-09-16 ### Changed - **The project page now opens with both views of the home screen.** The hero shows real captures of the two home views — one room filling the panel, and all rooms as tiles — with the tile view after dark, where a room with a lamp on carries its lit picture and a room with every lamp out carries the dark one. A new section walks through the tile view by day and after dark, and every screenshot on the page was retaken from the current release. ### Added - **Every release now shows up as a GitHub release**, with its changelog section as the notes. Watching this repository for releases tells you that a new version exists — until now only a tag was pushed, which notifies nobody. Home Assistant add-on installations were unaffected: the Supervisor has always shown the update inside Home Assistant. - **A moving `latest` image tag** for Compose installations that would rather follow the newest release than a fixed number. Pre-releases are excluded, and `compose.yaml` keeps pinning an exact version by default. ### Fixed - **A view that fails to open now says so.** Until now anything that went wrong while a view was being built left "Loading view." on screen forever, with the cause visible only in the browser console. The view now shows what went wrong and offers to try again, and the rest of the panel keeps working. Retry buttons in the shell follow the interface language again. - **A damaged job no longer switches the picture wizard off for good.** One incoherent record kept the job store closed, and inside the add-on nobody can reach the folder to clear it, so the wizard answered 503 forever. The folder is now set aside once — nothing is repaired, nothing is deleted — and the store opens empty. - **A well-metered house can save its energy selection again.** The server accepted at most 64 consumers, while the settings page pre-selects every power sensor Home Assistant reports — a home with more of them could never save the page. The limit is now 256, and going past it says so instead of failing silently. ## [0.20.1] - 2026-09-15 ### Fixed - **An all-day event fills one day again, not two.** Calendars that deliver a plain date — iCloud and CalDAV among them — were read as UTC, so a birthday stretched into the next morning and showed up as a multi-day bar. - **Picking your own room picture now says when the device cannot do it.** Where the image library does not run, the upload said only that the picture could not be saved; it now names the reason, and the log records what really failed instead of a follow-up error. - **Document storage can be set up from the panel.** Its PIN used to come from the Mac keychain only, so in the add-on the storage stayed locked forever. PIN, address and token now live together under Settings → Services. - **Sheets on the phone come and go like app cards.** The room sheet, the More sheet and the room setup now slide out in the same time and curve they slide in, without fading; after a swipe the sheet continues from where your finger let go instead of jumping back up first. ## [0.20.0] - 2026-09-14 ### Changed - **The demo greets you with the standby screen.** The first visit in a browser tab opens on the clock over the street map, the way a panel rests on the wall; a tap wakes it. A reload in the same tab starts on Home. Real installations are unaffected, there the standby timer decides. - **The demo's street map is Cologne**, five kilometres around the cathedral, drawn from OpenStreetMap data like a real household's map. - **Wiki pictures of the mode mark** in the title bar are current again. ## [0.19.1] - 2026-09-14 ### Fixed - **The room goes dark again when the last lamp goes out.** Since blinds, switches and vacuums joined a room's device list, an open blind counted as "on" and kept the evening picture lit. Only lamps decide now. - **Room pictures on the phone in the demo.** The demo build skipped the phone-sized picture variants, so the room tiles stayed empty. - **Screenshots and wiki refreshed** for the glass card style, the question mark in the title bar and the phone's frosted-glass controls. ## [0.19.0] - 2026-09-14 ### Changed - **A new house on the Energy screen.** The bundled placeholder — shown wherever no exterior picture of your own is assigned, and in the demo — is now a modern two-storey family house with a solar roof, day and night, with the notes for solar, load and grid placed on it. ## [0.18.6] - 2026-09-14 ### Changed - **Home, Shopping list and Reminders are the phone's default bottom tabs.** Everything else waits under "More". A device with its own saved order keeps it. ## [0.18.5] - 2026-09-14 ### Fixed - **The active tab's highlight on the phone now encloses icon and label** completely; on Energy and Shopping list the icon used to peek out at the top. ## [0.18.4] - 2026-09-14 ### Changed - **The phone's off button is all symbol.** The power sign now nearly fills the button. - **The "off" safety prompt is off by default.** New installations switch everything off without asking; the prompt with its cut-off time can be turned on under System → Interface & controls. A device that already had the prompt on keeps it. ### Fixed - **Climate pill and "All quiet" sat in the middle of the panel's footer.** In the published build the footer's base stylesheet won over the panel layout, so the climate control and the security status crowded around the navigation instead of standing at the left and right edge; the workshop build had the stylesheets in the other order and did not show it. The panel footer rule now wins regardless of bundle order, and the status pill keeps its rounded glass shape. ## [0.18.3] - 2026-09-14 ### Changed - **The off button on the phone shows only its symbol.** The word below the power sign is gone; the button keeps its size and its spoken label. ## [0.18.2] - 2026-09-14 ### Changed - **Phone controls now match the panel's footer exactly.** Off, climate, holiday and the navigation pill carry the same dark frosted glass as the panel's pills, with light text, a faint bright edge and the same amber highlight behind the active tab — identical in light and dark mode, as on the panel. The calm taupe ground behind the room tiles stays. ## [0.18.1] - 2026-09-14 ### Fixed - **Stronger contrast on the phone controls.** Text and icons on the quick actions and the navigation pill are darker and more opaque, the frosted glass a little lighter and denser, and the active tab a deeper amber, so labels read clearly on the taupe ground. Dark mode gets the same lift. ## [0.18.0] - 2026-09-14 ### Changed - **A quieter phone home.** In the glass card style the room tiles now stand on a calm, warm taupe ground instead of the panel's relief: no waves or diagonals between the tiles, only a very soft shift of light across the bottom of the screen that stays put while you scroll. Off, climate, holiday and the navigation pill share one matte frosted glass — a lightly tinted warm grey with real blur, a faint bright edge and a soft shadow — with dark warm-anthracite text and icons; minus stays blue, plus and off red, the active tab amber. The two control rows sit a little closer to the tiles and are slightly more compact; every touch target stays at least 48 px. Dark mode gets the same material in its dark form. Panel and standard card style are unchanged. ## [0.17.1] - 2026-09-14 ### Fixed - **The phone navigation pill is frosted glass too.** In the glass card style it now carries the same dark pane as the quick actions and the panel's footer pills, on every phone screen, so it no longer stands out as a light bar under the dark glass above it. ## [0.17.0] - 2026-09-14 ### Changed - **The phone home stands on the same relief as "All rooms" on the panel.** In the glass card style the room tiles no longer sit on a flat surface: the quiet light or dark relief from the panel lies behind them, and the quick actions row — off, climate, holiday — becomes the same frosted glass as the panel's footer pills. The tiles scroll on behind it and shimmer through instead of vanishing into a solid band. Other phone screens are unchanged. ## [0.16.1] - 2026-09-14 ### Fixed - **Swiping down closes the room sheet on the phone again**, even when the room has so many devices that the list scrolls. As long as the list sits at the top, dragging down pulls the sheet away; further down, the same movement scrolls the list. ## [0.16.0] - 2026-09-14 ### Added - **Say something, right from the panel.** A question mark at the top right, next to the standby button, opens a small sheet: "Something is wrong" or "I would like …", a sentence, and an optional reply address. No GitHub account, no forum. The sheet shows what travels along — version, language, screen size, connection state — before you send. Messages go to a postbox that the maintainer empties regularly; the demo shows the sheet but sends nothing. Available in all six languages. ## [0.15.2] - 2026-09-13 ### Added - **Device groups.** Lights, fans, plugs and blinds that always act together can become one tile: the device detail has a group button at the top right instead of the close cross. Pick two or more devices of the same kind from any room; the group takes the place of the device it was created from, and every touch — on, brightness, colour, speed, position — goes to all members with the same value. The group can be edited or dissolved later; dissolving puts the original device back in its place. Groups live in Hauser only. ### Fixed - **Lights that are on look on again.** In the glass card style, the icon chip of a light tile stayed grey on the phone room sheet and on the wall panel, and dimmed lights no longer showed their level. The chip now turns warm when the light is on and follows the brightness, and the same applies to the symbol and power button in the device detail. - **The layout sliders on the wall panel move smoothly again.** Dragging the "Adjust size" or "Rooms per row" ladder in the layout menu no longer stalls: the swipe that closes the menu had been grabbing the finger. - **Scene pills wrap instead of shrinking.** In the glass card style the scene pills used to squeeze and cut off names; now they fill the row and move to a second row when the control surface is too narrow, following its width like the device grid. ### Changed - **The layout menu is a glass sheet.** In the glass card style the layout menu on the wall panel now uses the same frosted dark sheet as the other overlays, with its setting cards as light glass on top. - **Hauser opens in the language of the device.** Without a stored choice the interface follows the browser or tablet language, and when none of the six languages fits it now shows English instead of German. The language picked in the settings — or during the setup wizard — still wins and is remembered on that device. ## [0.15.1] - 2026-09-12 ### Fixed - **Panel pages were empty in the published build.** In 0.15.0 the stage on the wall panel shrank to the height of the top bar, so every page showed only the background relief; the workshop build had the stylesheets in the other order and did not show it. The frame rule now wins regardless of bundle order. ## [0.15.0] - 2026-09-12 ### Added - **Standby: the calendar can stay off the lock screen.** A new switch under Appearance › Ambient & Standby, "Calendar in standby", removes the week strip from the bottom of the lock screen; the wall then shows only the clock, the weather and the notes. It stays on by default. ### Fixed - **Room setup: adding a device.** Tapping into the search field now glides it to the top instead of jumping. Tapping a type filter such as "Light" works on the first tap; before, on the wall panel the list snapped back and the tap was lost. ### Changed - **Navigation: the marker glides.** The small gold underline under the active tab is gone. A warm, translucent pill now sits behind the active tab and glides to the next one when you switch, with a light spring that overshoots a touch and settles; the icon of the active tab lifts slightly and takes the gold. Reduced-motion settings switch without movement. - **Pages move with the bar.** Switching pages is no longer a plain crossfade. The new page comes in a short way from the side its tab sits on, slightly smaller, and settles; the old page eases out to the other side. Going back runs the other way. Reduced-motion settings switch without movement. - **Home comes back without a white flash.** Returning to Home from another page shows the room picture from the first frame; before, the stage was briefly white while the picture was decoded again. - **Touch: the lock screen opens instead of cutting.** A tap on the standby screen no longer jumps to the next frame. A soft ring runs out from the finger across the glass, the clock lifts a touch and blurs, the week strip and notes sink away, and the pane fades to reveal the room beneath — just under a second, only transform and opacity. Locking is the mirror image: the pane settles in, the clock comes into focus from a soft blur, the week strip and notes rise into place, and from the standby button the ring runs the other way, drawing in to the button. The idle timer settles the pane quietly without a ring. Reduced-motion settings skip all of it. - **Phone shopping list: a quiet checklist.** The items carry the page now, the interface steps back: a smaller title, store names as compact headings with a small count beside them, items in regular weight, no dotted separators. Every row is 48 px tall and tappable in full, with an empty circle on the left that fills in the warm accent when you tap it; the item then moves to a "Done" group at the bottom, where the store stands small beside it and a tap brings it back. A short strip above the navigation offers "Undo" for five seconds after each check. The plus buttons are gone: each store ends in a muted "Add item" row that turns into the input on tap and stays open for the next item after Enter. The sync time sits small under the title; only an error stands out. Sort and refresh are two icons in the top right, the active sort state in amber. - **Phone energy: the story behind the numbers.** The page opens with the power right now, large and in watts when it is small, with solar and grid draw or feed-in as two quiet lines beneath. The period control belongs to the history below it, one row "Today · Week · Month · Total" with the concrete range underneath, so it is clear that the live value stays untouched and that "Week" is the last calendar week. Today shows the load curve of the day as a warm area over 24 h and a comparison with yesterday up to the same time of day; the other periods show compact numbers. A "Top consumers" list with thin share bars replaces the two navigation buttons; "Show all" unfolds the rest. Several plugs are called "Measured devices", not a house load. The status sentence, the "grid flow" line and its orange dot are gone; only missing data gets a note. ## [0.14.0] - 2026-09-11 ### Added - **Home: All rooms at a glance.** The layout menu (long press on the free area) gains a "View" pill: "Full screen" is the familiar stage — one room picture, the room picker at the top of the control surface. "All rooms" drops the picture and shows every room as a tile, the same tiles as on the phone, with picture, name and light status. The room picker leaves the control surface, which now belongs entirely to scenes and devices and carries the room name as its heading; a tap on a tile brings that room into the control surface. "Rooms per row" sets the tile columns. In portrait the tiles take the upper band, the controls the full width below. - **Home: swipe the control surface away.** A swipe to the left on the control surface lets it fly out of the picture, in "Full screen" and in "All rooms" alike. The stage then belongs entirely to the room picture or the tiles, which spread to the full width. The next touch anywhere brings the surface back; a tap on a tile also selects that room. - **Phone home with many rooms.** The room grid scrolls again and fades softly behind the quick actions (off, climate, custom button), which stay put at the bottom; before, with many rooms the tiles ran underneath them. A swipe to the left on the grid pulls a side sheet in from the right, following the finger like the control surface on the panel; it holds rooms per row (1 to 3) and a switch to hide the quick actions, and a swipe to the right drags it out again. Both are per device, like the order of the bottom bar. - **Blinds come along from setup.** Covers (blinds, shutters, awnings) are now a role of the household: the setup wizard hands them over into their rooms like lights and switches, the household config accepts several per room, and the command contract carries open, close, stop, position and tilt. Before, a cover only reached a room through "Add device". The cover sheet (open, stop, close, position ladder, tilt) is unchanged; the demo shows one in the living room. - **Sensors pick their symbol.** A sensor without a symbol of its own gets one from what it reports: device class first, then unit, then words in its name or entity id, German and English. Battery, temperature, humidity, power, energy, voltage, current, CO₂, air quality, pressure, light, rain, wind, water, gas, signal, motion, door, window, smoke and more; the neutral gauge stays for everything else. ### Changed - **Layout menu without ceremony.** The layout menu has no title and no "Apply" or "Cancel": every setting takes effect the moment it is set. It stays on the right and flies in from there, over everything instead of pushing anything aside, and leaves on a swipe to the right, a tap beside it or Escape. A swipe from right to left anywhere on the stage opens it, in "Full screen" and "All rooms" alike. "Reset to default" sits top right. The second control surface is added at the bottom and gets a fixed room of its own, chosen right there. - **Climate is a tile.** In the control surface the thermostat shrinks to a tile the size of a device, showing target and current temperature and the mode as its symbol, with no controls of its own. A tap opens the familiar thermostat as a sheet: current, setpoint with minus and plus, modes. A long press opens the tile's settings: "Controls in the surface" brings the thermostat card back into the control surface, "Tile shows" picks target, current or both, and "Step size" sets 0.5° or 1° per tap. - **Sensor tiles show the value.** A sensor added to a room shows only its reading on the tile, not its name. The device sheet has a switch "Name on the tile" for the cases where the name matters. - **Room: the thermostat never wraps.** When the controls stay in the surface, the climate card is one light control surface at full card width: the current temperature sits as a line above the setpoint, the frame around the controls is gone, and the setpoint takes three fifths of the card at hero size, the modes the rest. At any control-surface width the card keeps its shape instead of breaking into two rows. - **Gestures forgive a crooked finger.** A horizontal swipe no longer breaks off when the finger drifts, and it claims the touch before the browser starts to scroll. Pressed feedback on a tile waits a moment on touch, so starting a scroll on a tile no longer makes it pop. ## [0.13.0] - 2026-09-10 ### Added - **Raum: The device search offers the types a room can take.** A tap into the search field brings up pills — Light, Switch, Climate, Sensor, Media and the rest — each with the number of devices behind it. One pill lists that type without typing a word; the first thirty, with the remainder named below. As soon as a letter is typed the pills step aside and the name search takes over. - **Telefon: The pairing card opens the app on the same device.** Whoever reached Hauser from their phone's browser cannot scan a QR code that sits on the same screen. The card now offers "Open in the app on this device" — the same link the code carries, as a handle. The wall panel does not show it. ### Changed - **Raum: The stage fades softly from room to room.** The slow dissolve that used to happen only when the last light in a room went out now carries every room change, whatever time of day it is. Switching a light on inside a room stays instant — that is a switch, not evening light. - **Einstellungen: New symbols for the picture assistant and the catalogue.** Both are drawn now instead of pixelled: no background, crisp at any size, and they follow the theme like the Hauser mark — light on dark, dark on light, with the spark and the sun staying gold. - **Everywhere: No more scrollbars.** Hauser is swiped and scrolled, not dragged by a bar; with a mouse attached the system used to draw fixed bars through cards and glass surfaces. Scrolling is unchanged, only invisible. ### Fixed - **Raum: The climate card no longer breaks into two rows when the column gets narrow.** The current temperature, its symbol and its label shrink instead, so the target temperature stays beside them. - **Raum: The first tap on a suggestion in the device search arrives.** Leaving the search field gave back the room the sheet had borrowed for the keyboard and moved the section between press and release, so the tap landed beside its target. ## [0.12.1] - 2026-09-10 ### Fixed - **Raum: One damaged picture set no longer keeps the house from starting.** After an update across several versions, a set could lose its files while the phone derivations were being added, leaving its catalogue entry in the old shape. The store then refused the whole catalogue and the service never came up. A set that breaks the contract is now passed over — the room falls back to its default picture, the house starts, and the log names what was skipped. The contract itself stays closed: what is passed over is not served and not written back. - **Raum: The overcast variant survives the derivation.** Adding the phone derivations replaced the set's directory and dropped the optional overcast picture, which costs its own model call. It is now carried across. ## [0.12.0] - 2026-09-09 ### Added - **Telefon: The quick action next to the temperature can carry any device.** A long press on the vacation button opens an editor: pick any switchable device and it sits behind the button from then on. Its icon is suggested from the device itself, unless you deliberately choose your own from the icon catalogue. - **Telefon: The bottom bar can be arranged from the More menu.** Two groups — the four slots of the bar and everything else. Drag a category upwards past the heading to pin it below, or use plus and minus. "More" holds the last slot as long as something sits behind it. - **Raum: The house hands its room pictures to devices without AVIF.** `GET /api/app/hero/:roomId/:variant?w=` returns the room's picture as JPEG in the requested width — the same picture the wall shows, for the watch. - **Raum: The demo has a ceiling fan.** It hangs in the bedroom and shows the fan panel with speed, presets, oscillation and direction. ### Changed - **Blick: The day theme stands on a warm ground.** The light surfaces move from a cool grey to a warm off-white, and cards, overlays and borders follow the same undertone so the surfaces no longer look patchy against each other. The night theme is untouched. - **Telefon: The More menu shows every category, not only the hidden ones.** It carries a grip, a subtitle and one button that leads to arranging the bar. Whoever looks here should not have to know where something hangs first. - **Telefon: A swipe down closes a room from anywhere in it.** The gesture used to hang on the sheet's head alone; it now works across the whole surface, and the room editor has it too. While the content is scrolled, the downward movement belongs to the list again. - **Telefon: The device search lifts itself above the keyboard.** Tapping the search field in a room's device list moves it to the top of the panel, so the suggestions stand above the keyboard instead of behind it. - **Telefon: Energy reads as a page.** Four periods sit in two rows with the active one marked, the switch between flow and consumption says in plain words where it leads, and the readings fill their row instead of standing narrow at the edge. - **Telefon: The shopping list fits a phone again.** Title and tools shared one line and pushed the page sideways on a 390 pixel screen; they now wrap and the page can no longer be scrolled horizontally. - **System: The settings list sits evenly again.** The hairline between two groups carried eight pixels of air that fell to one side, so the last entry of a group sat visibly too high and the first of the next too low. - **System: Without a Hauser server, the settings only show what works.** On the Apple Home path there is no Home Assistant, Jellyfin, Paperless, family data or room picture assistant — those sections and entries now stay out of the list and out of the search instead of reaching into nothing. - **System: The settings load one section at a time.** The screen used to bundle all fourteen sections into a single 416 KB chunk that the companion app could not load at all; it is now 17 KB plus the section you open. - **Steuerung: The first tap after opening the app arrives.** Until the socket stood, every command was dropped — exactly the window the first grab falls into. Commands are now accepted and sent as soon as the connection is up. - **Panel: The iPad's own status bar steps aside.** Hauser draws its own header with clock, date and connection, so the system clock no longer stands above it twice. It returns as soon as the view switches to the phone shell. - **Blick: The project page shows the standby in six places.** Cologne, Paris, Barcelona, New York, Amsterdam and a Bavarian village take turns behind the clock, by day or by night, to show that the map is your own streets and that the radius picks itself. The room section switches the real screen through sun, rain, evening and lights off, controls included, and the two voices section shows the lamp and fan panels stepping through their states. - **Blick: The project page says what Hauser is, in the first sentence.** The headline used to sit inside the picture frame and was cut off on phones, so the first screen showed a living room and not one word about the product. Headline, a plain description and the install facts now come before the picture, followed by three sober paragraphs: what it sits on, what it runs on, and who owns the data. ### Fixed - **Blick: Rain and snow fill the whole screen.** The drifting layer began each pass with its lower edge on the top of the screen, so it only snowed in the upper part of the picture until the pass was nearly over — in standby as well as in the window of a room. The movement now runs downwards out of its resting position and covers the surface at every moment. ## [0.11.0] - 2026-09-07 ### Added - **Steuerung: Every device Home Assistant can control has its own second level.** Blinds and valves get open, stop and close plus position and tilt; vacuums start, pause, return to the dock and choose their suction; locks lock, unlock and open the door; humidifiers and water heaters carry their target and operating mode; lawn mowers mow, pause and dock; alarm panels arm and disarm, asking for a code only when the device requires one; numbers, selections and buttons can be set, chosen and pressed. Thermostats show every mode they report, along with fan, preset and swing, and their scale follows the device's own limits. As with the fan: what the device does not report does not appear. ## [0.10.1] - 2026-09-07 ### Changed - **Blick: The project page tells the story of the panel, not a feature list.** The first thing on it is the living room without any controls, moving through sun, rain on the window, evening and night; then the three moments the interface is judged by, the two voices of paper and instruments, and what happens when the house does not answer. Every screenshot was retaken from the current default pictures. - **Raum: The demo home has solar on the roof.** The energy picture in the demo carries all three notes — solar, measured load and grid — with a day curve for generation and consumption, and the notes sit where they do not cross the roof. - **Blick: The demo opens quietly.** No promotional card for the room-image wizard, no camera tile without a camera image, and the scribbled tips wait until you touch the screen for the first time. ## [0.10.0] - 2026-09-07 ### Changed - **The room tiles on the phone go dark with the room.** In the evening a tile now shows the unlit night picture whenever no light is on in that room, and the lit one as soon as a lamp burns — the same reading the large stage has always had, and the change fades in the same way: when the last light in a room goes out, its tile sinks slowly into the dark instead of flipping. The tiles still load the small phone-sized picture, so the darkened version costs no more to show than the lit one. ## [0.9.1] - 2026-09-07 ### Added - **Fans have their own control panel.** A fan no longer hides behind an on/off tile alone: press and hold it and the panel shows what the fan can actually do — speed as a tick scale in percent, the preset modes the device reports (normal, breeze, sleep, turbo, whatever it offers), oscillation on or off, and the direction of rotation. Only what Home Assistant reports as supported appears; a plain on/off fan keeps its plain panel. ### Changed - **A running fan turns.** Its symbol rotates while the fan runs, on the tile and in its control panel, and the tempo follows the speed: full speed turns fast, the lowest step turns slowly, off stands still. Reduced motion keeps the symbol still. - **A dimmed lamp looks dimmed.** The symbol of a dimmable lamp now carries its brightness in its colour, on the tile and in its control panel: full brightness glows in the full accent, a low step stays visibly muted, off remains grey. The step is readable at a glance, without a number. ### Fixed - **Hauser starts on older processors again.** The image library ships prebuilt binaries that require an x86-64-v2 processor; on older hardware — and in virtual machines that present a generic CPU without SSE4.2 — loading them failed, and because the image library is loaded at startup the whole add-on refused to start instead of merely losing room images. A portable WebAssembly build now ships alongside and is used automatically when the fast one is rejected, and a failure to load images can no longer take the panel down with it. Thanks to @nadi1971 for the report (#18). ## [0.9.0] - 2026-09-07 Everything below arrived between 0.8.2 and this release. It is one update: the energy screen became a picture of your own house, the calendar became a sheet of paper, and several places stopped claiming things the house cannot measure. ### Added - **The energy screen can show your own house.** The image assistant and the image library now offer "Outside (energy)" as a target next to the rooms. An image set assigned there becomes the stage of the energy screen: the day version by day, the night version at night, fading between the two at dusk exactly like a room. The detection knows solar modules as a new kind of area, so the generation figure hangs on the real modules and the load figure on a window; the grid figure points to the edge, where the grid is. Without an assigned set the built-in picture stays. - **The energy picture has a menu.** Press and hold its background in configure mode and a small sheet offers what belongs there: create your own house with the assistant, pick a picture from the library, move the notes, or jump straight to the sensor assignment in the settings. - **The notes on the energy picture can be moved.** Every note and its pin can be dragged; "Done" keeps the arrangement, "Reset" returns to the built-in positions. Positions belong to the picture they were set on, so a new picture starts again from its template. A note can never end up outside the visible picture, under the tab bar or over the figures at the top left. - **The workshop simulator knows the energy screen.** Sliders for generation and load, presets for noon, evening and grid draw, and the two special cases — a house without a generation sensor and a house without any sensor. ### Changed - **Energy lives in the picture.** The column of tiles is gone. Live production, measured load and the grid sit as small paper notes in the picture, each pinned by a hairline to the thing it measures, while the free wall carries the day: the period's leading figure large in the paper voice, the rest small beneath it. The period chips stay; the flow diagram, the consumption card and the grid of figures are gone. What the house cannot measure gets no note. - **True curves.** The day's line was an invented shape. It now comes from Home Assistant's five-minute statistics of the configured sensors, and it is simply absent until there is data. Last week, last month and total show real sums from the long-term statistics of the meters — produced, fed in and drawn only where a sensor exists. - **A new built-in picture for the energy screen.** No longer a balcony over a specific city composed for a sidebar that no longer exists, but a generic house from the garden in Hauser's illustration style, day and night. It is also the demo picture. - **The calendar is a sheet of paper, not a table.** Hairlines instead of a grid, small caps weekdays, a serif month and serif day numbers. The current week sits at the top in full size, the coming weeks follow a step quieter, and a week without appointments folds down to its numbers. Today is a small pinned slip instead of a blue box. All-day entries are paper notes; timed entries are ink, with the time in the colour of their calendar instead of a coloured edge. Every calendar gets its own paper colour, and a resident's own calendar wears the resident's colour from the pinboard. The "updated at" line and the refresh button are gone: the sheet refreshes on its own. - **A clock never goes out.** When the household configuration is missing or the server stays silent, the panel no longer imitates a dashboard. It shows the time, the date and the coming days in the quiet standby style; the cause is one translated sentence at the bottom, next to a reload button. - **Losing the connection no longer stacks a banner over the stage.** The room picture stays where it is and the controls dim as before. On the panel the title bar carries the cause and reconnects on tap; on the phone a small floating chip does the same without pushing the content down. - **No dashes where the house has nothing to measure.** A figure only exists with a reading: without a value the field is gone, and without fields the section is gone — on the panel, on the phone, in the sensor tile and detail window, and for the media source. - **The settings fit on one screen.** The sidebar lists nine areas without scrolling, separated by hairlines instead of five headings. Maintenance and diagnostics, the library override and the unfinished hotel mode are folded away: they appear when the hidden gesture reveals them (tap the logo three times) and the search finds them at any time. - **The consent line in the image assistant names the purpose**, not a number of image calls. The number of provider calls still shows next to the button. - **The ambient street map is on by default.** It still appears only once a location is set and the server has rendered the map, so nothing changes for installations without one; a second device no longer starts without the background. Turning it off is what gets stored now. ### Fixed - **The calendar is there from the first minute.** On a freshly set-up panel the calendar tab and the standby week strip only appeared after the first five-minute refresh, because the first fetch ran before the connection to Home Assistant stood. Now every stale reading reloads the moment the connection is established. - **A house photo stays a house.** Sending a photo of your house through the image assistant with "Outside (energy)" as the target produced a living room, because every prompt spoke of a room. The outside target now has its own recipe for all five passes. - **A green dot that tells the truth.** The image assistant showed "Connected" as long as a credential file existed, even when the ChatGPT sign-in behind it had long expired. The status now asks whether the sign-in still carries; if it does not, the card says so and offers the sign-in right there. If the machine is simply offline, nothing is claimed either way. - **The image assistant says why it stopped.** Every failure from the image provider read the same sentence. An expired sign-in, an exhausted quota and a refused photo need different next steps; each reason now has its own sentence, and it names what to do. - **The image assistant keeps its target** while the pictures are generated, even if the dialog is closed in between. ## [0.8.2] - 2026-09-06 ### Fixed - **The room editor opens again.** Since 0.8.0 the build ships a shared chunk named `room-images-` next to the room-image assets, and the asset route claimed everything starting with that prefix, answering 404. The route now claims only the `/assets/room-images/` folder; bundle chunks are served statically. - The startup self-check no longer logs a bogus "0 files missing" line when only the room-image job store failed to load. ## [0.8.1] - 2026-09-06 ### Fixed - **The App starts even when the room-image assistant's job store refuses to load.** A single inconsistent job record used to stop the whole server, so Home Assistant kept the App in an error state. The store stays fail-closed (nothing is repaired or deleted), but the house now starts without the assistant: its routes answer 503, `/api/health` reports `selfCheck.roomImageJobStore`, and the log names the offending job and the rule it breaks. ## [0.8.0] - 2026-09-06 ### Added - **The room picture follows the weather.** Each generated image set gains an overcast variant, so a room shows grey window light on a rainy day instead of the same golden afternoon. The room-image assistant asks a vision model once per image set for the surfaces it can see (windows, floor, seats, tables and more) and keeps them in the catalogue; rain and snow are drawn only inside the windows. Nothing runs in the browser at start or on a room change. - **Weather in the standby screen.** Rain, snow and cloud pass quietly behind the clock and the notes. Switchable under Ambient & Standby. - **Undo instead of confirm.** After "everything off", a scene or a climate change, a five-second toast offers Undo; the command goes out immediately. A switch that gets no echo from Home Assistant within a second pulses once. - **Presence and person.** A motion detector from Window & Motion can wake the panel from standby; when every resident is away the standby goes dark; the first person home is greeted by name with their own notes first. Residents are mapped to Home Assistant persons, which are imported on first start. All off by default. - **Ambient light.** A brightness sensor in the room or in the panel dims the interface continuously between two levels. - **Hidden gestures.** Long-press the clock for a large date and seconds; tap the logo three times for a diagnostics view with frame rate, connection age, snapshot age and version. - **Calendar moments.** Birthdays and selected fixed days from the family calendar show a quiet morning confetti and a line in the standby; the first snow of the season is noticed once. Fixed days are selectable in Settings. - **Dusk in real time.** Around sunrise and sunset the room picture and the interface tones cross-fade over the sun's elevation instead of switching. Light cones come on quickly and fade out slowly; when the last lamp in a room goes out the picture dims into its unlit version. - **New default room pictures** drawn from a real household, chosen by room name in every supported language. - **Cameras stream live over HLS** as in Home Assistant, with still images as the fallback. - **Shopping list sources.** Stores can be Home Assistant to-do lists (created from Hauser) or a Notion page. - **Companion app pairing.** The System screen shows a one-time QR code; a paired phone gets its own device token. The app itself is a separate project and not part of this release. - Standby can be switched off or given its own delay; the layout dialog uses the same tick scale as the light dimmer. ### Changed - **The outdoor weather is your own.** The server reads the home location from Home Assistant and asks Open-Meteo itself; the interface no longer carries fixed city coordinates and the response contains no coordinates ([#15](https://github.com/ralleur/hauser/issues/15)). - **The room-image assistant is quieter.** The room is chosen up front, the final screen is gone, progress is one plain sentence, and the notification centre tells you when drafts, the final set or the detected surfaces are ready. A spinning mark in the header shows the house is working. - **Everything at once.** Weather, energy curves, camera stills and notification rules start from a snapshot; hero images decode in a worker and neighbouring rooms are preloaded on tap. Notes, reminders, shopping list and the library reappear instantly after a cold start; stale snapshots refresh when the app becomes visible or the network returns. - **Phone: notifications flow with the content**, tab names match the panel, and the room-image onboarding card appears once per device. - **English without German leftovers**; a lint keeps it that way. - **Failure states explain themselves.** The minimal shell has a reload button and a one-line cause; the disconnected banner appears once, names the cause and offers a retry while climate and scenes stay locked. - **Appearance modes** separate interface tone and dusk cleanly. - **Every read route** of the API answers repeated requests with 304 via ETag; the server pre-computes the city map, phone variants and last week's energy statistics overnight and reports a self-check in its health payload. - Screen and sheet transitions share one motion system with durations and curves from the design tokens. ### Fixed - **Connecting no longer hangs forever.** A handshake that never completes, for example after a resume behind a proxy, now times out after 20 s and falls back to the normal reconnect cycle ([#15](https://github.com/ralleur/hauser/issues/15)). - **The lamp-placement editor shows your own room picture** instead of the bundled illustration ([#16](https://github.com/ralleur/hauser/issues/16)). - The unlit night picture is used as soon as no lamp in the room is on, not only when placed lamps are off; a room without known lamps stays lit. - Room-image sets are no longer deleted when the server starts without an asset catalogue; published sets are kept and reported. - Assigning an image set takes effect immediately; a mouse click opens a notification again; the falling temperature trend points down; the deep night dimming is opaque. ### Internal - The server is split into modules under `app/server/` (room images, hotel mode, laundry, setup, configuration core, family data, notifications, ambient, songs, files). `server.mjs` keeps the request dispatcher and re-exports the public surface, so existing imports keep working. - The HTTP API has an explicit contract (`app/server/api-contract.mjs`) with 84 routes. A generated TypeScript table and a typed browser client are derived from it, and a test fails when a route literal in server or UI code drifts away from the contract. ## [0.7.0] - 2026-09-02 This release documents the work that shipped alongside 0.6.3 but was left out of its notes, together with the changes made since. ### Added - **Notifications you configure yourself, as categories with rules.** A new **Notifications** section under **Home** replaces the fixed set of messages with eight categories you fill yourself. A rule names an entity, the states that should trigger it, a delay before it counts and, where it fits, a threshold to stay above or below. Hauser is the configurator and the display, Home Assistant does the waiting and the triggering: every active rule becomes an automation built from one of three Hauser blueprints, and Hauser keeps that set in step when you save. Each category carries a colour for the border of its tiles, chosen from the palette so light and dark both hold up. A test send shows what a rule will look like, and the history comes from the Home Assistant logbook. - **Window contacts and motion detectors are really connected now.** The status strip said "All quiet" no matter what the house was doing, because the values behind it were never filled. Windows and presence are read live from Home Assistant on every screen, and the strip has become a button that opens a list with one line per sensor, its room and its state. Rooms without an assigned sensor keep the strip as a display rather than offering a button with nowhere to go. - **Choose which sensors count.** Detection no longer has the last word. A new section under **Home** shows one card per room and one switch per sensor. Everything found is on to begin with, so deselecting is the exception. A button returns a room to automatic assignment. - **Choose what the energy page measures.** The energy card in **Connections · Services** now lists every power sensor Home Assistant reports: one source for generation, as many consumers as you want to tick, plus "Take all". Without a saved selection Hauser uses everything it found. - **An operate mode that locks configuration away.** A button in the middle of the header switches between **Edit** and **Operate**. In operate mode the long-press routes into layout, the room device editor, the scene editor and the central climate control are closed, while every device stays fully operable, including a long press on a light. Someone who only wants to operate the panel cannot break anything. Under **Interface & operation** you can set how long the panel waits before falling back to operate mode on its own, and a PIN that protects leaving it. If a locked long-press is tried twice within thirty seconds, a line under the button explains the way back. - **Central climate control from anywhere.** A long press on the reading area of the all-rooms pill opens the settings that decide what it controls, on the panel and on the phone, from any screen. The step buttons keep switching, so a longer press there does not open configuration. - **Paperless is set up in the interface.** Address and API token used to live in environment variables and the keychain only. Both are now fields in **Connections · Services**, and the server picks them up on the next request instead of on the next restart. The PIN that locks the documents screen stays in the keychain, because it is not a service credential. - **Sheets on the phone close by swiping down.** The room sheet and the more sheet arrive from the bottom and now leave the same way. Dragging the sheet header pulls the surface with your finger. Past a quarter of its height it closes, below that it springs back. The gesture sits on the header so it disturbs neither scrolling nor the sliders inside. - **Home and Energy keep separate widths for their control areas.** The layout dialog now adjusts the area it was opened from and names it on the slider row. Existing installations inherit the energy width from the previous setting, so nothing shifts when you update. ### Changed - **The bottom navigation on phones is a floating pill.** The full-width bar read as a foreign object below the room grid. It now floats above the content as a rounded, translucent pill that follows the rounded corners of the phone, and the active entry is marked by a soft highlight that glides along instead of a line under the label. - **One climate pill for the panel and the phone.** The all-rooms control is the same component on both: two symmetric round buttons, one dominant target value, a quieter range label and the measured current value behind a fine divider. Blue and red now mark only the two directions. On the phone it shares a single row with the off and holiday actions, which became round buttons to fit. - **Room tiles read as calm product cards.** The veil used to lie flat across the whole tile and dulled the picture without forming a clear zone. It now carries only the lower information area and is gone by about two thirds of the height. Both themes share the same, much weaker gradient, so the illustration keeps its depth in light mode too. Room name and status have their own hierarchy and a halo that keeps them legible on changing pictures. The crop is rendered at its target size, so the fine lines of the illustrations no longer step at high pixel density. - **The media area is off by default.** It stays in the catalogue and is switched on under **Connections · Services**, where it is marked as experimental. Playback targets that were found during setup remain in the configuration, so they are there the moment you enable it. - **The services page is arranged by module.** Home Assistant sits on top as the foundation, and below it one block per module: Home, Energy, Calendar, Notes, Media, Library and Documents. Each block carries the switch for its module and the setup of the service that fills it. - **Long device names shrink instead of being cut off.** In the control panel a name that did not fit was truncated. It is now reduced in size until it fits the space the tile already grants it, which turns two clipped lines into three smaller complete ones without making the tile taller. - **The song workshop was removed.** It did not come up in everyday use. The screen, its tab and its search entry are gone. Existing installations that still list it in their configuration start normally. ### Fixed - **A switched-off module stayed in the bar until the next restart.** The switch wrote the configuration and the message asked you to restart. The module now disappears from the tab bar and the phone navigation immediately, and comes back complete when you switch it on again. The saved order of the phone entries is left untouched. - **The camera tile stayed empty in the Home Assistant add-on.** The browser loaded the live image directly from the built-in Home Assistant address, which wall panels and phones without mDNS cannot reach. The image is passed through Hauser's own server now. For generic cameras, whose stream Home Assistant serves through ffmpeg, the stream ends without delivering a single frame; those tiles reload the still picture instead and retry after an error rather than staying blank. - **A second test notification kept the old colour.** Without a Home Assistant connection the test tile is created locally, and an existing tile with the same id was ignored. It is replaced now, as Home Assistant does it. - **The climate card broke out of a narrow sidebar.** The card now scales with the width of the sidebar, and the current-value line no longer wraps. ## [0.6.3] - 2026-09-02 ### Added - **Import a scene from Home Assistant.** If you already keep scenes in Home Assistant, you no longer have to rebuild them by hand. The scene editor now offers "From Home Assistant" next to "Add new scene": it lists your existing scenes, those belonging to the room first, and turns the one you pick into a Hauser scene with its devices and their brightness and colour temperature. Home Assistant does not hand out a scene's stored target states, so the scene is applied in the room once to read them back — the editor restores the previous state when you close it, as it does for any other change you preview there. - **Rooms that only carry scenes are set up as rooms.** During setup, a Home Assistant area now becomes a Hauser room even when no device is assigned to it and only a scene points there — via the scene's own area or the areas of the devices it controls. ### Fixed - **A panel flashed on the right before an overlay opened.** Long-pressing a room, a light or a scene briefly showed an empty dialog on the right edge while the overlay was still loading. The placeholder no longer draws anything. ## [0.6.2] - 2026-09-01 ### Fixed - **The Home Assistant add-on stayed on "Connecting…" even though it was connected.** Home Assistant may bundle several messages into a single packet, and the add-on's connection relay discarded such bundles because a bundle carries no message type of its own. The confirmation the app waits for to finish subscribing arrives in exactly such a bundle, so the app kept showing "Connecting…" while live values were already updating behind it. Bundles are now unpacked. This only affected the add-on; installations where the browser talks to Home Assistant directly were never impacted. ## [0.6.1] - 2026-09-01 ### Added - **A city map on the standby screen.** When the panel rests, Hauser can place a subtle street map of your surroundings behind the clock and notes. The place comes from Home Assistant, from the device's own location, from a place search ("Dortmund, Germany") or from coordinates you type. The map is rendered once on the server and stored as a small monochrome image; light and dark share the same file, and Deep Night shows no map at all. Setup offers it as an opt-out with an example picture, and it can be turned off at any time under **Appearance → Ambient & standby**. - **Place search instead of coordinates.** Type a town and pick it from a list. The search runs on the server against OpenStreetMap's geocoder; what leaves the server is a search term, never your address. ### Changed - **The app starts noticeably faster and reaches a usable state sooner.** When a validated configuration is already known, the real interface is mounted directly instead of a placeholder shell that is torn down again a moment later. Independent startup requests now run in parallel, and the Home Assistant connection no longer waits for unrelated configuration. - **Room pictures on phones are about a fifth of their previous size.** Hauser now derives a phone-sized variant of every room image when the image enters the library, so a room tile shows its background in the first paint instead of decoding a multi-megabyte file. Existing libraries are migrated automatically on the first start after the update. - **The offline cache shrank from roughly 17 MB to 3.5 MB**, which makes every service worker installation faster. Full-size room pictures are fetched when they are first shown and cached from then on. - **A waiting update is offered, not forced.** Hauser no longer reloads itself while you are looking at it. A quiet hint appears and applies the update when you tap it; without a tap the running version keeps working. Wall panels still update on their own while idle. - **Automatic appearance follows the time of day when Home Assistant has not reported a sun position yet**, instead of staying dark until it does. - **Settings are easier to navigate.** "Appearance" and "Layout & controls" are now one section, **Interface & controls**. Hotel Mode and guest access moved into a new **Experimental** group at the end of the list. - **Unfinished room edits survive leaving the section.** Renaming rooms, reordering them or adding devices and then switching to another settings section no longer discards the draft silently. A restored draft is marked as such and can be discarded deliberately. ### Fixed - Reconnecting after the app returns from the background no longer waits for the next retry window; a connection that only looks alive is detected and replaced. - Room tiles no longer decode a second set of images when Home Assistant data arrives shortly after start. ## [0.6.0] - 2026-08-31 ### Changed - **As a Home Assistant App, Hauser no longer asks for a Home Assistant address or a Long-Lived Access Token.** The App connects to Home Assistant Core over the internal Supervisor endpoints, and the browser reaches live state through a same-origin WebSocket on the Hauser server. The Supervisor token stays inside the server process and is never written to `/data`, handed to the browser or logged. Installations that previously stored a Long-Lived Access Token have it removed on the first start in App mode. Docker Compose keeps its existing setup wizard, address and token unchanged. - **The setup wizard ends by showing the address phones and tablets use**, with a copy action and a QR code. The same address stays available under **System → Services**. It is the address the current session was opened through, not a guess from the Home Assistant host name. ### Security - The App's direct LAN port is documented as a trusted-network boundary: it carries no separate login and no device pairing, and must not be published to the internet. ## [0.5.3] - 2026-08-31 ### Added - **One climate control can set every thermostat.** The status bar and phone quick actions show the shared target temperature and raise or lower all configured climate entities together. ### Changed - **Climate controls are clearer and more compact on phones.** Current and target temperatures have distinct labels, the thermostat card uses the available width more efficiently, and temperature steps consistently use plus and minus buttons. - Phone quick actions and optional room-editor state are loaded only when they are needed, reducing the initial phone bundle. ### Fixed - **Room-image generation with a ChatGPT subscription works again.** Hauser now uses the native Codex image-edit endpoint and its JSON image result instead of waiting for an image-generation tool result from a Responses stream. - **Custom room images work from the direct Home Assistant App address.** The manual upload endpoint now accepts an exact same-origin request such as `http://homeassistant.local:4173` while continuing to reject foreign origins. - Manual room-image upload failures follow the selected interface language instead of exposing the server's German message. ## [0.5.2] - 2026-08-28 ### Added - **Camera feeds can become movable pop-outs.** A long press opens the camera menu, moves the feed out of the control surface and onto the room background, and lets it be dragged and resized. A pop-out follows its room by default or can stay visible across room changes; its title bar can be hidden, and it can return to the control surface at any time. - **Room tiles per row are adjustable.** The home layout now supports one to four room tiles in each row instead of enforcing a fixed two-column grid. ### Changed - **Home layout editing is a live mirrored drawer.** A long press on the room background opens an unblurred panel on the right with the same dimensions as a control surface. The former Compact, Balanced and Wide choices are one continuous size control, with a default action and direct preview. - **The camera, climate and new layout controls are fully localized** in German, English, French, Italian, Polish and Portuguese. - The redundant **Temperature** heading above the climate card and the Safari install hint have been removed. ### Fixed - Saving reconfigured rooms now refreshes the active household cache before returning to the dashboard, so the new room state appears immediately. ## [0.5.1] - 2026-08-28 ### Added - **Scenes are configurable per room.** The scene editor lists the devices a scene drives and the state each one takes — on or off, and, where the lamp supports it, brightness and colour temperature. Every change runs on the lights straight away as a preview and is taken back when the editor closes, so the room is never left in an editing state. - **Rooms can have their own scenes.** Beside the three built-in scenes, a room can gain its own through **Add new scene**, and every scene — built-in ones included — can be renamed or deleted. All of it belongs to the room where it was made: a *Movie night* in the living room does not appear in the kitchen. - **The active scene is highlighted.** A scene lights up when the room actually stands at its target state, whether it was tapped or the lamps were set there by hand. - **Advanced room settings.** A room's tile on the home screen can show temperature, humidity, both or neither, and the sensor behind each is picked automatically from the Home Assistant area the room maps to. Another sensor can be chosen where several fit. - **The room-image assistant opens from the room overlay**, next to uploading an image and picking one from the library. ### Changed - **Configuration overlays share one set of controls.** Reordering is a six-dot handle that drags — with the arrow keys as the keyboard path — deleting asks once in place of a dialog, and creating something new is a dashed tile. The room editor's device list follows suit: the up/down chevrons are gone. - **The room editor opens on a quick-setup grid.** Room image, scenes, lamp placement and the new advanced view sit as four tiles above the device list. ## [0.5.0] - 2026-08-27 ### Added - **Rooms & devices is a real room list.** Every room now shows its current room image, its name and how many devices it holds. **Configure devices** opens the room editor, **Rename** edits the name in place, the six-dot handle drags the room into position — with the arrow keys as the keyboard path — and the overflow menu keeps move, rename and delete. **New room** and **Save changes** sit where the list ends. - **Tapping a room's image opens the image editor.** The thumbnail in the settings list leads straight to the room-image view of the room overlay, where an image can be uploaded, picked from the library or removed. - **The room-image assistant and the library have their own cards.** Both sit as illustrated tiles under the room list instead of two anonymous rows. ### Changed - **Version numbers drop the `-beta.N` suffix.** Every release below `1.0.0` is a beta; the version number says so on its own. `0.4.0-beta.10` is followed by `0.5.0`. - **Settings open on Rooms & devices.** That is the page where a home is actually set up. Coming back within 30 seconds still returns to the section that was open, so a quick detour costs nothing; a later visit starts fresh. - **Resetting is one card with three tiles.** Device names and icons, scenes, and re-reading rooms and devices from Home Assistant — the last one used to be a separate section at the bottom of the page. ### Fixed - **The room-image card kept coming back.** Dismissing it only applied to that one room and only until the next reload. A checkbox on the card now switches it off for good on that device. - **Saving room changes could be blocked by Jellyfin.** In Settings there are no Jellyfin fields, yet an unverified sign-in disabled **Save changes**. The first-run wizard still requires the tested sign-in. ## [0.4.0-beta.10] - 2026-08-26 ### Added - **Rooms without a background explain how to get one.** A room that has no image set assigned showed nothing but an empty tile. The home screen now carries an onboarding card with a before/after band, the three steps the assistant takes, and three ways out: generate an image, pick one yourself, or dismiss the card. The assistant and the library are loaded only when one of them is actually opened. - **Rooms without devices offer a way to add one.** Instead of a blank area, an empty room shows an **Add device** placeholder tile that opens the same room editor as a long press on the room tile. - **The people on the pinboard can be named and added.** Tapping a name renames that person, a header button adds another, and each gets a note colour from a fixed palette. Existing tasks stay with their person. ### Changed - **The room-image assistant leads with the photograph.** The OpenAI access step now appears only when access is missing and stays reachable as a chip in the header afterwards; the consent text is one line with the long form behind an info button. Choosing the photograph is the first thing the assistant asks for and offers the camera directly on touch devices. Cropping and zoom moved to step two, next to the style variants, because the perspective correction changes the framing anyway. The focus picker is gone entirely — the generated sets already match the panel format exactly, so it changed nothing. - **The standby button sits in the title bar by default.** The setting in the long-press menu now switches to the large floating button instead of away from it. ### Fixed - **The room-image assistant failed with a 403 in the Home Assistant app.** Every write of the assistant — starting a ChatGPT sign-in, uploading a photograph, creating variants — was answered with `ORIGIN_FORBIDDEN` when Hauser ran as a Home Assistant add-on. The add-on can only configure the loopback origins, while the browser reaches Hauser under the host's own address, so the request never matched the static allowlist. A request whose `Origin` matches its own effective origin — protocol, host and port, compared exactly — is now accepted in addition to the configured list. Foreign origins, differing ports or protocols, `null`, malformed values, a missing origin on a write, and duplicate `Origin` headers stay rejected. - **Room-image errors appeared in German in an English install.** The assistant, the library and the access panel showed the server's message verbatim, and the server writes German only. They now use the translated message for the operation that failed. - **A published image set could break the next server start.** The expiry pass marked already published sets as expired without detaching the asset, which the metadata validation forbids — so the service refused to start with "incoherent room-image job metadata". Records that carry an asset are left alone. ## [0.4.0-beta.9] - 2026-08-26 ### Fixed - **The published container did not say where its source came from.** Hauser serves its exact revision and the URL of the corresponding source at `/api/build-info`, without authentication and before any configuration exists — that is how the project meets section 13 of the AGPL. In every image published since the license change the two fields came back empty, because the release workflow's publish step never passed `HAUSER_REVISION` and `HAUSER_SOURCE_URL` to the build. It also never passed `HAUSER_RELEASE=1`, the Dockerfile's own guard that fails a release build rather than publishing an image which cannot back its source claim, so nothing caught the omission. The image labels (`org.opencontainers.image.revision` and `.source`) were always correct; only what the running container reports about itself was missing. The publish step now passes all three, and the guard makes a repeat a build failure. `v0.4.0-beta.7` and `v0.4.0-beta.8` are both affected. ### About v0.4.0-beta.8 `v0.4.0-beta.8` was tagged and its image published, but no release was issued for it: the defect above was found while verifying that exact image digest. Everything beta.8 contained is in this release; its entry below stays as the record of what landed when. Update straight from `v0.4.0-beta.7` if you are still on it. ## [0.4.0-beta.8] - 2026-08-26 ### Added - **Calendar and Notes are part of the generated navigation.** Onboarding produced a navigation with only Home and System (plus Media when a media player was discovered), while the Calendar and Notes screens existed with no way to reach them — the README's hero image showed tabs an onboarded install never had. New installs now get Home, Calendar, Notes, optionally Media, and System. An existing install whose navigation is still the untouched onboarding result is migrated to the same set on load; a navigation you have customized yourself is left alone. Reported in #8. - **An image-set library for generated room backgrounds.** Finished sets were reachable from nowhere once the assistant had produced them. Settings → Rooms & Devices now lists every set with a preview, its size, its creation date and the room it is assigned to, and lets you assign a set to a room, remove that assignment, or delete it after a confirmation. The header shows how many sets exist and how much storage they occupy. - **Room configuration behaves the same from everywhere.** There were two routes into a room's configuration with different capabilities. Tapping a room under Rooms & Devices now opens the same overlay as a long press from the home screen; the embedded list keeps creating, deleting and reordering. The overlay also assigns image sets from the library, and a long press on a device row moves that device to another room. ### Fixed - **The room-image assistant could not start a job over plain `http://`.** Generating an ID used `crypto.randomUUID`, which browsers expose only in a secure context, so on a panel reached over `http://` in the LAN the request failed while it was still being assembled — before any network call and before the error handling. Pressing **Create variants** did nothing at all: no request, no status change, no message. The assistant now falls back to `getRandomValues`, reports unexpected failures instead of swallowing them, and places error messages directly above the action buttons where they are in view. The ChatGPT authorization code can be copied with a click. - **The assistant returned photographs where it should have returned a composition.** The composition step received the already-cropped tile rather than the whole photograph, so the prompt discussed a framing the model never saw, and protective wording in the first phase suppressed the free recomposition entirely. The two candidates now differ as intended: a realistic composition with corrected perspective, and an illustration. - **Both clocks froze.** The dashboard and ambient clocks stopped advancing and only a manual reload brought them back. They now resynchronize when the page is restored, the tab becomes visible or the window regains focus, in addition to their regular tick. Reported in #8. - **Status & Updates showed invented services and updates.** The screen listed six pending updates and five connected services from hard-coded prototype data, none of it reflecting the connected instance — misleading about security-relevant state. A productive install now shows only the verified Home Assistant connection and genuine pending `update.*` entities, and says **No updates available** when there are none. The fictional list remains only in the demo build, which is marked as such. Reported in #8. - **The floating power button covered controls beneath it.** While System settings are open, the power control now sits in the title bar even when the floating button is the general preference — it no longer obscures the Scenes **Reset** button. Reported in #8. - **German text remained in the English interface.** The connection indicator, the Safari *Add to Home Screen* hint, and the room-image assistant, its library and its access dialog are now translated in all six languages, and the ambient hero text keeps the selected language consistently instead of switching between English and German across visits. Reported in #8. - Room-image dialogs opened from the room overlay were unstyled, and the device-move sheet appeared behind the overlay, because their styles were loaded only by the System screen. ### Changed - **The AI line on the lock screen is off by default.** It calls a language model service, which should be a deliberate choice rather than something that happens on first start. Turning it on is remembered; the default is off on every install. - The public demo starts in English until a visitor picks a language, and it now shows the room-image assistant and the image-set library in full, with prepared example photographs instead of an upload. A marked note in both dialogs states that no account and no AI service is involved. ### License The project's license identifier is now **AGPL-3.0-only** instead of `AGPL-3.0-or-later`. The license text in [LICENSE](LICENSE) is unchanged: it remains the unmodified GNU Affero General Public License, version 3. What changes is that the project no longer offers the option of using it under a later version of the AGPL should the Free Software Foundation publish one. Releases up to and including v0.4.0-beta.7 keep the terms they were published under. Contributions are made under [CLA.md](CLA.md), now at version 2. Contributors keep the copyright in their work. ## [0.4.0-beta.7] - 2026-08-24 ### License change Starting with this release, Hauser is licensed under the GNU Affero General Public License instead of MIT. Everything released up to and including v0.4.0-beta.6 stays MIT licensed and can be forked from there. This change applies going forward only; no release has been withdrawn or retagged. **If you run Hauser at home, nothing changes for you.** The AGPL only creates obligations for someone who modifies Hauser and then offers it to other people over a network — they have to make their modified source available to those users. The reason is straightforward: the AGPL keeps improvements to a networked application flowing back to the people who use it, instead of disappearing into closed forks. Contributions now require agreement to a [CLA](CLA.md). ### Fixed - The setup wizard's reconfigure flow (Settings → Rooms & Devices) never sent the `If-Match` / `X-Hauser-Shared-Config-If-Match` preconditions that `POST /api/setup/activate` requires when reconfiguring, so every reconfigure save was rejected with `428 CONFIG_PRECONDITION_REQUIRED` before anything was written. **Save changes** appeared to do nothing — no console error, no visible feedback near the button — and any rooms or devices found by **Reload rooms and devices** reverted to the previously active configuration on leaving the screen. The wizard now captures both ETags on load and sends them back on save. Reported in #7, reproduced on v0.4.0-beta.6 in #9. ## [0.4.0-beta.6] - 2026-08-21 ### Fixed - `POST /api/setup/activate` and other API routes rejected direct browser requests with `403 SETUP_REQUEST_FORBIDDEN` whenever the App was reached through a hostname absent from the static `HMI_ALLOWED_ORIGINS` allowlist — for example the Home Assistant App's default `homeassistant.local:4173`. A request is now also accepted when its Origin header exactly matches the effective request host, independent of hostname, so installs no longer need manual origin configuration. Reported in #8. ## [0.4.0-beta.5] - 2026-08-16 ### Fixed - The setup wizard discovered only lights, climate, temperature, presence, window and camera entities. Switches were dropped without a trace — the domain was never mapped, so room-assigned switches reached neither the generated room configuration nor the ignored list. Media players were never offered as media targets even though the runtime already supported them. Reported in #7. - A room accepted only one entity per non-light role, so several switches in the same room collapsed into a single entry. Switches may now appear as often per room as lights do. ### Added - Vacuums are discovered and exposed as a start / return-to-base control. This path follows Home Assistant's documented `vacuum` service set and has not yet been verified against physical hardware. ## [0.4.0-beta.4] - 2026-08-16 ### Fixed - The Home Assistant App failed to start with `RUNTIME_DIRECTORY_NOT_WRITABLE` on `/data/assets`. The App manifest requires that directory for generated room images, but the container entrypoint never created it. The entrypoint now derives the directories it prepares from `HMI_REQUIRED_WRITABLE_DIRS` — the same list the readiness check verifies — so a deployment cannot require a directory that nothing creates. Reported in #6. - Startup and household-configuration diagnostics are reported in English. ### Changed - The App manifest and the container entrypoint ship from the release pipeline instead of being maintained by hand, and the release preflight fails when the manifest version and the published image version drift apart. - Tagged releases publish the plain `` image tag alongside `v`, which is the tag the Home Assistant Supervisor resolves from the manifest. ## [0.4.0-beta.1] - Unreleased This is the planned first public release. It remains a self-hosted hobby-project beta without a support or compatibility promise beyond the documented paths. ### Added - Source-built Docker/Compose installation with read-only root filesystem, unprivileged runtime, health checks and persistent config, data and asset volumes. - Deterministic first-run and reconfiguration wizard for Home Assistant Areas, relevant entities, room mappings and optional Jellyfin setup. - Versioned external household configuration with fail-closed validation and automatic schema v1-to-v2 migration backed by an exact rollback copy. - Backup, restore, commit-bound image build and manual image rollback helpers. - Isolated development pilot with its own synthetic Home Assistant, network and volumes, including explicit-Area and no-Area onboarding paths. - Six interface languages: German, English, French, Italian, Portuguese and Polish. - Local custom room-background upload under room editing for JPEG, PNG, WebP and AVIF files up to 12 MiB, including replacement and restore to the project default. - Tag-gated quality and container-image workflow. A matching version tag can publish immutable `linux/amd64` and `linux/arm64` images to GHCR only after the full quality job passes. ### Changed - The Home Assistant adapter now recovers entity state correctly after a lost and restored connection. - Release evidence is split honestly: the isolated clean-room pilot proves the technical beta contract; an external real-home installation remains mandatory during beta stabilisation before the release candidate. ### Known limitations - The clean-room pilot was operated by the maintainer and does not prove external-user usability or compatibility with a second real device topology. - The documented tested container path is Docker Desktop on Apple Silicon; `linux/amd64` is built by release automation but still requires post-publish smoke evidence. - Jellyfin is optional. The isolated clean-room pilot exercised the disabled path; the live integration was verified separately against the maintainer's installation. - Non-German and non-English translations have not been reviewed by native speakers.