# airdress.home.*

{/* Generated by scripts/generate-event-reference.mjs from https://schemas.airdress.co/operator/events/v1.json (operator v0.1.138).
    Do not edit by hand: run `pnpm generate:event-reference` and commit the result. */}

The events in the `airdress.home` family. How to read a section, and what
each audience means, is on the [event reference](/events/) page.

## `airdress.home.channel.ended`

Owner info Functions

The operator ended a home's channel: the `Home` was switched off, unlinked, deleted, or its machine revoked.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The operator ended a home's channel: the `Home` was switched off, unlinked, deleted, or its machine revoked.",
  "properties": {
    "home": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "home",
    "reason"
  ],
  "title": "HomeChannelEnded",
  "type": "object"
}
```

</details>

## `airdress.home.channel.opened`

Owner info Functions

A home's channel opened and its `hello` was sent.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `machine` | string (uuid) | yes |  |
| `session` | string (uuid) | yes |  |
| `transport` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A home's channel opened and its `hello` was sent.",
  "properties": {
    "home": {
      "type": "string"
    },
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    },
    "transport": {
      "type": "string"
    }
  },
  "required": [
    "home",
    "machine",
    "session",
    "transport"
  ],
  "title": "HomeChannelOpened",
  "type": "object"
}
```

</details>

## `airdress.home.channel.refused`

Owner info Functions

A machine asked for a home channel and was refused: it is not linked as a `Home` (`home_not_linked`), or its `Home` is switched off (`home_disabled`).

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `machine` | string (uuid) | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A machine asked for a home channel and was refused: it is not linked as a `Home` (`home_not_linked`), or its `Home` is switched off (`home_disabled`).",
  "properties": {
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "machine",
    "reason"
  ],
  "title": "HomeChannelRefused",
  "type": "object"
}
```

</details>

## `airdress.home.channel.revoked`

Owner info Functions

A machine's channel ended because the machine, its approval or the key it signed with is no longer admitted.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `machine` | string (uuid) | yes |  |
| `session` | string (uuid) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A machine's channel ended because the machine, its approval or the key it signed with is no longer admitted.",
  "properties": {
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    }
  },
  "required": [
    "machine",
    "session"
  ],
  "title": "HomeChannelRevoked",
  "type": "object"
}
```

</details>

## `airdress.home.conversation.created`

Owner info Functions

The conversation a `Home` speaks to its owner in was created.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `conversation` | string (uuid) | yes |  |
| `home` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The conversation a `Home` speaks to its owner in was created.",
  "properties": {
    "conversation": {
      "format": "uuid",
      "type": "string"
    },
    "home": {
      "type": "string"
    }
  },
  "required": [
    "conversation",
    "home"
  ],
  "title": "HomeConversationCreated",
  "type": "object"
}
```

</details>

## `airdress.home.conversation.failed`

Owner warn Functions

The conversation a `Home` speaks to its owner in could not be opened; the next reconcile tries again.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `error` | string | yes |  |
| `home` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The conversation a `Home` speaks to its owner in could not be opened; the next reconcile tries again.",
  "properties": {
    "error": {
      "type": "string"
    },
    "home": {
      "type": "string"
    }
  },
  "required": [
    "error",
    "home"
  ],
  "title": "HomeConversationFailed",
  "type": "object"
}
```

</details>

## `airdress.home.conversation.opened`

Owner info Functions

