Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
324 changes: 224 additions & 100 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,161 +1,285 @@
# M4 DINPLUG Home Assistant Integration (YAML)
# DINPLUG - Home Assistant Integration (YAML)

Integração customizada do Home Assistant para controlar módulos de iluminação **M4 / DINPLUG** via Telnet (porta 23).
This custom integration for Home Assistant allows you to control **DINPLUG** modules via Telnet (port 23).

Esta integração permite controlar cargas individuais dos módulos M4 como entidades `light`, incluindo:
- Luzes On/Off
- Dimmers (0–100%)
- Múltiplos módulos e múltiplos canais
- Atualizações em tempo real por telemetria `R:LOAD`
It supports the following platforms:
- `light`: For On/Off lights and dimmers.
- `cover`: For shades and blinds.
- `climate`: For HVAC systems.
- `sensor`: To monitor keypad button presses.

> 📌 Esta é a versão baseada em **YAML** (sem Config Flow).
>
> Ideal para instalações profissionais, simples e diretas.
> 📌 This is the **YAML-based** version (no Config Flow). Ideal for simple, direct, and professional installations.

---

## 📦 Instalação

1. Baixe este repositório.
2. Copie a pasta:



custom_components/dinplug
## ⚠️ Breaking Change (Version 0.2.0)

The YAML configuration format has been updated to support multiple platforms under a single host. If you are upgrading from a previous version, you **must** update your `configuration.yaml` file.

para dentro do diretório de configuração do Home Assistant:



/config/custom_components/dinplug
**Old format:**
```yaml
light:
- platform: dinplug
host: 192.168.51.30
# ...
```

**New format:**
```yaml
dinplug:
- host: 192.168.51.30
lights:
# ...
shades:
# ...
```

A estrutura final deve ficar assim:
---

## 📦 Installation

1. Download this repository.
2. Copy the folder `custom_components/dinplug` into your Home Assistant configuration directory (`/config`).
3. Restart Home Assistant.

The final structure should look like this:
```
/config
└── custom_components
└── dinplug
├── init.py
├── const.py
├── light.py
└── manifest.json


3. Reinicie o Home Assistant.
└── dinplug
├── __init__.py
├── hub.py
├── light.py
├── cover.py
├── climate.py
├── sensor.py
└── manifest.json
```

---

## ⚙️ Configuração via YAML
## ⚙️ Configuration (YAML)

Adicione ao `configuration.yaml`:
Add the `dinplug` integration to your `configuration.yaml` file. All platforms (light, cover, climate, sensor) are configured under the same host.

```yaml
light:
- platform: dinplug
host: 192.168.51.30
dinplug:
- host: 192.168.51.30
port: 23
lights:
- name: "Sala Teto"
- name: "Living Room Ceiling"
device: 104
channel: 1
dimmer: true

- name: "Cozinha Spots"
device: 107
channel: 4
dimmer: false
shades:
- name: "Living Room Shade"
device: 201
channel: 1
hvacs:
- name: "Main HVAC"
device: 301
buttons:
- name: "Keypad Button 1"
device: 401
channel: 1
```
### Campos disponíveis
| Campo | Tipo | Obrigatório | Descrição |
| --- | --- | --- | --- |
| `host` | string | ✔ Sim | IP do controlador DINPLUG |
| `port` | número | ✖ Não (23) | Porta Telnet |
| `lights` | lista | ✔ Sim | Lista de cargas |
| `device` | número | ✔ Sim | Endereço do módulo (ex: 104) |
| `channel` | número | ✔ Sim | Canal do módulo (1–n) |
| `name` | string | ✔ Sim | Nome da entidade no HA |
| `dimmer` | booleano | ✖ Não (true) | `TRUE` = dimmer, `FALSE` = on/off |

