# flo-r1der/esphome_window-opener architecture

> Architecture diagram of the GitHub repository flo-r1der/esphome_window-opener, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/flo-r1der/esphome_window-opener
- Repository: https://github.com/flo-r1der/esphome_window-opener

## Overview

This is an ESPHome-based controller for a motorized window. Indoor and outdoor climate readings feed ventilation decisions; the selected humidity, temperature, scheduled, or manual mode determines window movement. A local encoder and display support standalone operation, while Home Assistant integration is optional. The tree contains only device.yaml and documentation, so subsystem paths below use that existing configuration file; internal implementation details and exact wiring beyond the README are not available for verification.

Main entry points: [`device.yaml`](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml) (Sensor inputs)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sensing["Climate sensing"]
  node_indoor_sensors(("Indoor sensors"))
  node_outdoor_sensors(("Outdoor sensors"))
  node_sensor_inputs["Sensor inputs<br/>[device.yaml]"]
  node_humidity_calc["Humidity calculation<br/>[device.yaml]"]
end

subgraph group_control["Window control"]
  node_climate_eval["Climate evaluation<br/>[device.yaml]"]
  node_mode_select["Mode selection<br/>[device.yaml]"]
  node_scheduled_mode["Scheduled mode<br/>[device.yaml]"]
  node_manual_mode["Manual mode<br/>[device.yaml]"]
  node_window_actuation["Window actuation<br/>[device.yaml]"]
  node_window_motor(("Window motor"))
end

subgraph group_interface["User interface"]
  node_mode_settings["Mode settings<br/>[device.yaml]"]
  node_encoder(("Rotary encoder"))
  node_local_display(("OLED display"))
  node_status_display["Status display<br/>[device.yaml]"]
end

subgraph group_integration["Integrations"]
  node_home_assistant(("Home Assistant"))
end

node_indoor_sensors -->|"send readings"| node_sensor_inputs
node_outdoor_sensors -->|"send readings"| node_sensor_inputs
node_sensor_inputs -->|"provide climate data"| node_humidity_calc
node_sensor_inputs -->|"provide readings"| node_climate_eval
node_humidity_calc -->|"provide absolute humidity"| node_climate_eval
node_mode_select -->|"selects evaluation"| node_climate_eval
node_mode_select -->|"selects schedule"| node_scheduled_mode
node_mode_select -->|"selects manual control"| node_manual_mode
node_climate_eval -->|"requests movement"| node_window_actuation
node_scheduled_mode -->|"requests movement"| node_window_actuation
node_manual_mode -->|"sets position"| node_window_actuation
node_window_actuation -->|"drives window"| node_window_motor
node_encoder -->|"adjusts settings"| node_mode_settings
node_encoder -->|"sets position"| node_manual_mode
node_mode_settings -->|"sets targets"| node_climate_eval
node_mode_settings -->|"sets times"| node_scheduled_mode
node_climate_eval -->|"provides evaluation"| node_status_display
node_mode_select -->|"provides mode"| node_status_display
node_sensor_inputs -->|"provides measurements"| node_status_display
node_status_display -->|"renders status"| node_local_display
node_home_assistant -.->|"selects mode"| node_mode_select
node_home_assistant -.->|"sets position"| node_manual_mode
node_home_assistant -.->|"adjusts settings"| node_mode_settings
node_sensor_inputs -.->|"exposes readings"| node_home_assistant

click node_sensor_inputs "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_humidity_calc "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_climate_eval "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_mode_select "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_scheduled_mode "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_manual_mode "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_window_actuation "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_mode_settings "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"
click node_status_display "https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_indoor_sensors,node_outdoor_sensors,node_sensor_inputs,node_humidity_calc toneBlue
class node_climate_eval,node_mode_select,node_scheduled_mode,node_manual_mode,node_window_actuation,node_window_motor toneAmber
class node_mode_settings,node_encoder,node_local_display,node_status_display toneMint
class node_home_assistant toneRose
```

## Components

### Climate sensing

- **Indoor sensors**
- **Outdoor sensors**
- [Sensor inputs](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- [Humidity calculation](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`

### Window control

- [Climate evaluation](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- [Mode selection](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- [Scheduled mode](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- [Manual mode](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- [Window actuation](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- **Window motor**

### User interface

- [Mode settings](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`
- **Rotary encoder**
- **OLED display**
- [Status display](https://github.com/flo-r1der/esphome_window-opener/blob/main/device.yaml): `device.yaml`

### Integrations

- **Home Assistant**

## Connections

- Indoor sensors → Sensor inputs: send readings
- Outdoor sensors → Sensor inputs: send readings
- Sensor inputs → Humidity calculation: provide climate data
- Sensor inputs → Climate evaluation: provide readings
- Humidity calculation → Climate evaluation: provide absolute humidity
- Mode selection → Climate evaluation: selects evaluation
- Mode selection → Scheduled mode: selects schedule
- Mode selection → Manual mode: selects manual control
- Climate evaluation → Window actuation: requests movement
- Scheduled mode → Window actuation: requests movement
- Manual mode → Window actuation: sets position
- Window actuation → Window motor: drives window
- Rotary encoder → Mode settings: adjusts settings
- Rotary encoder → Manual mode: sets position
- Mode settings → Climate evaluation: sets targets
- Mode settings → Scheduled mode: sets times
- Climate evaluation → Status display: provides evaluation
- Mode selection → Status display: provides mode
- Sensor inputs → Status display: provides measurements
- Status display → OLED display: renders status
- Home Assistant → Mode selection: selects mode
- Home Assistant → Manual mode: sets position
- Home Assistant → Mode settings: adjusts settings
- Sensor inputs → Home Assistant: exposes readings
