Skip to content

[FEATURE REQUEST] Support for DDC/CI (display brightness control) #679

@dries007

Description

@dries007

I would like to adjust my monitors' brightness (and on/off status) along with my existing ambient lighting using HA.

Ideally they would be a separate device per monitor with sensors and controls, with a persistent id based on the serial nr. If that is not feasible, then they can be sensors under the existing device.

At least brightness (backlight, in % preferably) and power (on/off) capabilities should be supported, but more may be handy for other use cases (color temp, source/input selection, display mode, ...)

In my ideal world I would:

  1. Be able to use scenes to switch between work, gaming, movie, ... modes, which would power on/off some of my displays along with my existing lighting changes.
  2. Have the brightness of my monitors automatically follow Circadian Lighting.

My current solution is to use an applet in my DM that lets me adjust the brightness only, and one monitor at a time. It's quite buggy, although the underlying CLI app works well, so I don't think this is related to the protocol.

Related resources:

CLI output for ddccontrol on my system
[dries@DriesPC ~]$ ddcutil --show-table detect
Display 1
   I2C bus:  /dev/i2c-6
   DRM_connector:           card1-HDMI-A-1
   EDID synopsis:
      Mfg id:               DEL - Dell Inc.
      Model:                DELL U2312HM
      Product code:         16498  (0x4072)
      Serial number:        KF87Y3AM407S
      Binary serial number: 875575123 (0x34303753)
      Manufacture year:     2013,  Week: 43
   VCP version:         2.1

Display 2
   I2C bus:  /dev/i2c-7
   DRM_connector:           card1-DP-1
   EDID synopsis:
      Mfg id:               DEL - Dell Inc.
      Model:                DELL U2720Q
      Product code:         16819  (0x41b3)
      Serial number:        9G7HVS2
      Binary serial number: 825309516 (0x3131394c)
      Manufacture year:     2020,  Week: 4
   VCP version:         2.1

Display 3
   I2C bus:  /dev/i2c-8
   DRM_connector:           card1-DP-2
   EDID synopsis:
      Mfg id:               DEL - Dell Inc.
      Model:                DELL P2317H
      Product code:         16627  (0x40f3)
      Serial number:        9KFDW649084L
      Binary serial number: 808989772 (0x3038344c)
      Manufacture year:     2016,  Week: 15
   VCP version:         2.1

Display 4
   I2C bus:  /dev/i2c-9
   DRM_connector:           card1-DP-3
   EDID synopsis:
      Mfg id:               DEL - Dell Inc.
      Model:                DELL P2418D
      Product code:         53441  (0xd0c1)
      Serial number:        MY3ND98O1X4T
      Binary serial number: 827864148 (0x31583454)
      Manufacture year:     2019,  Week: 34
   VCP version:         2.1
[dries@DriesPC ~]$ ddcutil -d 1 capabilities
Model: U2312HM
MCCS version: 2.1
Commands:
   Op Code: 01 (VCP Request)
   Op Code: 02 (VCP Response)
   Op Code: 03 (VCP Set)
   Op Code: 07 (Timing Request)
   Op Code: 0C (Save Settings)
   Op Code: E3 (Capabilities Reply)
   Op Code: F3 (Capabilities Request)
VCP Features:
   Feature: 02 (New control value)
   Feature: 04 (Restore factory defaults)
   Feature: 05 (Restore factory brightness/contrast defaults)
   Feature: 06 (Restore factory geometry defaults)
   Feature: 08 (Restore color defaults)
   Feature: 10 (Brightness)
   Feature: 12 (Contrast)
   Feature: 14 (Select color preset)
      Values:
         04: 5000 K
         05: 6500 K
         06: 7500 K
         08: 9300 K
         09: 10000 K
         0b: User 1
         0c: User 2
   Feature: 16 (Video gain: Red)
   Feature: 18 (Video gain: Green)
   Feature: 1A (Video gain: Blue)
   Feature: 52 (Active control)
   Feature: 60 (Input Source)
      Values:
         01: VGA-1
         03: DVI-1
         0f: DisplayPort-1
   Feature: AA (Screen Orientation)
      Values:
         01: 0 degrees
         02: 90 degrees
   Feature: AC (Horizontal frequency)
   Feature: AE (Vertical frequency)
   Feature: B2 (Flat panel sub-pixel layout)
   Feature: B6 (Display technology type)
   Feature: C6 (Application enable key)
   Feature: C8 (Display controller type)
   Feature: C9 (Display firmware level)
   Feature: D6 (Power mode)
      Values:
         01: DPM: On,  DPMS: Off
         04: DPM: Off, DPMS: Off
         05: Write only value to turn off display
   Feature: DC (Display Mode)
      Values:
         00: Standard/Default mode
         02: Mixed
         03: Movie
         05: Games
   Feature: DF (VCP Version)
   Feature: E0 (Manufacturer specific feature)
   Feature: E1 (Manufacturer specific feature)
   Feature: F0 (Manufacturer specific feature)
   Feature: FD (Manufacturer specific feature)

Thanks for the consideration 😄. Unfortunately I'm totally unfamiliar with Go, otherwise I would love to contribute.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions