emoacht / Monitorian

A Windows desktop tool to adjust the brightness of multiple monitors with ease
https://www.microsoft.com/store/apps/9nw33j738bl0
MIT License
3.42k stars 161 forks source link

Remedy for faulty monitor which fails to respond its capabilities #270

Closed CC0126 closed 2 years ago

CC0126 commented 2 years ago

At first I only used it to control my AOC Q2790PQ, it had no problems, but after I replaced a monitor AOC Q2790PC, the software did not work properly. After many searches, I found the open source address of your software, downloaded its source code, and studied it. After I tested DDC-Control, AOC iMenu, FreeMonitorManager, I found the problem. This new monitor has multiple interfaces (such as HDMI, DP, USB-C), the VCP value of the USB-C interface returns to normal, but HDMI returns garbled characters, which makes the software unable to obtain whether the display actually supports DDC /CI command, which hinders the work of the software. I can get the actual brightness by judging that the VCP has a response but cannot be resolved. To determine whether the monitor supports DDC/CI non-standard, just like FreeMonitorManager. Now he works fine on my monitor. probe.log is here:

[Date: 2021/12/19 下午 06:12:53 Ver: 3.8.0.0]
{
  "System": "Manufacturer: LENOVO, Model: 80NV",
  "Device Context - DeviceItems": [
    {
      "DeviceInstanceId": "DISPLAY\\AOC2790\\4&1c062684&1&UID198147",
      "Description": "Generic PnP Monitor",
      "DisplayIndex": 1,
      "MonitorIndex": 0
    }
  ],
  "DisplayMonitor - DisplayItems": [
    {
      "DeviceInstanceId": "DISPLAY\\AOC2790\\4&1c062684&1&UID198147",
      "DisplayName": "Q2790R3",
      "IsInternal": false,
      "ConnectionDescription": "HDMI",
      "PhysicalSize": 26.9708023
    }
  ],
  "Display Config - DisplayItems": [
    {
      "DeviceInstanceId": "DISPLAY\\AOC2790\\4&1c062684&1&UID198147",
      "DisplayName": "Q2790R3",
      "IsInternal": false,
      "ConnectionDescription": "HDMI",
      "IsAvailable": true
    }
  ],
  "Device Installation - InstalledItems": [
    {
      "DeviceInstanceId": "DISPLAY\\AOC2790\\4&1C062684&1&UID198147",
      "Description": "通用即插即用监视器",
      "IsRemovable": true
    }
  ],
  "Monitor Configuration - PhysicalItems": [
    {
      "Key": {
        "DisplayIndex": 1,
        "MonitorRect": "Location:0,0, Size:2560,1440"
      },
      "Value": [
        {
          "Description": "Generic PnP Monitor",
          "MonitorIndex": 0,
          "Capability": {
            "IsHighLevelBrightnessSupported": false,
            "IsLowLevelBrightnessSupported": false,
            "IsContrastSupported": false,
            "CapabilitiesString": "O╠",
            "CapabilitiesReport": "Luminance: False, Contrast: False, Speaker Volume: False, Power Mode: False",
            "CapabilitiesData": "T6hkAMzMzMw4AQAAAAAAAAAAAgAu8uk9svQDADOO7T2y9NcBAQAAAAEAAAABAAAABAACAAAAAAAAAAAAAAAAAAIAAAAIAAIAAAAAAAAAAAAAAAAAAAAAAFIAAAAAAAAAUgAAAFwAXAA\/AFwARABJAFMAUABMAEEAWQAjAEEATwBDADIANwA5ADAAIwA0ACYAMQBjADAANgAyADYAOAA0ACYAMQAmAFUASQBEADEAOQA4ADEANAA3ACMAewBlADYAZgAwADcAYgA1AGYALQBlAGUAOQA3AC0ANABhADkAMAAtAGIAMAA3ADYALQAzADMAZgA1ADcAYgBmADQAZQBhAGEANwB9AAAAAgAAAFNYCMrOFqpIsRTenHIzQiMBAAAAAAAAAAAAAABTWAjKzhaqSLEU3pxyM0IjAgAAAAAAAAAAAAAAAAAAAExNRU1IAQAAAAAAAAAAAAA="
          },
          "GetBrightness": "Success: True, Valid: True (Minimum: 0, Current: 0, Maximum: 100)",
          "SetBrightness": "Success: True, Match: True (Expected: 9, Actual: 9)"
        }
      ]
    }
  ],
  "MSMonitorClass - DesktopItems": [
    {
      "DeviceInstanceId": "DISPLAY\\LGD0533\\4&1C062684&1&UID265988",
      "Description": "通用即插即用监视器",
      "BrightnessLevels": "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100"
    }
  ],
  "ElapsedTime": [
    "DeviceItems    -> 0.001",
    "DisplayMonitorItems -> 0.013",
    "DisplayConfigItems -> 0.007",
    "InstalledItems -> 0.014",
    "PhysicalItems  -> 8.162",
    "DesktopItems   -> 0.035"
  ]
}
CC0126 commented 2 years ago