The conversation a `Home` speaks to its owner in is open on this `Home` for the first time since the operator started.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `conversation` | string (uuid) | yes |  |
| `home` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The conversation a `Home` speaks to its owner in is open on this `Home` for the first time since the operator started.",
  "properties": {
    "conversation": {
      "format": "uuid",
      "type": "string"
    },
    "home": {
      "type": "string"
    }
  },
  "required": [
    "conversation",
    "home"
  ],
  "title": "HomeConversationOpened",
  "type": "object"
}
```

</details>

## `airdress.home.deleted`

Owner info Functions

A `Home` was deleted: its channel ended, for the reason in `channel` (`revoked` when its machine was revoked first, `unlinked` otherwise), and its conversation is kept.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `channel` | string | yes |  |
| `home` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A `Home` was deleted: its channel ended, for the reason in `channel` (`revoked` when its machine was revoked first, `unlinked` otherwise), and its conversation is kept.",
  "properties": {
    "channel": {
      "type": "string"
    },
    "home": {
      "type": "string"
    }
  },
  "required": [
    "channel",
    "home"
  ],
  "title": "HomeDeleted",
  "type": "object"
}
```

</details>

## `airdress.home.frame.received`

Owner debug

A frame from a hub that is not an answer to a call or a read. One per frame.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `kind` | string | yes |  |
| `session` | string (uuid) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A frame from a hub that is not an answer to a call or a read. One per frame.",
  "properties": {
    "kind": {
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    }
  },
  "required": [
    "kind",
    "session"
  ],
  "title": "HomeFrameReceived",
  "type": "object"
}
```

</details>

## `airdress.home.hourly`

Owner info

The home channel's counters since the operator started, once an hour.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `displaced` | integer (uint64) | yes |  |
| `frames_in` | integer (uint64) | yes |  |
| `frames_out` | integer (uint64) | yes |  |
| `frames_posts` | integer (uint64) | yes |  |
| `keepalives` | integer (uint64) | yes |  |
| `polls` | integer (uint64) | yes |  |
| `retransmits` | integer (uint64) | yes |  |
| `sessions` | integer (uint64) | yes |  |
| `sessions_opened` | integer (uint64) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The home channel's counters since the operator started, once an hour.",
  "properties": {
    "displaced": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "frames_in": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "frames_out": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "frames_posts": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "keepalives": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "polls": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "retransmits": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "sessions": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "sessions_opened": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "displaced",
    "frames_in",
    "frames_out",
    "frames_posts",
    "keepalives",
    "polls",
    "retransmits",
    "sessions",
    "sessions_opened"
  ],
  "title": "HomeHourly",
  "type": "object"
}
```

</details>

## `airdress.home.liveness.listen_failed`

Owner warn Functions

The listener for machine revocations could not be started, or failed and is reconnecting. The periodic check still closes revoked channels.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `error` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The listener for machine revocations could not be started, or failed and is reconnecting. The periodic check still closes revoked channels.",
  "properties": {
    "error": {
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "title": "HomeLivenessListenFailed",
  "type": "object"
}
```

</details>

## `airdress.home.liveness.unavailable`

Owner warn Functions

Held home channels could not be checked against revocation.

The database did not answer. Channels stay up and the next check asks again; said once per run of failures. With `home`, the machine of a deleted `Home` could not be checked, and its channel ends `unlinked`.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `error` | string | yes |  |
| `home` | string or null | no |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "Held home channels could not be checked against revocation.\n\nThe database did not answer. Channels stay up and the next check asks again; said once per run of failures. With `home`, the machine of a deleted `Home` could not be checked, and its channel ends `unlinked`.",
  "properties": {
    "error": {
      "type": "string"
    },
    "home": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "error"
  ],
  "title": "HomeLivenessUnavailable",
  "type": "object"
}
```

</details>

## `airdress.home.notify.delivered`

Owner info Functions

A message from a home was delivered to its owner's Home conversation.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `message_id` | string (uuid) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A message from a home was delivered to its owner's Home conversation.",
  "properties": {
    "home": {
      "type": "string"
    },
    "message_id": {
      "format": "uuid",
      "type": "string"
    }
  },
  "required": [
    "home",
    "message_id"
  ],
  "title": "HomeNotifyDelivered",
  "type": "object"
}
```

</details>

## `airdress.home.notify.failed`

Owner warn Functions

A message from a home, or the line saying how many were dropped, could not be stored in the owner's Home conversation.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `error` | string | yes |  |
| `home` | string | yes |  |
| `message_id` | string or null | no |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A message from a home, or the line saying how many were dropped, could not be stored in the owner's Home conversation.",
  "properties": {
    "error": {
      "type": "string"
    },
    "home": {
      "type": "string"
    },
    "message_id": {
      "format": "uuid",
      "type": [
        "string",
        "null"
      ]
    }
  },
  "required": [
    "error",
    "home"
  ],
  "title": "HomeNotifyFailed",
  "type": "object"
}
```

