← Tilbage til Home Assistant Automatiseringer
ESPHome Hardware & Klimastyring

Køkken: Fujitsu 3.5kW IR Varmepumpe

Af: Kasper Gyldenlev Damholdt | Placeret i Køkkenet

ESPHome IR-Transmitter (ESP8266), Short-Cycling Beskyttelse & HA Logik
📋 Test-metodologi: Egenudviklet hardwareopsætning monteret i køkkenet. Integreret direkte i Home Assistant via ESPHome Native API med automatisk re-try logik, temperaturomregning og push-notifikationer ved tabte IR-signaler.
⚡ TL;DR / Kort Konklusion:

Denne løsning gør en ældre Fujitsu 3.5kW varmepumpe uden Wi-Fi 100% intelligent via en ESP8266 med IR-transmitter flashet med ESPHome. Home Assistant automatiseringen håndterer dynamisk temperatur (17–20°C) baseret på gæster, nattid og børnenes pasningsstatus, og beskytter mod tabte IR-signaler via automatisk re-try og mobilnotifikationer.

Projektoverblik: Smart Styring af Enkelt IR-Varmepumpe

Den eksisterende Fujitsu 3.5kW varmepumpe i køkkenet er en ældre model uden indbygget Wi-Fi eller Bluetooth. For at integrere den fuldstændigt i Home Assistant er den blevet udstyret med et custom ESP8266 IR-board flashet med ESPHome.

Styringslogikken håndterer automatisk temperaturregulering baseret på tilstedeværelse (børnehave/vuggestue status, gæstemode, zone.home) og tidspunkter. Den er opbygget med re-try loops (gentagelser) for at sikre, at IR-signalerne fanges af enheden, samt sikkerhedsfunktioner som short-cycling beskyttelse og fejlnotifikationer til mobil.

Styringsdiagram & Beslutningstræ

Grafisk overblik over hvordan udløsere (triggers), variabler og tilstande beregner target-temperaturen og eksekverer IR-kommandoerne:

graph TD A[Triggers: Kl. 06/19/22, Zone/Gæst/Børn State, Temp Ændring] --> B[Beregn Variabler] B --> C{Betingelser for Target Temp} C -->|Gæst Mode ON| D[Target Temp = 20°C] C -->|Ude eller Nat 22-06| E[Target Temp = 17°C] C -->|Børn i Dagtilbud eller Aften 19-22| F[Target Temp = 18°C] C -->|Standard Dag/Tilstede| G[Target Temp = 20°C] D --> H{Evaluer Rumtemperatur & Tilstand} E --> H F --> H G --> H H -->|Temp <= Target - 0.5°C| I[Opvarmning: Send IR Heat x2] I --> I_Check{Er HVAC Mode = Heat?} I_Check -->|Nej / IR Fejl| I_Notify[Send Mobil Push-Notifikation] I_Check -->|Ja| End[Aktiv Drift] H -->|Temp > 23°C| J[Overophedning: Send IR Fan Only x2] H -->|Ude/Nat AND Temp > Target + 1°C| K[Send IR OFF] H -->|Setpunkt != Target AND ikke OFF| L[Opdater Setpunkt via IR]

Styringslogik & Temperaturmål

Automatiseringen evaluerer kontinuerligt rumtemperaturen via sensor.kokken_temp_temperatur og tilpasser climate.espir_kitchen_ac_new ud fra følgende betingelser:

Dynamiske Temperaturmål (Target Temp)
  • Gæste Mode (input_boolean.gaeste_mode = ON): 20°C (Komfortprioritet).
  • Nat (22:00 - 06:00) eller Ude (zone.home < 1): 17°C (Energibesparelse).
  • Børn i institution eller Aften (19:00 - 22:00): 18°C (Moderat varme).
  • Standard Drift (Dag/Tilstede): 20°C.
Sikkerhed & Fejlhåndtering
  • IR Signal Redundans: Ved opvarmning eller blæser-tilstand sendes IR-kommandoen 2 gange med 10 sekunders mellemrum for at sikre mod tabte IR-signaler.
  • Push-Notifikation ved Fejl: Hvis enheden ikke bekræfter heat-tilstand efter opstart, sendes kritisk notifikation til Pixel 8 Pro.
  • Køling/Overophedning Beskyttelse: Hvis rumtemperaturen overstiger 23°C, skiftes der automatisk til fan_only for at cirkulere luften.

Home Assistant Automation (YAML)

Nedenstående er den komplette Home Assistant master-automatisering opbygget med Jinja2 templating og dynamiske variabler:

alias: 'Køkken: Varmepumpe Master Styring - Komplet'
description: Optimeret styring med short-cycling beskyttelse, fejlretning og notifikationer
triggers:
  - trigger: time
    at:
      - '06:00:00'
      - '19:00:00'
      - '22:00:00'
    id: update
  - trigger: state
    entity_id:
      - zone.home
      - input_boolean.gaeste_mode
      - sensor.langhoj_dagtilbud_bornehave_marco
      - sensor.langhoj_dagtilbud_vuggestue_luckas
    id: update
  - trigger: state
    entity_id: sensor.kokken_temp_temperatur
    id: temp_change
