Dobby·Guide github.com/mhyrr/dobby

Living with Dobby

Dobby is not another dashboard. It is the person in the house who knows how the dashboard works.

Every phone and shared screen opens the same household conversation. Say what you want. Use the cards when touching is faster. Open the activity record when you need to know exactly what happened.

A morning with Dobby

6:47 AM

7:10 AM

A parent opens the kitchen tablet. The same conversation is there. The thermostat card shows what Home Assistant currently reports. It does not pretend that the room reached 70° because Dobby accepted a new setpoint.

That evening

The next morning, the stored schedule fires without asking a model to read the sentence again.

What the house keeps

morning warmup · READY 0 7 * * 1-5 · America/New_York downstairs thermostat · set_temperature · 70° · Greg

The words were interpreted once. The timer, device, action, value, and author are explicit.

One house. One Dobby.

The first time a browser opens Dobby, it asks who's this? and remembers the answer. That name goes on everything the browser says and does. It is a name, not a login. Nobody gets a permission tier.

The kitchen tablet speaks as whoever set its name last. switch on the plate changes it. Every browser still enters the same persistent thread, with each person's lines interleaved in order.

Dobby would rather ask a stupid question than make a clever guess.

Say what you want. Dobby answers in a sentence or two and stops. This exchange comes from the working rig:

Four rules show up in ordinary use:

The model can still misunderstand a request and choose an allowed action on an allowed device. The closed roster and device rules limit that mistake. They do not make language infallible.

Sometimes talking is easier. Sometimes touching is easier.

Both paths reach the same device machinery.

/house shows every managed device as a card with its reading and its word. Under the row sits the device's other number: the water heater says the water in the tank, a humidifier says the air in the room, an oven says its target under its temperature. A type with no second number says Since 4:12 PM. The reading changes only when Home Assistant reports a new state.

A fader sets a thermostat's or water heater's setpoint, a humidifier's or dehumidifier's target, the speed of a fan, an air purifier or a range hood, and a dimmable light's brightness. It runs between the two ends the device itself reported. While your finger is on it, the proposed number rides above it in amber. Nothing is sent until the finger comes up. The step is the device's own too, so a target it would refuse cannot be reached from the card. A card cannot set the hot water to 200°F, and the device agent checks every value regardless, so anything it refuses reads HELD with the device's own reason and nothing reaches Home Assistant.

Where the value is a word rather than a number, the card draws a row of the words the device advertised. The water heater offers its mode, its away mode, and power. A humidifier offers its mode and power. The fan, the air purifier, the range hood, the light, and the switch offer power, which reads ON · off. The lock offers locked and the garage door offers closed. Unlock and open are on no surface.

The word the device holds is written in the record voice and is not a button, because the board never offers to set a thing to what it already says. The others are the quiet underlined verbs. A row with nothing left to offer is not drawn: a locked door already reads Locked.

A card tap reaches the device with no model involved. It is fast, it still runs that device's own range checks, and the thread says who did it. The card never asks “are you sure?” It offers a way back for eight seconds instead: undo · back to 70° after a fader, undo · back to eco after a word. The vacuum's start and stop and the shade's move have no card control yet. Ask for those in the thread, or put them on a schedule.

The foot of the page holds edit and remove on each card, with add a device below. See Teach Dobby your house.

The eight words

Every state on the board is a word on a flap. There are eight. WARMING and COOLING are one word with two faces.

WordMeans
SetSomebody asked for this value.
Warming CoolingThe device is doing it. Home Assistant said so.
ReadyA schedule waiting for its time.
AwakeA device that answers and only reports. Its reading is beside the word.
ListeningDobby is paying attention. On the plate, beside his mark.
QuietA network device that stopped answering.
HeldThe device declined. The reason is beside it.
Not knownNobody has told us yet. It appears briefly after a restart, or when an accepted command never echoes.

When no word is true, the row has no word. A paused schedule shows none.

The thread remembers what people asked. The activity record remembers what the house did.

When a change counts as something somebody did, a quiet system line appears in the thread: the device, the word, the value, and who did it. That includes a card tap, a schedule firing, and someone turning the dial on the wall. A Home Assistant refusal adds HELD beneath Dobby's intent line. A command that never echoes adds NOT KNOWN once.

What you should see

house thermostat74°Set

Then who, in faint ink: Greg for the thread, Greg, card for a tap on /house, the schedule's name when one fired, and changed at the house thermostat when somebody used the dial.

A printer going quiet at night is not a change anyone made. It appears on the card and in Activity, not in the thread.

/admin is a small link at the foot of the cards. It is a room, not a privilege. It holds:

Ask about what happened

“Who changed the thermostat today?” and “Which commands did not arrive this week?” ask Dobby to read its activity record. The answer distinguishes a command from a reported state change. Counts cover the requested period even when the displayed evidence is shorter.

This is Dobby's record, not Home Assistant's complete history. No entry does not prove nothing happened. Dobby cannot measure hours of heating or cleaning from this record. Times use the house clock; a week begins on Monday, and “last night” means 6 PM yesterday through 6 AM today.

Ask Dobby to keep watch

“Tell me if the main room stays below 60°F for twenty minutes.” Dobby proposes the exact condition and waits for agreement in a later message. Once saved, code watches the condition without asking a model. The rule reports a notice; it never changes a device.

A rule can watch a lasting condition, or the absence of a matching recorded state change. It can watch all day or during a daily window, on selected weekdays. An overnight window belongs to the day it starts. Each rule watches one condition on one device; combined conditions and calendar deadlines need a different design.

There is one notice per occurrence, in the thread and above it. Acknowledge it to remove the standing notice. A known recovery lets the rule report a future occurrence. On The House, add a rule, pause or resume it, or delete it with an undo. These controls work without a model.

Unknown readings, a lost Home Assistant connection, or a restart begin a fresh observation interval. Dobby does not count time it could not observe. An acknowledgment survives a restart. A new rule starts watching now; it does not assume the condition held before it was saved.

Tell it once. The house remembers.

A schedule is a standing intention: “Set downstairs to 70 at seven every weekday.” Say it in the thread and Dobby writes a label, a time, the device, the action, the value, and who asked. It says the instruction is set for those times. It does not say the house is already that way.

“By 8 PM” and “at 8 PM” are different requests. Dobby supports the second. It asks when the wording implies the first. At the appointed time, a timer sends the stored command to the device agent. No model runs.

If the model provider is unavailable while Dobby is still running, existing schedules still fire and the cards still work. A stopped Dobby server cannot fire a Dobby-owned schedule.