# Gulvvarme: Wavin bryggers + køkken → HA styring
## Idiot-sikker installationsguide

**Formål:** Erstatte den dumme RF-modtager (Wavin JT6/3003-boksen) med to Sonoff ZBMINI Zigbee-relæer,
så Home Assistant kan styre bryggers og køkken-gulvvarme præcis som de andre rum.

---

## Del 1: Indkøb

| Vare | Antal | Pris ca. | Link/søg |
|------|-------|----------|----------|
| **Sonoff ZBMINI-L2** (Zigbee relæ, ingen nul-ledning) | 2 | ~130 kr/stk | Aliexpress, Elgiganten |
| **SONOFF SNZB-02D** Zigbee temp/fugt sensor | 2 | ~100 kr/stk | Aliexpress |

> **Vigtigt:** Vælg ZBMINI-**L2** (eller ZBMINI Extreme) – den kræver **ikke** en nuleder (N).
> Wavin-boksen har måske ikke nuleder fremme til brug for et relæ.

---

## Del 2: Forståelse af Wavin-boksen

Når du kigger på det grønne printplade med låget af:

```
MAINS IND (fra stikkontakt i væggen):
  Brun  = FASE (L) – "det farlige"
  Blå   = NUL (N)

KANAL X (til aktuator 1, fx bryggers):
  Brun  = FASE UD til aktuator

KANAL Y (til aktuator 2, fx køkken):
  Brun  = FASE UD til aktuator

Aktuatorerne får NUL fra boksen via blå ledning.
```

Boksen virker som et simpelt on/off relæ per kanal:
- Når termostaten sender "varm op" → relæet lukker → 230V fase sendes ud til aktuatoren → ventil åbner
- Sonoff ZBMINI erstatter præcis dette relæ

---

## Del 3: Installation trin for trin

### ⚠️ STOP – Sluk strøm FØR du rører noget

1. Find den sikring eller kontakt der forsyner Wavin-boksen
2. Sluk den
3. Brug en spændingsprøver/-tester på de brune ledninger inde i boksen – bekræft at der er 0V

---

### Trin 1: Fotografér ledningerne i boksen FØR du piller noget

Tag et billede med din telefon. Du vil gerne huske hvad der sidder hvor.

---

### Trin 2: Identificér de 4 relevante ledninger

I Wavin-boksen sidder:
- **Brun ind** = Fase fra væggen (fælles for begge kanaler)
- **Blå ind** = Nul fra væggen (fælles)
- **Brun ud X** = Fase ud til aktuator bryggers
- **Brun ud Y** = Fase ud til aktuator køkken

(De blå ledninger der går ud er nuleder direkte til aktuatorerne – de ændres ikke)

---

### Trin 3: Monter Sonoff ZBMINI-L2 nr. 1 (bryggers)

ZBMINI-L2 har disse klemmer:

```
[ L in ]  [ L out ]  [ S1 ]  [ S2 ]
```

Tilslut:
- **L in** ← Brun fase ind fra væggen (eller tag en aftapning fra eksisterende brun)
- **L out** → Brun fase ud til bryggers-aktuatoren (den ledning der tidligere sad i X-relæet)
- **S1/S2** = bruges kun hvis du vil have en fysisk kontakt – lad dem sidde tomme

Sonoff ZBMINI-L2 kræver ikke N (nuleder) – det er pointen med L2-modellen.

---

### Trin 4: Monter Sonoff ZBMINI-L2 nr. 2 (køkken)

Identisk som trin 3, men brug Y-kanalens udgang:
- **L in** ← Brun fase ind (kan sidde på samme aftapning som nr. 1)
- **L out** → Brun fase ud til køkken-aktuatoren

---

### Trin 5: Wavin RF-modtagerboksen

Den eksisterende boks kobles nu **forbi** – dens relæer bruges ikke længere.
Du kan enten:
- Efterlade den hængende (ufarlig, bare strøm ind og tomme udgange)
- Klippe strømmen til den (tag brun og blå ind ud af klemmerne og tape enderne)

Den gamle Wavin termostat på væggen virker stadig men gør intet – du kan efterlade den eller tage den ned.

---

### Trin 6: Gendan strøm og test

1. Sæt strøm til igen
2. Begge Sonoff-enheder bør lyse rødt (venter på pairing)

---

## Del 4: Zigbee-pairing i Home Assistant

