2012 Max Air roof ventilator integrated into the Home Assistant via infrared

The "Max Air" roof vent from the brand "2012" (yes, it really is called that) is one of the best roof vents I've seen so far. With a price of only around €200 and really good workmanship, it is simply impressive.

I will discuss the exact advantages and disadvantages in a future blog post. The main focus here will be on how to integrate the fan control into Home Assistant.

2012 Max Air roof ventilator
  • [Low-noise brushless motor - five times longer service life than conventional brush motors]: Exclusive brushless motor solution that operates with extremely low noise. Powerful...

Letzte Aktualisierung am 15.11.2025 / Werbung / Bilder von der Amazon Product Advertising API

Status quo

The fan is supplied with a simple infrared remote control. There are also buttons on the device.

The only interface without opening or otherwise manipulating the device is therefore to use the infrared interface on the underside of the device to trigger certain actions such as opening and closing the flap

Infrared reverse engineering

Reverse engineering is a big word in this context, but it is actually exactly what is needed here: In order to simulate a button press on the original remote control with Home Assistant, we need the exact infrared codes that are sent by the remote control. We can then send the codes with an ESP32 and ESPHome via an IR transmitter and have thus enabled remote control via Home Assistant for just a few euros.

What do we need?

The following components can be used to read the codes and then send them again.

ESP32 for controlling the IR diodes

ESP32
  • Powerful ESP32 microcontroller installed! An absolute novelty on the market! The ESP32 ethernet is an absolute all-rounder. It is characterized by its compact design. For the...

Letzte Aktualisierung am 15.11.2025 / Werbung / Bilder von der Amazon Product Advertising API

Alternatively, other microcontrollers, such as an ESP8266, can also be used as long as they are supported by ESPHome.

IR transmitter and receiver

IR transmitter and receiver
  • IR is widely used for remote control. With this IR receiver set, the Arduino Project is able to transmit command to any IR remote receiver if you have the correct decoder.

Letzte Aktualisierung am 15.11.2025 / Werbung / Bilder von der Amazon Product Advertising API

I deliberately chose exactly this article, as the IR diodes are provided directly with the appropriate resistors and can be easily connected to the ESP with jumper cables.

Record IR codes

Of course, I first researched whether there were already known codes on the Internet that I could simply use. Although there are many instructions for integrating classic fans or air conditioning systems, I couldn't find anything suitable for roof fans. The brand "2012" is also rather unknown, which doesn't make things easy.

Fortunately, the IR codes sent by the remote control are very easy to read and after a while I found the right combination. As you can see here in the video:

The matching codes

The following commands can be sent to the roof fan. At least that's all I've found out. There may be more, but there is already a bit more than with the original remote control:

OPEN:
  address: 0x7F80
  command: 0xED12
CLOSE:
  address: 0x7F80
  command: 0xF00F
AIR IN:
  address: 0x7F80
  command: 0xF50A
AIR OUT:
  address: 0x7F80
  command: 0xE01F
STOP:
  address: 0x7F80
  command: 0xFA05
LID UP:
  address: 0x7F80
  command: 0xFB04
LID DOWN:
  address: 0x7F80
  command: 0xF906
RAIN MODE:
  address: 0x7F80
  command: 0xE11E

For example, there is a "Stop" command or one for "Lid-Up" or "Lid-Down", with which you can move the hatch up or down in small steps. The remaining commands are self-explanatory. They correspond to the commands on the remote control and on the device itself.

If you use these codes and combine them with simple button entities in ESPHome, you can emulate the remote control and integrate it into Home Assistant.

Complete ESP Home code
esphome:
  name: fan-remote-esp8285
  platform: ESP8266
  board: esp8285

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

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

web_server:
  version: 3

ota:
  platform: esphome

remote_receiver:
  pin:
    number: GPIO14
    inverted: True
  dump: nec

remote_transmitter:
  id: my_remote_transmitter
  pin: GPIO4
  carrier_duty_percent: 50%

button:
  - platform: template
    name: Open
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xED12
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Close
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xF00F
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Air In
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xF50A
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Air Out
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xE01F
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Stop
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xFA05
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Lid Up
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xFB04
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Lid Down
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xF906
          repeat: 2
      - delay: 500ms

  - platform: template
    name: Rain Mode
    on_press:
      - remote_transmitter.transmit_nec:
          address: 0x7F80
          command: 0xE11E
          repeat: 2
      - delay: 500ms

I'm still working on a good UI in Home Assistant. Until then, I'm using a simple entity list to display all the buttons one below the other:

Automations

Now that control is possible via Home Assistant for the first time, it is of course possible to implement some automations that can automatically ensure a better climate in the camper. For example:

  1. Open the hatch automatically once a day, ventilate at the highest level for 30 minutes and then close again.
    Particularly exciting when the camper is in storage.
  2. Ventilate automatically as soon as the humidity rises above a certain level.
    This is particularly easy to implement if you have a sensor indoors and outdoors so that you can compare the values. If the air outside is drier than inside, it is worth ventilating.
  3. Automatic start as an extractor hood when the hob is activated.
    This is particularly useful when cooking with an induction hob.

Conclusion

Control via IR is the easiest way to integrate the Max Air from 2012 into Home Assistant. However, there is one decisive disadvantage: the IR transmitter of the ESP always needs a clear view of the IR port of the fan. A good position in the camper is therefore a prerequisite. In future, I may try to control the circuit board or the motor directly in order to achieve even better control and, for example, to be able to set an individual speed. Because over-engineering always comes first 🤝🏻

Further contributions