# Home Automation

How home automation works in this house: **services** and **CODESYS** connectivity.

## How it works

- **CODESYS** (Raspberry Pi) runs the PLC: lights and water boiler via EtherCAT I/O.
- **Node-RED** runs automation logic and talks to CODESYS over **UDP (network variables)**.
- **MQTT** broker (LXC) is the message bus.
- **Zigbee2MQTT** bridges Zigbee switches to MQTT.
- **Home Assistant** is the dashboard and can trigger automations.

Flow: Zigbee switch or HA → Node-RED → UDP → CODESYS → EtherCAT → relays/lights or boiler.

## Project layout

```
kkelomatic_home/
├── codesys/           # CODESYS project and source (PLC logic, NVL)
├── docs/              # Documentation (architecture, services, Codesys)
└── scripts/           # parse-codesys-xml.py
```

## Documentation

- **Architecture & setup:** [docs/reference/architecture.md](docs/reference/architecture.md), [setup.md](docs/reference/setup.md)
- **Services:** [docs/integration/](docs/integration/) — MQTT, Node-RED, Home Assistant, Zigbee2MQTT
- **CODESYS:** [docs/codesys/codesys.md](docs/codesys/codesys.md), [codesys/src/NVL/README.md](codesys/src/NVL/README.md) (connectivity)

## CODESYS connectivity

- **NVL_Out** (PLC → Node-RED): light states + boiler status, UDP.
- **NVL_In** (Node-RED → PLC): light and boiler commands, UDP.

See [codesys/src/NVL/README.md](codesys/src/NVL/README.md) and [nodered-payload.md](codesys/src/NVL/nodered-payload.md) for layout and ports.