1. Gå til **Indstillinger → Enheder → Zigbee2MQTT** (eller ZHA hvis du bruger det)
2. Klik **Tillad tilslutning / Permit join** (60 sekunder)
3. Hold knappen på Sonoff ZBMINI nede i 5 sekunder til LED blinker hurtigt
4. Enheden dukker op – navngiv den `bryggers_relæ` og `kokken_relæ`
5. Gentag for temp-sensorerne (tryk lille knap på siden for at parre)

---

## Del 5: Home Assistant konfiguration

### 5a: generic_thermostat (climate entity)

Tilføj til `configuration.yaml` (eller en inkluderet fil):

```yaml
climate:
  - platform: generic_thermostat
    name: Bryggers
    unique_id: generic_thermostat_bryggers
    heater: switch.bryggers_relae   # Sonoff enhedens switch entity
    target_sensor: sensor.bryggers_temp_sensor_temperature
    min_temp: 15
    max_temp: 28
    target_temp: 20
    cold_tolerance: 0.3
    hot_tolerance: 0.3
    min_cycle_duration:
      minutes: 5
    ac_mode: false

  - platform: generic_thermostat
    name: Køkken
    unique_id: generic_thermostat_kokken
    heater: switch.kokken_relae
    target_sensor: sensor.kokken_temp_sensor_temperature
    min_temp: 15
    max_temp: 28
    target_temp: 20
    cold_tolerance: 0.3
    hot_tolerance: 0.3
    min_cycle_duration:
      minutes: 5
    ac_mode: false
```

> Tilpas entity-navnene til hvad Zigbee2MQTT faktisk kalder dem efter pairing.

### 5b: input_number til komforttemperaturer

Tilføj til `include/input/number/varme.yaml`:

```yaml
varme_komfort_bryggers:
  name: Komfort - Bryggers
  min: 15
  max: 28
  step: 0.5
  unit_of_measurement: "°C"
  initial: 20
  icon: mdi:thermometer

varme_komfort_kokken:
  name: Komfort - Køkken
  min: 15
  max: 28
  step: 0.5
  unit_of_measurement: "°C"
  initial: 20
  icon: mdi:thermometer
```

### 5c: Tilføj til varme_recalculate scriptet

De to nye rum skal med i `include/scripts/varme_styring.yaml` → `varme_recalculate`
på samme måde som badeværelse og stue (Danfoss Ally-mønsteret):

```yaml
    # ---- Bryggers – generic_thermostat ----
    - if:
        - condition: template
          value_template: "{{ true }}"   # ingen vinduessensor endnu
      then:
        - service: climate.set_temperature
          target:
            entity_id: climate.bryggers
          data:
            hvac_mode: heat
            temperature: >
              {% set k = states('input_number.varme_komfort_bryggers') | float(20) %}
              {% if vacation %} {{ ferie_temp }}
              {% elif night %}  {{ [k - nat_sænk, 15] | max }}
              {% elif not home %} {{ [k - vaek_sænk, 15] | max }}
              {% else %} {{ k }}
              {% endif %}

    # ---- Køkken – generic_thermostat ----
    - if:
        - condition: template
          value_template: "{{ true }}"
      then:
        - service: climate.set_temperature
          target:
            entity_id: climate.kokken
          data:
            hvac_mode: heat
            temperature: >
              {% set k = states('input_number.varme_komfort_kokken') | float(20) %}
              {% if vacation %} {{ ferie_temp }}
              {% elif night %}  {{ [k - nat_sænk, 15] | max }}
              {% elif not home %} {{ [k - vaek_sænk, 15] | max }}
              {% else %} {{ k }}
              {% endif %}
```

---

## Del 6: Verificering

Når alt er sat op:
1. Gå til **Udviklerværktøjer → Tjenester**
2. Kald `climate.set_temperature` på `climate.bryggers` med `temperature: 25`
3. Lyt efter at aktuatoren klikker (kan høres eller mærkes) inden for 1-2 minutter
4. Sæt tilbage til normal komforttemperatur

---

## Resumé: Hvad du køber

| | |
|---|---|
| 2× Sonoff ZBMINI-L2 | ~260 kr |
| 2× Sonoff SNZB-02D temp-sensor | ~200 kr |
| **Total** | **~460 kr** |

Ingen elektriker, ingen nye kabler til aktuatorerne, ingen cloud-afhængighed.