operation.log: [Date: 2021/12/19 下午 06:12:43 Ver: 3.8.0.0] Enabled

emoacht commented 2 years ago

Thanks for the explanation. I understand that you are talking about a monitor which fails to respond to the inquiry for its capabilities by DDC/CI command. Your case looks similar to #215. Damn AOC ... I will call them faulty monitors.

Generally I do not prefer to add modifications which result in extra function calls even in the case of decent monitors. It is undesirable to make the systems which have only decent monitors to use extra resources for the sake of faulty monitors. Thus, I will not merge your PR #269. In addition, if you wish check the functionality of a monitor without the information on its capabilities, you have to test not only getting brightness but also setting brightness both in high and low levels. It will be cumbersome.

Instead, I think if a user is confident that a monitor will work anyway, it will be relatively better to skip testing process alltogether using a white list of such monitors provided by, perhaps, command-line arguments. I am still wondering but this is my initial thoughts.

P.S. To obtain meaningul information from operation.log, you need to use this app for a while.

CC0126 commented 2 years ago

Is there any command-line can let the software skip the check of the VCP return codes? Now I can't use anything on the software it says “can't control the monitor”

CC0126 commented 2 years ago

image It shows like this. But I opened the DDC/CI function. After I change the code like PR #269 it works well like this: image

CC0126 commented 2 years ago

The new operation.log is here

[Date: 2021/12/19 下午 06:12:43 Ver: 3.8.0.0]
Enabled

[Date: 2021/12/19 下午 06:12:53 Ver: 3.8.0.0]
ScanAsync [2021/12/19 下午 06:12:48]
{
  "Items": [
    {
      "Type": "UnreachableMonitorItem",
      "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
      "Description": "Q2790R3",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": Empty,
      "IsReachable": false,
      "IsBrightnessSupported": false,
      "IsContrastSupported": false,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "UnreachableMonitorItem",
        "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
        "Description": "Q2790R3",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": Empty,
        "IsReachable": false,
        "IsBrightnessSupported": false,
        "IsContrastSupported": false,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "Q2790R3",
      "IsUnison": true,
      "IsControllable": false,
      "IsConfirmed": false,
      "ControllableCount": 2,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": true
    }
  ]
}

[Date: 2021/12/19 下午 06:13:13 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/19 下午 11:18:28 Ver: 3.8.0.0]
Initiated

[Date: 2021/12/19 下午 11:18:31 Ver: 3.8.0.0]
Check update: No update

[Date: 2021/12/19 下午 11:18:34 Ver: 3.8.0.0]
ScanAsync [2021/12/19 下午 11:18:29]
{
  "Items": [
    {
      "Type": "UnreachableMonitorItem",
      "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
      "Description": "Q2790R3",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": Empty,
      "IsReachable": false,
      "IsBrightnessSupported": false,
      "IsContrastSupported": false,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "UnreachableMonitorItem",
        "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
        "Description": "Q2790R3",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": Empty,
        "IsReachable": false,
        "IsBrightnessSupported": false,
        "IsContrastSupported": false,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "Q2790R3",
      "IsUnison": true,
      "IsControllable": false,
      "IsConfirmed": false,
      "ControllableCount": 3,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": true
    }
  ]
}

