# Health Check

This example runs the DepthAI device health check and prints the resulting diagnostics. Use it as a quick preflight test to
inspect device status, connection type, bandwidth, power supply behavior, calibration, camera sensors, IR sensors, and any
reported issues.

The example customizes `HealthCheckConfig.powerSupplyCheckDuration` to spend more time validating power behavior before printing
the final metrics.

This example requires the DepthAI v3 API, see [installation instructions](https://docs.luxonis.com/software-v3/depthai.md).

## Source code

#### Python

```python
#!/usr/bin/env python3

import sys
import time
from datetime import timedelta

import depthai as dai

def main() -> int:
    config = dai.HealthCheckConfig(powerSupplyCheckDuration=timedelta(milliseconds=20000))

    deviceInfos = dai.Device.getAllConnectedDevices()
    if not deviceInfos:
        print("No DepthAI device found.", file=sys.stderr)
        return 1

    deviceInfo = deviceInfos[0]

    print(f"Device: {deviceInfo}")
    print(f"Power supply check duration: {int(config.powerSupplyCheckDuration.total_seconds() * 1000)} ms")
    print("Running health check...")

    start = time.monotonic()
    metrics = dai.Device.performHealthCheck(deviceInfo, config)
    elapsedMs = int((time.monotonic() - start) * 1000)

    print()
    print(f"Health check completed in {elapsedMs} ms")
    print(metrics)
    return 0

if __name__ == "__main__":
    raise SystemExit(main())
```

#### C++

```cpp
#include <chrono>
#include <cstdlib>
#include <iostream>

#include "depthai/depthai.hpp"

int main() {
    dai::HealthCheckConfig config;
    config.powerSupplyCheckDuration = std::chrono::milliseconds(20000);

    const auto devices = dai::Device::getAllConnectedDevices();
    if(devices.empty()) {
        std::cerr << "No DepthAI device found." << std::endl;
        return EXIT_FAILURE;
    }
    const auto& deviceInfo = devices.front();

    std::cout << "Device: " << deviceInfo.toString() << std::endl;
    std::cout << "Power supply check duration: " << config.powerSupplyCheckDuration.count() << " ms" << std::endl;
    std::cout << "Running health check..." << std::endl;

    const auto start = std::chrono::steady_clock::now();
    const auto metrics = dai::Device::performHealthCheck(deviceInfo, config);
    const auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() - start);

    std::cout << std::endl;
    std::cout << "Health check completed in " << elapsed.count() << " ms" << std::endl;
    std::cout << metrics.toString() << std::endl;
    return 0;
}
```

### Need assistance?

Head over to [Discussion Forum](https://discuss.luxonis.com/) for technical support or any other questions you might have.