actions:
  - variables:
      is_guest: '{{ is_state(''input_boolean.gaeste_mode'', ''on'') }}'
      is_night: '{{ now().hour >= 22 or now().hour < 6 }}'
      is_away: '{{ states(''zone.home'') | float(0) < 1 }}'
      kids_at_daycare: |
        {{ 'Kommet' in states('sensor.langhoj_dagtilbud_bornehave_marco') or 
           'Kommet' in states('sensor.langhoj_dagtilbud_vuggestue_luckas') }}
      is_evening: '{{ now().hour >= 19 and now().hour < 22 }}'
      target_temp: >
        {% if is_guest %} 20 {% elif is_night or is_away %} 17 {% elif
        kids_at_daycare or is_evening %} 18 {% else %} 20 {% endif %}
      current_temp: '{{ states(''sensor.kokken_temp_temperatur'') | float(0) }}'
      current_setpoint: >-
        {{ state_attr('climate.espir_kitchen_ac_new', 'temperature') | float(0)
        }}
  - choose:
      - conditions:
          - condition: template
            value_template: '{{ current_temp <= (target_temp - 0.5) }}'
        sequence:
          - repeat:
              count: 2
              sequence:
                - action: climate.set_hvac_mode
                  target:
                    entity_id: climate.espir_kitchen_ac_new
                  data:
                    hvac_mode: heat
                - action: climate.set_fan_mode
                  target:
                    entity_id: climate.espir_kitchen_ac_new
                  data:
                    fan_mode: high
                - action: climate.set_temperature
                  target:
                    entity_id: climate.espir_kitchen_ac_new
                  data:
                    temperature: '{{ target_temp }}'
                - delay: '00:00:10'
          - if:
              - condition: template
                value_template: '{{ not is_state(''climate.espir_kitchen_ac_new'', ''heat'') }}'
            then:
              - action: notify.mobile_app_pixel_8_pro
                data:
                  title: Varmepumpe Fejl
                  message: >-
                    Køkken VP kunne ikke starte opvarmning kl. {{
                    now().strftime('%H:%M') }}.
                  data:
                    priority: high
                    ttl: 0
      - conditions:
          - condition: template
            value_template: |
              {{ not is_night and not is_away and 
                 is_state('climate.espir_kitchen_ac_new', 'off') }}
        sequence:
          - action: climate.set_hvac_mode
            target:
              entity_id: climate.espir_kitchen_ac_new
            data:
              hvac_mode: heat
      - conditions:
          - condition: template
            value_template: '{{ current_temp > 23 }}'
        sequence:
          - repeat:
              count: 2
              sequence:
                - action: climate.set_hvac_mode
                  target:
                    entity_id: climate.espir_kitchen_ac_new
                  data:
                    hvac_mode: fan_only
                - action: climate.set_fan_mode
                  target:
                    entity_id: climate.espir_kitchen_ac_new
                  data:
                    fan_mode: auto
                - delay: '00:00:10'
      - conditions:
          - condition: template
            value_template: '{{ (is_away or is_night) and current_temp > (target_temp + 1) }}'
        sequence:
          - action: climate.set_hvac_mode
            target:
              entity_id: climate.espir_kitchen_ac_new
            data:
              hvac_mode: 'off'
      - conditions:
          - condition: template
            value_template: >-
              {{ current_setpoint != target_temp and not
              is_state('climate.espir_kitchen_ac_new', 'off') }}
        sequence:
          - action: climate.set_temperature
            target:
              entity_id: climate.espir_kitchen_ac_new
            data:
              temperature: '{{ target_temp }}'
mode: restart

ESPHome Hardware & Transmitter Setup

Firmware-konfigurationen der kører direkte på ESP8266 (ESP-12E) mikrokontrolleren. Den benytter remote_transmitter på GPIO4 til udsendelse af Fujitsu IR-koder og remote_receiver på GPIO14 med 55% tolerancetærskel:

esphome:
  name: espir
  friendly_name: EspIR

esp8266:
  board: esp12e

logger:

api:
  encryption:
    key: "******************************"

ota:
  - platform: esphome
    password: "******************************"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  ap:
    ssid: "Espir Fallback Hotspot"
    password: "******************************"

captive_portal:

web_server:
  port: 80

remote_transmitter:
  pin: GPIO4
  carrier_duty_percent: 50%

climate:
  - platform: fujitsu_general
    name: "Kitchen AC new"

remote_receiver:
  id: rcvr
  pin:
    number: GPIO14
    inverted: true
    mode:
      input: true
      pullup: true
  tolerance: 55%

sensor:
  - platform: wifi_signal
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"
    device_class: ""

Ofte Stillede Spørgsmål (FAQ)

Hvordan styres en ældre Fujitsu varmepumpe uden Wi-Fi i Home Assistant?

Det gøres ved at bygge en ESPHome IR-transmitter baseret på en ESP8266 (ESP-12E) med en IR-sender på GPIO4. ESPHome har en indbygget 'fujitsu_general' platform, der sender de korrekte IR-protokolkoder.

Hvad gør man, hvis et IR-signal til varmepumpen går tabt?

Da IR-kommunikation er envejs, benyttes en re-try løkke i Home Assistant, der sender IR-kommandoen 2 gange med 10 sekunders mellemrum. Hvis tilstanden 'heat' stadig ikke registreres, sendes en push-notifikation til mobilen.

Hvordan forhindres overophedning af køkkenet?

Hvis rumtemperaturen overstiger 23°C, skifter automatiseringen automatisk HVAC-mode til 'fan_only' for at cirkulere luften uden at tilføre yderligere varme.

Anvendt Teknologi Stack

ESP8266 (ESP-12E) ESPHome Native API Fujitsu General IR Protocol Home Assistant Automations IR Transmitter (GPIO4) IR Receiver (GPIO14) Jinja2 Templating