[Date: 2021/12/19 下午 11:19:16 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:28:09 Ver: 3.8.0.0]
Initiated

[Date: 2021/12/20 下午 07:28:10 Ver: 3.8.0.0]
Check update: Failed
System.Exception: 异常来自 HRESULT:0x8024402C
   在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   在 StoreAgency.StoreAgent.<CheckUpdateAsync>d__43.MoveNext()

[Date: 2021/12/20 下午 07:28:13 Ver: 3.8.0.0]
ScanAsync [2021/12/20 下午 07:28:10]
{
  "Items": [
    {
      "Type": "UnreachableMonitorItem",
      "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
      "Description": "Q2790R3",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": Empty,
      "IsReachable": false,
      "IsBrightnessSupported": false,
      "IsContrastSupported": false,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "UnreachableMonitorItem",
        "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
        "Description": "Q2790R3",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": Empty,
        "IsReachable": false,
        "IsBrightnessSupported": false,
        "IsContrastSupported": false,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "Q2790R3",
      "IsUnison": false,
      "IsControllable": false,
      "IsConfirmed": false,
      "ControllableCount": 3,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": true
    }
  ]
}

[Date: 2021/12/20 下午 07:28:15 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:28:17 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:28:18 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:31:43 Ver: 3.8.0.0]
Initiated

[Date: 2021/12/20 下午 07:31:46 Ver: 3.8.0.0]
Check update: No update

[Date: 2021/12/20 下午 07:31:47 Ver: 3.8.0.0]
ScanAsync [2021/12/20 下午 07:31:43]
{
  "Items": [
    {
      "Type": "UnreachableMonitorItem",
      "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
      "Description": "Q2790R3",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": Empty,
      "IsReachable": false,
      "IsBrightnessSupported": false,
      "IsContrastSupported": false,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "UnreachableMonitorItem",
        "DeviceInstanceId": "DISPLAY\AOC2790\4&1c062684&1&UID198147",
        "Description": "Q2790R3",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": Empty,
        "IsReachable": false,
        "IsBrightnessSupported": false,
        "IsContrastSupported": false,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "Q2790R3",
      "IsUnison": false,
      "IsControllable": false,
      "IsConfirmed": false,
      "ControllableCount": 3,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": true
    }
  ]
}

[Date: 2021/12/20 下午 07:31:51 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:31:53 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:31:53 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:31:54 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:31:54 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:32:03 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021/12/20 下午 07:32:04 Ver: 3.8.0.0]
OnMonitorAccessFailed
Status: Failed
Message: 
emoacht commented 2 years ago

Is there any command-line can let the software skip the check of the VCP return codes?

No, not yet.

CC0126 commented 2 years ago

I think it is possible to add an option or command to the hidden menu. If the user thinks his monitor is okay, he can try it. There may be more Monitors with such problems, and the returned VCP data may change frequently, so it may take a lot of effort to design a whitelist.

emoacht commented 2 years ago

In fact, a whitelist by command-line option is the least costly approach.

Added preclear option by 6e5d4a736f01fd79ef84c43dec25287c2c67b287 and 1f0d50a8fb9ad3c6bf2664c70db13924078cc0b1 To use this option,

  1. Get probe.log and find the Device Instance ID of the monitor in question.
  2. Use this option as shown below. If there are multiple monitors in question, continue Device Instance ID delimited by space.
    /preclear [Device Instance ID]
  3. You can use command-line arguments in the hidden menu to set this option.

In case you have multiple monitors, simply add thier Device Instance IDs.

/preclear [First Device Instance ID] [Second Device Instance ID]
CC0126 commented 2 years ago

Thank you very much! I downloaded the latest code and test the "preclear" commandline. It now works well! Will you release these change in the next version on the Microsoft Store?

emoacht commented 2 years ago

Thanks for the confirmation. This preclear option is now included in Ver 3.8.2. I will keep this issue pinned as the notice of this option.

HaiyiMei commented 2 years ago

Hi there. I've got the same issue like here.