</details>

## `airdress.home.notify.refused`

Owner info Functions

A message from a home was not delivered to its owner: notifications are off, it was empty or too long, it exceeded the rate, or chat is not attached.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `message_id` | string (uuid) | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A message from a home was not delivered to its owner: notifications are off, it was empty or too long, it exceeded the rate, or chat is not attached.",
  "properties": {
    "home": {
      "type": "string"
    },
    "message_id": {
      "format": "uuid",
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "home",
    "message_id",
    "reason"
  ],
  "title": "HomeNotifyRefused",
  "type": "object"
}
```

</details>

## `airdress.home.observe.dropped`

Owner debug

An observation from a hub for an entity its `Home` does not observe was dropped. One per dropped observation.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `reason` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "An observation from a hub for an entity its `Home` does not observe was dropped. One per dropped observation.",
  "properties": {
    "home": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    }
  },
  "required": [
    "home",
    "reason"
  ],
  "title": "HomeObserveDropped",
  "type": "object"
}
```

</details>

## `airdress.home.probe`

Owner info

The measurement probe called an action on, or read an entity from, a hub.

It carries the transport, the outcome, the round trip and the hub's own service time, never an entity id or a state value. Off unless the probe is configured; one per probe tick.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- Not functions bound to this operator's events: it is kept off that path as too frequent or too internal. A subscription with a function target still receives it.

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `first` | boolean | yes |  |
| `ha_ms` | string or null | no |  |
| `machine` | string (uuid) | yes |  |
| `op` | string | yes |  |
| `outcome` | string | yes |  |
| `overhead_ms` | string or null | no |  |
| `rtt_ms` | string | yes |  |
| `session` | string (uuid) | yes |  |
| `since_open_ms` | integer (uint64) | yes |  |
| `transport` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "The measurement probe called an action on, or read an entity from, a hub.\n\nIt carries the transport, the outcome, the round trip and the hub's own service time, never an entity id or a state value. Off unless the probe is configured; one per probe tick.",
  "properties": {
    "first": {
      "type": "boolean"
    },
    "ha_ms": {
      "type": [
        "string",
        "null"
      ]
    },
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "op": {
      "type": "string"
    },
    "outcome": {
      "type": "string"
    },
    "overhead_ms": {
      "type": [
        "string",
        "null"
      ]
    },
    "rtt_ms": {
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    },
    "since_open_ms": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "transport": {
      "type": "string"
    }
  },
  "required": [
    "first",
    "machine",
    "op",
    "outcome",
    "rtt_ms",
    "session",
    "since_open_ms",
    "transport"
  ],
  "title": "HomeProbe",
  "type": "object"
}
```

</details>

## `airdress.home.service.called`

Owner info Functions

A function's call reached a home: its outcome (ok, timeout, offline, refused) and the round trip.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `home` | string | yes |  |
| `outcome` | string | yes |  |
| `rtt_ms` | integer (uint64) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function's call reached a home: its outcome (ok, timeout, offline, refused) and the round trip.",
  "properties": {
    "function": {
      "type": "string"
    },
    "home": {
      "type": "string"
    },
    "outcome": {
      "type": "string"
    },
    "rtt_ms": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "function",
    "home",
    "outcome",
    "rtt_ms"
  ],
  "title": "HomeServiceCalled",
  "type": "object"
}
```

</details>

