Fermax Blue intercom – Full HA integration with auto token renewal (no hardware)

Fermax Blue intercom – Full HA integration with auto token renewal (no hardware)

After reverse-engineering the Blue by Fermax official app API, here is a complete solution to integrate your Fermax intercom into Home Assistant with automatic token renewal every 24 hours.

Advantages

  • No extra hardware: No relays, no ESP32, no physical wiring.
  • Zero maintenance: Token renews itself automatically.
  • Instant response: Perfect for HomeKit, CarPlay or widgets.

STEP 1: Capture data with Proxyman

Install Proxyman on your computer, enable SSL on your phone and open the Fermax app.

1. Authorization Basic code
Find oauth-pro-duoxme.fermax.io → request POST /oauth/token → Headers tab → copy everything after Basic .

2. Your credentials
Same request, Body → Form tab. Watch out for special characters:
@%40 / ?%3F / #%23

3. Device ID
Tap the open door button in the app. Proxyman shows POST /deviceaction/api/v1/device/[ID]. Copy that long ID at the end of the URL.


STEP 2: configuration.yaml

sensor:
  - platform: rest
    name: "Fermax Token"
    resource: "https://oauth-pro-duoxme.fermax.io/oauth/token"
    method: POST
    payload: "grant_type=password&password=[YOUR_URL_PASSWORD]&username=[YOUR_URL_EMAIL]"
    headers:
      Content-Type: "application/x-www-form-urlencoded; charset=utf-8"
      Authorization: "Basic [YOUR_BASIC_CODE]"
      app-version: "4.3.1"
      Accept: "*/*"
      Accept-Language: "es-ES;q=1.0"
      phone-os: "26.5"
      User-Agent: "Blue/4.3.1 (com.fermax.bluefermax; build:3; iOS 26.5.0) Alamofire/5.10.2"
      phone-model: "iPhone18,1"
      app-build: "3"
    value_template: >-
      {% if value_json is defined and value_json.access_token is defined %}
        Connected
      {% else %}
        Credential Error
      {% endif %}
    json_attributes:
      - access_token
    scan_interval: 86400

rest_command:
  open_door_fermax:
    url: "https://pro-duoxme.fermax.io/deviceaction/api/v1/device/[YOUR_DEVICE_ID]"
    method: POST
    headers:
      Authorization: "Bearer {{ state_attr('sensor.fermax_token', 'access_token') }}"
      app-version: "4.3.1"
      Accept: "*/*"
      Accept-Language: "es-ES;q=1.0"
      phone-os: "26.5"
      User-Agent: "Blue/4.3.1 (com.fermax.bluefermax; build:3; iOS 26.5.0) Alamofire/5.10.2"
      phone-model: "iPhone18,1"
      app-build: "3"
    content_type: "application/json"
    payload: '{"block": 200, "number": 0, "subblock": -1}'

:light_bulb: The Accept and Accept-Language values shown are from my device. Check your own Proxyman capture to confirm yours, as they may vary depending on your phone language and app version.

:light_bulb: Accept-Encoding: br is intentionally removed to prevent Brotli compression from breaking HA's JSON parser.