[Date: 2021-12-24 13:20:49 Ver: 3.8.2.0]
ScanAsync [2021-12-24 13:20:49]
{
  "Items": [
    {
      "Type": "UnreachableMonitorItem",
      "DeviceInstanceId": "DISPLAY\PHLC216\5&1015af17&0&UID8448",
      "Description": "PHL 276C8",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": Empty,
      "IsReachable": false,
      "IsBrightnessSupported": false,
      "IsContrastSupported": false,
      "IsPrecleared": false,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "UnreachableMonitorItem",
        "DeviceInstanceId": "DISPLAY\PHLC216\5&1015af17&0&UID8448",
        "Description": "PHL 276C8",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": Empty,
        "IsReachable": false,
        "IsBrightnessSupported": false,
        "IsContrastSupported": false,
        "IsPrecleared": false,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "PHL 276C8",
      "IsUnison": false,
      "IsControllable": false,
      "IsConfirmed": false,
      "ControllableCount": 2,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": true
    }
  ]
}

[Date: 2021-12-24 13:20:54 Ver: 3.8.2.0]
OnMonitorAccessFailed
Status: Failed
Message: 

[Date: 2021-12-24 13:20:54 Ver: 3.8.2.0]
OnMonitorAccessFailed
Status: Failed
Message: 

And I did the same action as here

In fact, a whitelist by command-line option is the least costly approach.

Added preclear option by 6e5d4a7 and 1f0d50a To use this option,

  1. Get probe.log and find the Device Instance ID of the monitor in question.
  2. Use this option as shown below. If there are multiple monitors in question, continue Device Instance ID delimited by space.
/preclear [Device Instance ID]
  1. You can use command-line arguments in the hidden menu to set this option.

And I got this new log:


[Date: 2021-12-24 13:23:09 Ver: 3.8.2.0]
Initiated

[Date: 2021-12-24 13:23:10 Ver: 3.8.2.0]
OnMonitorAccessFailed
Status: TransmissionFailed
Message: Low level, Code: -1071241854, Message: An error occurred while transmitting data to the device on the I2C bus.

[Date: 2021-12-24 13:23:10 Ver: 3.8.2.0]
ScanAsync [2021-12-24 13:23:10]
{
  "Items": [
    {
      "Type": "DdcMonitorItem",
      "DeviceInstanceId": "DISPLAY\PHLC216\5&1015af17&0&UID8448",
      "Description": "PHL 276C8",
      "DisplayIndex": 1,
      "MonitorIndex": 0,
      "MonitorRect": 0,0,2560,1440,
      "IsReachable": true,
      "IsBrightnessSupported": true,
      "IsContrastSupported": true,
      "IsPrecleared": true,
      "Brightness": -1,
      "BrightnessSystemAdjusted": -1,
      "Contrast": -1
    }
  ],
  "Monitors": [
    {
      "Item": {
        "Type": "DdcMonitorItem",
        "DeviceInstanceId": "DISPLAY\PHLC216\5&1015af17&0&UID8448",
        "Description": "PHL 276C8",
        "DisplayIndex": 1,
        "MonitorIndex": 0,
        "MonitorRect": 0,0,2560,1440,
        "IsReachable": true,
        "IsBrightnessSupported": true,
        "IsContrastSupported": true,
        "IsPrecleared": true,
        "Brightness": -1,
        "BrightnessSystemAdjusted": -1,
        "Contrast": -1
      },
      "Name": "PHL 276C8",
      "IsUnison": false,
      "IsControllable": true,
      "IsConfirmed": false,
      "ControllableCount": 2,
      "IsByKey": false,
      "IsSelected": false,
      "IsTarget": false
    }
  ]
}

And I got nothing in my Monitorian software: image

@emoacht @CC0126 Do you know why this happens? Thanks a lot.

emoacht commented 2 years ago

@HaiyiMei Could you show probe.log?

HaiyiMei commented 2 years ago

@HaiyiMei Could you show probe.log?