## `airdress.home.service.refused`

Owner info Functions

A function's request to a home was refused: `what` it asked (call, read, emit, track) and the `reason`.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `function` | string | yes |  |
| `home` | string | yes |  |
| `reason` | string | yes |  |
| `what` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A function's request to a home was refused: `what` it asked (call, read, emit, track) and the `reason`.",
  "properties": {
    "function": {
      "type": "string"
    },
    "home": {
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "what": {
      "type": "string"
    }
  },
  "required": [
    "function",
    "home",
    "reason",
    "what"
  ],
  "title": "HomeServiceRefused",
  "type": "object"
}
```

</details>

## `airdress.home.session.closed`

Owner info Functions

A home channel closed: why, and how long it lived.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `lived_secs` | integer (uint64) | yes |  |
| `machine` | string (uuid) | yes |  |
| `reason` | string | yes |  |
| `session` | string (uuid) | yes |  |
| `transport` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A home channel closed: why, and how long it lived.",
  "properties": {
    "lived_secs": {
      "format": "uint64",
      "minimum": 0,
      "type": "integer"
    },
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "reason": {
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    },
    "transport": {
      "type": "string"
    }
  },
  "required": [
    "lived_secs",
    "machine",
    "reason",
    "session",
    "transport"
  ],
  "title": "HomeSessionClosed",
  "type": "object"
}
```

</details>

## `airdress.home.session.displaced`

Owner info Functions

A machine opened a second home channel; the first (`session`) was closed for the new one (`by`).

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `by` | string (uuid) | yes |  |
| `machine` | string (uuid) | yes |  |
| `session` | string (uuid) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A machine opened a second home channel; the first (`session`) was closed for the new one (`by`).",
  "properties": {
    "by": {
      "format": "uuid",
      "type": "string"
    },
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    }
  },
  "required": [
    "by",
    "machine",
    "session"
  ],
  "title": "HomeSessionDisplaced",
  "type": "object"
}
```

</details>

## `airdress.home.session.opened`

Owner info Functions

A home channel opened, over a WebSocket (`ws`) or a long-poll (`poll`).

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `machine` | string (uuid) | yes |  |
| `session` | string (uuid) | yes |  |
| `transport` | string | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A home channel opened, over a WebSocket (`ws`) or a long-poll (`poll`).",
  "properties": {
    "machine": {
      "format": "uuid",
      "type": "string"
    },
    "session": {
      "format": "uuid",
      "type": "string"
    },
    "transport": {
      "type": "string"
    }
  },
  "required": [
    "machine",
    "session",
    "transport"
  ],
  "title": "HomeSessionOpened",
  "type": "object"
}
```

</details>

## `airdress.home.shared.received`

Owner info Functions

A hub said what it shares: how many entities it lets the operator operate, and how many it lets it observe in all.

**Audience: owner.** About the airdress as a whole. Only the owner receives it: the owner's devices and the owner's subscriptions.

**Where it goes**

- **The operator's journal**, as one log line at this level, and **the event log**, where `airdress events tail` reads it.
- **Subscriptions** that name it, within its audience.
- **Functions bound to this operator's events** (`source: operator`).

**Versions**

- Version 1: first carried by operator v0.1.137.

**Data**

| Field | Type | Required | Description |
| ----- | ---- | -------- | ----------- |
| `home` | string | yes |  |
| `observe` | integer (uint) | yes |  |
| `operate` | integer (uint) | yes |  |

<details>
<summary>JSON Schema</summary>

```json
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "A hub said what it shares: how many entities it lets the operator operate, and how many it lets it observe in all.",
  "properties": {
    "home": {
      "type": "string"
    },
    "observe": {
      "format": "uint",
      "minimum": 0,
      "type": "integer"
    },
    "operate": {
      "format": "uint",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "home",
    "observe",
    "operate"
  ],
  "title": "HomeSharedReceived",
  "type": "object"
}
```

</details>