### 💡 Como funciona
### Light Configuration
| Field | Type | Required | Description |
|-----------|---------|---------------|--------------------------------------|
| `host` | string | ✔ Yes | IP address of the DINPLUG controller |
| `port` | number | ✖ No (23) | Telnet port |
| `lights` | list | ✔ Yes | List of loads |
| `device` | number | ✔ Yes | Module address (e.g., 104) |
| `channel` | number | ✔ Yes | Module channel (1–n) |
| `name` | string | ✔ Yes | Entity name in Home Assistant |
| `dimmer` | boolean | ✖ No (true) | `true` = dimmer, `false` = on/off |

### Cover (Shade) Configuration
| Field | Type | Required | Description |
|-----------|---------|---------------|--------------------------------------|
| `shades` | list | ✔ Yes | List of shades |
| `device` | number | ✔ Yes | Module address |
| `channel` | number | ✔ Yes | Module channel |
| `name` | string | ✔ Yes | Entity name in Home Assistant |

### Climate (HVAC) Configuration
| Field | Type | Required | Description |
|-----------|---------|---------------|--------------------------------------|
| `hvacs` | list | ✔ Yes | List of HVAC units |
| `device` | number | ✔ Yes | Module address |
| `name` | string | ✔ Yes | Entity name in Home Assistant |

### Sensor (Button) Configuration
| Field | Type | Required | Description |
|-----------|---------|---------------|--------------------------------------|
| `buttons` | list | ✔ Yes | List of keypad buttons to monitor |
| `device` | number | ✔ Yes | Keypad address |
| `channel` | number | ✔ Yes | Button number |
| `name` | string | ✔ Yes | Entity name in Home Assistant |

O Home Assistant abre uma conexão TCP com o controlador M4 e:
---

**Envia comandos:**
### ✔️ Supported Features

`LOAD <device> <channel> <level>`
- [x] Light: ON/OFF and dimmer control
- [x] Cover: Open, close, stop, and set position
- [x] Climate: Mode, temperature, and fan control
- [x] Sensor: Real-time button state (`press`, `release`, `hold`, `double`)
- [x] Instant status updates via telemetry
- [x] No polling

- `level = 0` → OFF
- `level = 1–100` → dimmer
- `level = 100` → ON
---

**Recebe telemetria:**
### 🐞 Debugging

`R:LOAD <device> <channel> <level>`
Atualiza o estado instantaneamente no HA.
To enable detailed logs, add this to `configuration.yaml`:
```yaml
logger:
default: warning
logs:
custom_components.dinplug: debug
```

**Mantém conexão viva:**
---
---

- Envia `STA` periodicamente
- Monitora `R:MODULE STATUS` para disponibilidade
# DINPLUG – Integração Home Assistant (YAML)

Tudo é push-based — sem polling.
Integração customizada do Home Assistant para controlar módulos **DINPLUG** via Telnet (porta 23).

### 🔌 Exemplo completo
Suporta as seguintes plataformas:
- `light`: Luzes On/Off e dimmers.
- `cover`: Cortinas e persianas.
- `climate`: Sistemas de ar condicionado (HVAC).
- `sensor`: Monitoramento de botões de keypads.

> 📌 Esta é a versão baseada em **YAML** (sem Config Flow). Ideal para instalações profissionais, simples e diretas.

---

## ⚠️ Breaking Change (Versão 0.2.0)

O formato de configuração YAML foi atualizado para suportar múltiplas plataformas sob um único host. Se você está atualizando de uma versão anterior, **precisa** atualizar seu arquivo `configuration.yaml`.

**Formato antigo:**
```yaml
light:
- platform: dinplug
host: 192.168.51.30
# ...
```

**Novo formato:**
```yaml
dinplug:
- host: 192.168.51.30
lights:
# ...
shades:
# ...
```

---

## 📦 Instalação

1. Baixe este repositório.
2. Copie a pasta `custom_components/dinplug` para o diretório de configuração do seu Home Assistant (`/config`).
3. Reinicie o Home Assistant.

A estrutura final deve ficar assim:
```
/config
└── custom_components
└── dinplug
├── __init__.py
├── hub.py
├── light.py
├── cover.py
├── climate.py
├── sensor.py
└── manifest.json
```

---