[Date: 2021-12-24 13:49:21 Ver: 3.8.2.0]
{
  "System": "Manufacturer: LENOVO, Model: 90Q90033CP",
  "Device Context - DeviceItems": [
    {
      "DeviceInstanceId": "DISPLAY\\PHLC216\\5&1015af17&0&UID8450",
      "Description": "Generic PnP Monitor",
      "DisplayIndex": 1,
      "MonitorIndex": 0
    }
  ],
  "DisplayMonitor - DisplayItems": null,
  "Display Config - DisplayItems": [
    {
      "DeviceInstanceId": "DISPLAY\\PHLC216\\5&1015af17&0&UID8450",
      "DisplayName": "PHL 276C8",
      "IsInternal": false,
      "ConnectionDescription": "DVI",
      "IsAvailable": true
    }
  ],
  "Device Installation - InstalledItems": [
    {
      "DeviceInstanceId": "DISPLAY\\PHLC216\\5&1015AF17&0&UID8450",
      "Description": "Generic PnP Monitor",
      "IsRemovable": true
    }
  ],
  "Monitor Configuration - PhysicalItems": [
    {
      "Key": {
        "DisplayIndex": 1,
        "MonitorRect": "Location:0,0, Size:2560,1440"
      },
      "Value": [
        {
          "Description": "Generic PnP Monitor",
          "MonitorIndex": 0,
          "Capability": {
            "IsHighLevelBrightnessSupported": false,
            "IsLowLevelBrightnessSupported": false,
            "IsContrastSupported": false,
            "IsPrecleared": false,
            "CapabilitiesString": null,
            "CapabilitiesReport": null,
            "CapabilitiesData": null
          },
          "GetBrightness": "Success: False",
          "SetBrightness": "Success: False"
        }
      ]
    }
  ],
  "MSMonitorClass - DesktopItems": [ ],
  "ElapsedTime": [
    "DeviceItems    -> 0.002",
    "DisplayMonitorItems -> 0.005",
    "DisplayConfigItems -> 0.001",
    "InstalledItems -> 0.002",
    "PhysicalItems  -> 0.006",
    "DesktopItems   -> 0.019"
  ]
}
emoacht commented 2 years ago

@HaiyiMei Thanks for the log. Unfortunately, the following part indicates that your monitor fails to get and set brightness. It means that your monitor is totally incompatible with DDC/CI.

"GetBrightness": "Success: False",
"SetBrightness": "Success: False"

This option is not for such case.

HaiyiMei commented 2 years ago

@HaiyiMei Thanks for the log. Unfortunately, the following part indicates that your monitor fails to get and set brightness. It means that your monitor is totally incompatible with DDC/CI.

"GetBrightness": "Success: False",
"SetBrightness": "Success: False"

This option is not for such case.

Thanks for the reply.

jacob-pro commented 2 years ago

In case it is any useful information; I have a Samsung T24D390EW connected via HDMI. Calling GetMonitorCapabilities() fails with 0xC026258B (and is therefore treated by Monitorian as an UnreachableMonitorItem), but testing it with my own program I can call the Get/SetMonitorBrightness functions without issue.

emoacht commented 2 years ago

@jacob-pro Thanks for the information. If so, the results of "GetBrightness" and "SetBrightness" in probe.log should be successful. Then your monitor is expected to be a good candidate for this option.

jacob-pro commented 2 years ago

@emoacht indeed:

        {
          "Description": "TD390_T24D390 (HDMI)",
          "MonitorIndex": 0,
          "Capability": {
            "IsHighLevelBrightnessSupported": false,
            "IsLowLevelBrightnessSupported": false,
            "IsContrastSupported": false,
            "IsPrecleared": false,
            "CapabilitiesString": null,
            "CapabilitiesReport": null,
            "CapabilitiesData": null
          },
          "GetBrightness": "Success: True, Valid: True (Minimum: 0, Current: 70, Maximum: 100)",
          "SetBrightness": "Success: True, Match: True (Expected: 63, Actual: 63)"
        }
emoacht commented 2 years ago

As I wrote in another issue, preclude option was added by c9ed609cf1bfcb7db0d8eb9d93b7b9b7277e0336

This option is to intentionally exclude a specfic monitor from those to be handled by this app. The usage is the same as that of preclear option while the effects are opposite. https://github.com/emoacht/Monitorian/issues/270#issuecomment-998347584

Use this option as shown below.

/preclude [Device Instance ID]