## ⚙️ Configuração via YAML

Adicione a integração `dinplug` ao seu arquivo `configuration.yaml`. Todas as plataformas (light, cover, climate, sensor) são configuradas sob o mesmo host.

```yaml
dinplug:
- host: 192.168.51.30
port: 23
lights:
- name: "Sala Teto"
device: 104
channel: 1
dimmer: true
shades:
- name: "Cortina Sala"
device: 201
channel: 1
hvacs:
- name: "AC Principal"
device: 301
buttons:
- name: "Botão Keypad 1"
device: 401
channel: 1
```

- name: "Sala Arandela"
device: 104
channel: 2
dimmer: false

- name: "Spots Cozinha"
device: 107
channel: 4
dimmer: true
### Configuração de Luzes (Light)
| Campo | Tipo | Obrigatório | Descrição |
|-----------|----------|---------------|-------------------------------------|
| `host` | string | ✔ Sim | IP do controlador DINPLUG |
| `port` | número | ✖ Não (23) | Porta Telnet |
| `lights` | lista | ✔ Sim | Lista de cargas |
| `device` | número | ✔ Sim | Endereço do módulo (ex: 104) |
| `channel` | número | ✔ Sim | Canal do módulo (1–n) |
| `name` | string | ✔ Sim | Nome da entidade no HA |
| `dimmer` | booleano | ✖ Não (true) | `true` = dimmer, `false` = on/off |

### Configuração de Cortinas (Cover)
| Campo | Tipo | Obrigatório | Descrição |
|-----------|----------|---------------|-------------------------------------|
| `shades` | lista | ✔ Sim | Lista de cortinas |
| `device` | número | ✔ Sim | Endereço do módulo |
| `channel` | número | ✔ Sim | Canal do módulo |
| `name` | string | ✔ Sim | Nome da entidade no HA |

### Configuração de Ar Condicionado (Climate)
| Campo | Tipo | Obrigatório | Descrição |
|-----------|----------|---------------|-------------------------------------|
| `hvacs` | lista | ✔ Sim | Lista de equipamentos de AC |
| `device` | número | ✔ Sim | Endereço do módulo |
| `name` | string | ✔ Sim | Nome da entidade no HA |

### Configuração de Sensores (Button)
| Campo | Tipo | Obrigatório | Descrição |
|-----------|----------|---------------|-------------------------------------|
| `buttons` | lista | ✔ Sim | Lista de botões de keypad |
| `device` | número | ✔ Sim | Endereço do keypad |
| `channel` | número | ✔ Sim | Número do botão |
| `name` | string | ✔ Sim | Nome da entidade no HA |

- name: "Corredor"
device: 105
channel: 3
dimmer: false
```
---

### ✔️ Recursos suportados
### ✔️ Recursos Suportados

- [x] Controle ON/OFF
- [x] Controle de dimmer (brightness)
- [x] Atualização instantânea por telemetria
- [x] Light: Controle ON/OFF e dimmer
- [x] Cover: Abrir, fechar, parar e definir posição
- [x] Climate: Controle de modo, temperatura e ventilação
- [x] Sensor: Estado do botão em tempo real (`press`, `release`, `hold`, `double`)
- [x] Atualização de status instantânea por telemetria
- [x] Sem polling
- [x] Múltiplos módulos e canais
- [x] Disponibilidade online/offline por módulo

### 🚧 Roadmap (próximas versões)

- [ ] Auto-descoberta de loads via `REFRESH`
- [ ] Configuração via UI (Config Flow)
- [ ] Suporte a Scenes (`SCN`)
- [ ] Suporte a Cortinas (`SHADE`)
- [ ] Suporte a HVAC
- [ ] Criação automática de `Devices` por módulo

---

### 🐞 Debug (opcional)

Para ativar logs detalhados da integração:
### 🐞 Debug

Para ativar logs detalhados, adicione ao `configuration.yaml`:
```yaml
logger:
default: warning
Expand Down
Binary file removed csv-to-yaml.exe
Binary file not shown.
Loading