hvac-did-flash


Namehvac-did-flash JSON
Version 1.1.2 PyPI version JSON
download
home_pageNone
SummarySTM32 Firmware Programming System for HVAC devices with DID flash support
upload_time2025-09-05 07:23:09
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords stm32 firmware programming hvac did flash
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # HVAC DID Flash

STM32 펌웨어 프로그래밍 시스템 - HVAC 장치를 위한 DID 플래시 지원

자동화된 STM32 펌웨어 프로그래밍 시스템으로, HVAC 애플리케이션에 특화된 DID(Data Identifier) 플래시 지원을 제공합니다.

## 주요 기능

- **자동화된 STM32 펌웨어 프로그래밍**: ST-Link를 통한 완전 자동화된 프로그래밍
- **지능형 플래시 검증**: 프로그래밍 전후 플래시 메모리 검증
- **시리얼 통신 검증**: UART를 통한 펌웨어 동작 확인
- **음성 안내**: 프로그래밍 진행 상황을 음성으로 안내
- **배치 처리**: 여러 펌웨어 파일의 일괄 처리
- **성능 모니터링**: 상세한 성능 분석 및 리포팅
- **오류 복구**: 강력한 오류 처리 및 자동 재시도

## 시리얼 번호 관리

- did_serial.csv 파일에 기록된 serial number는 "이전 출력된 번호"입니다.
- 예를 들어, csv에 0000이 기록되어 있으면, 다음 수행 시 0001이 자동으로 생성되어 사용됩니다.

## 설치

### PyPI에서 설치 (권장)

```bash
pip install hvac-did-flash
```

### 소스에서 설치

```bash
git clone https://github.com/your-org/hvac-did-flash.git
cd hvac-did-flash
pip install -e .
```

### 개발자 설치

```bash
git clone https://github.com/your-org/hvac-did-flash.git
cd hvac-did-flash
pip install -e ".[dev]"
```

### 2. Slack 설정 (선택사항)

Slack으로 펌웨어를 자동 업로드하려면 다음 단계를 따르세요:

#### 2.1 Slack App 생성

1. https://api.slack.com/apps 로 이동
2. "Create New App" → "From scratch" 클릭
3. App 이름 입력 (예: "HVAC Firmware Upload Bot")
4. 워크스페이스 선택

#### 2.2 권한 설정

1. 좌측 메뉴에서 "OAuth & Permissions" 클릭
2. "Scopes" 섹션으로 스크롤
3. "Bot Token Scopes"에서 "Add an OAuth Scope" 클릭
4. 다음 권한을 추가:
   - `files:write` - 파일 업로드 (필수)
   - `chat:write` - 메시지 전송 (선택사항)
5. 권한 추가 후 페이지 상단의 노란색 배너에서 "reinstall your app" 클릭
6. 워크스페이스에 재설치 승인

#### 2.3 App 설치

1. "OAuth & Permissions" 페이지 상단의 "Install to Workspace" 클릭
2. 권한 승인
3. "Bot User OAuth Token" 복사 (xoxb-로 시작)

#### 2.4 채널에 Bot 추가

1. Slack에서 파일을 업로드할 채널로 이동
2. 채널에서 `/invite @[Bot 이름]` 입력

#### 2.5 환경 변수 설정

1. `.env.example` 파일을 `.env`로 복사
2. 다음 값을 설정:

```env
SLACK_BOT_TOKEN=xoxb-your-bot-token-here
SLACK_CHANNEL_ID=C1234567890
```

**채널 ID 찾는 방법:**
- Slack 웹/데스크톱에서 채널 우클릭 → "View channel details"
- 하단의 Channel ID 복사

## 사용법

### 명령줄 인터페이스

```bash
# 기본 사용법 - 배치 모드로 모든 펌웨어 파일 처리
hvac-flash --batch

# 단일 파일 처리
hvac-flash --single-file firmware.bin

# 설정 파일 지정
hvac-flash --config config.ini --batch

# 드라이런 모드 (실제 프로그래밍 없이 테스트)
hvac-flash --dry-run

# ST-Link 시리얼 번호 지정
hvac-flash --batch --stlink-sn 123456789
```

### Python API 사용

```python
from hvac_did_flash import STM32ProgrammingSystem, Config

# 설정 로드
config = Config()

# 프로그래밍 시스템 초기화
system = STM32ProgrammingSystem(config)

# 배치 처리
firmware_files = system.scan_firmware_directory()
stats = system.process_batch_files(firmware_files)

print(f"처리 완료: {stats['successful']}/{stats['total']} 성공")
```

### 고급 사용법

```bash
# 검증 활성화
hvac-flash --batch --verify

# 검증 비활성화
hvac-flash --batch --no-verify

# 특정 ST-Link 시리얼 번호 사용
hvac-flash --batch --stlink-sn 066DFF383638424E43172239

# 사용자 정의 설정으로 실행
hvac-flash --config my_config.ini --batch
```

## 명령줄 인수

- `repeat` (선택사항): 빌드 반복 횟수 (기본값: 1)
- `start_serial` (선택사항): 시작 시리얼 번호 또는 "auto" (기본값: auto)
- `model` (선택사항): 모델명 (기본값: QZ25)
- `--slack`: Slack으로 ZIP 파일 업로드

## 출력 파일

- 개별 펌웨어 파일: `firmware/hvac-main-stm32f103@CYBER-QZ25_{serial}_{tag}.bin`
- 압축 파일: `{model}_{start_serial}_{count}.zip`

## 문제 해결

### Slack 업로드 오류

1. **missing_scope**: 
   - 오류 메시지: `'error': 'missing_scope', 'needed': 'files:write'`
   - 해결 방법:
     1. https://api.slack.com/apps 에서 앱 선택
     2. "OAuth & Permissions" → "Scopes" → "Bot Token Scopes"
     3. `files:write` 권한 추가
     4. 페이지 상단에서 "reinstall your app" 클릭
     5. 재설치 완료 후 다시 시도

2. **invalid_auth**: SLACK_BOT_TOKEN이 올바른지 확인
3. **channel_not_found**: SLACK_CHANNEL_ID가 올바른지 확인
4. **not_in_channel**: Bot을 채널에 초대 (`/invite @bot-name`)
5. **file_too_large**: Slack 파일 크기 제한 (1GB) 확인

### 환경 변수 문제

- `.env` 파일이 프로젝트 루트에 있는지 확인
- `.env` 파일이 `.gitignore`에 포함되어 있는지 확인 (보안)

## 주의사항

- Slack Bot Token을 절대 코드에 직접 입력하지 마세요
- `.env` 파일을 Git에 커밋하지 마세요
- 대용량 파일 업로드 시 네트워크 상태 확인



            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "hvac-did-flash",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "HVAC Team <team@example.com>",
    "keywords": "STM32, firmware, programming, HVAC, DID, flash",
    "author": null,
    "author_email": "HVAC Team <team@example.com>",
    "download_url": "https://files.pythonhosted.org/packages/b2/0c/f6c380a87b5f328f220f150a571702c18e91c67ec361fbcb914b719045f7/hvac_did_flash-1.1.2.tar.gz",
    "platform": null,
    "description": "# HVAC DID Flash\r\n\r\nSTM32 \ud38c\uc6e8\uc5b4 \ud504\ub85c\uadf8\ub798\ubc0d \uc2dc\uc2a4\ud15c - HVAC \uc7a5\uce58\ub97c \uc704\ud55c DID \ud50c\ub798\uc2dc \uc9c0\uc6d0\r\n\r\n\uc790\ub3d9\ud654\ub41c STM32 \ud38c\uc6e8\uc5b4 \ud504\ub85c\uadf8\ub798\ubc0d \uc2dc\uc2a4\ud15c\uc73c\ub85c, HVAC \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0 \ud2b9\ud654\ub41c DID(Data Identifier) \ud50c\ub798\uc2dc \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.\r\n\r\n## \uc8fc\uc694 \uae30\ub2a5\r\n\r\n- **\uc790\ub3d9\ud654\ub41c STM32 \ud38c\uc6e8\uc5b4 \ud504\ub85c\uadf8\ub798\ubc0d**: ST-Link\ub97c \ud1b5\ud55c \uc644\uc804 \uc790\ub3d9\ud654\ub41c \ud504\ub85c\uadf8\ub798\ubc0d\r\n- **\uc9c0\ub2a5\ud615 \ud50c\ub798\uc2dc \uac80\uc99d**: \ud504\ub85c\uadf8\ub798\ubc0d \uc804\ud6c4 \ud50c\ub798\uc2dc \uba54\ubaa8\ub9ac \uac80\uc99d\r\n- **\uc2dc\ub9ac\uc5bc \ud1b5\uc2e0 \uac80\uc99d**: UART\ub97c \ud1b5\ud55c \ud38c\uc6e8\uc5b4 \ub3d9\uc791 \ud655\uc778\r\n- **\uc74c\uc131 \uc548\ub0b4**: \ud504\ub85c\uadf8\ub798\ubc0d \uc9c4\ud589 \uc0c1\ud669\uc744 \uc74c\uc131\uc73c\ub85c \uc548\ub0b4\r\n- **\ubc30\uce58 \ucc98\ub9ac**: \uc5ec\ub7ec \ud38c\uc6e8\uc5b4 \ud30c\uc77c\uc758 \uc77c\uad04 \ucc98\ub9ac\r\n- **\uc131\ub2a5 \ubaa8\ub2c8\ud130\ub9c1**: \uc0c1\uc138\ud55c \uc131\ub2a5 \ubd84\uc11d \ubc0f \ub9ac\ud3ec\ud305\r\n- **\uc624\ub958 \ubcf5\uad6c**: \uac15\ub825\ud55c \uc624\ub958 \ucc98\ub9ac \ubc0f \uc790\ub3d9 \uc7ac\uc2dc\ub3c4\r\n\r\n## \uc2dc\ub9ac\uc5bc \ubc88\ud638 \uad00\ub9ac\r\n\r\n- did_serial.csv \ud30c\uc77c\uc5d0 \uae30\ub85d\ub41c serial number\ub294 \"\uc774\uc804 \ucd9c\ub825\ub41c \ubc88\ud638\"\uc785\ub2c8\ub2e4.\r\n- \uc608\ub97c \ub4e4\uc5b4, csv\uc5d0 0000\uc774 \uae30\ub85d\ub418\uc5b4 \uc788\uc73c\uba74, \ub2e4\uc74c \uc218\ud589 \uc2dc 0001\uc774 \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ub418\uc5b4 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.\r\n\r\n## \uc124\uce58\r\n\r\n### PyPI\uc5d0\uc11c \uc124\uce58 (\uad8c\uc7a5)\r\n\r\n```bash\r\npip install hvac-did-flash\r\n```\r\n\r\n### \uc18c\uc2a4\uc5d0\uc11c \uc124\uce58\r\n\r\n```bash\r\ngit clone https://github.com/your-org/hvac-did-flash.git\r\ncd hvac-did-flash\r\npip install -e .\r\n```\r\n\r\n### \uac1c\ubc1c\uc790 \uc124\uce58\r\n\r\n```bash\r\ngit clone https://github.com/your-org/hvac-did-flash.git\r\ncd hvac-did-flash\r\npip install -e \".[dev]\"\r\n```\r\n\r\n### 2. Slack \uc124\uc815 (\uc120\ud0dd\uc0ac\ud56d)\r\n\r\nSlack\uc73c\ub85c \ud38c\uc6e8\uc5b4\ub97c \uc790\ub3d9 \uc5c5\ub85c\ub4dc\ud558\ub824\uba74 \ub2e4\uc74c \ub2e8\uacc4\ub97c \ub530\ub974\uc138\uc694:\r\n\r\n#### 2.1 Slack App \uc0dd\uc131\r\n\r\n1. https://api.slack.com/apps \ub85c \uc774\ub3d9\r\n2. \"Create New App\" \u2192 \"From scratch\" \ud074\ub9ad\r\n3. App \uc774\ub984 \uc785\ub825 (\uc608: \"HVAC Firmware Upload Bot\")\r\n4. \uc6cc\ud06c\uc2a4\ud398\uc774\uc2a4 \uc120\ud0dd\r\n\r\n#### 2.2 \uad8c\ud55c \uc124\uc815\r\n\r\n1. \uc88c\uce21 \uba54\ub274\uc5d0\uc11c \"OAuth & Permissions\" \ud074\ub9ad\r\n2. \"Scopes\" \uc139\uc158\uc73c\ub85c \uc2a4\ud06c\ub864\r\n3. \"Bot Token Scopes\"\uc5d0\uc11c \"Add an OAuth Scope\" \ud074\ub9ad\r\n4. \ub2e4\uc74c \uad8c\ud55c\uc744 \ucd94\uac00:\r\n   - `files:write` - \ud30c\uc77c \uc5c5\ub85c\ub4dc (\ud544\uc218)\r\n   - `chat:write` - \uba54\uc2dc\uc9c0 \uc804\uc1a1 (\uc120\ud0dd\uc0ac\ud56d)\r\n5. \uad8c\ud55c \ucd94\uac00 \ud6c4 \ud398\uc774\uc9c0 \uc0c1\ub2e8\uc758 \ub178\ub780\uc0c9 \ubc30\ub108\uc5d0\uc11c \"reinstall your app\" \ud074\ub9ad\r\n6. \uc6cc\ud06c\uc2a4\ud398\uc774\uc2a4\uc5d0 \uc7ac\uc124\uce58 \uc2b9\uc778\r\n\r\n#### 2.3 App \uc124\uce58\r\n\r\n1. \"OAuth & Permissions\" \ud398\uc774\uc9c0 \uc0c1\ub2e8\uc758 \"Install to Workspace\" \ud074\ub9ad\r\n2. \uad8c\ud55c \uc2b9\uc778\r\n3. \"Bot User OAuth Token\" \ubcf5\uc0ac (xoxb-\ub85c \uc2dc\uc791)\r\n\r\n#### 2.4 \ucc44\ub110\uc5d0 Bot \ucd94\uac00\r\n\r\n1. Slack\uc5d0\uc11c \ud30c\uc77c\uc744 \uc5c5\ub85c\ub4dc\ud560 \ucc44\ub110\ub85c \uc774\ub3d9\r\n2. \ucc44\ub110\uc5d0\uc11c `/invite @[Bot \uc774\ub984]` \uc785\ub825\r\n\r\n#### 2.5 \ud658\uacbd \ubcc0\uc218 \uc124\uc815\r\n\r\n1. `.env.example` \ud30c\uc77c\uc744 `.env`\ub85c \ubcf5\uc0ac\r\n2. \ub2e4\uc74c \uac12\uc744 \uc124\uc815:\r\n\r\n```env\r\nSLACK_BOT_TOKEN=xoxb-your-bot-token-here\r\nSLACK_CHANNEL_ID=C1234567890\r\n```\r\n\r\n**\ucc44\ub110 ID \ucc3e\ub294 \ubc29\ubc95:**\r\n- Slack \uc6f9/\ub370\uc2a4\ud06c\ud1b1\uc5d0\uc11c \ucc44\ub110 \uc6b0\ud074\ub9ad \u2192 \"View channel details\"\r\n- \ud558\ub2e8\uc758 Channel ID \ubcf5\uc0ac\r\n\r\n## \uc0ac\uc6a9\ubc95\r\n\r\n### \uba85\ub839\uc904 \uc778\ud130\ud398\uc774\uc2a4\r\n\r\n```bash\r\n# \uae30\ubcf8 \uc0ac\uc6a9\ubc95 - \ubc30\uce58 \ubaa8\ub4dc\ub85c \ubaa8\ub4e0 \ud38c\uc6e8\uc5b4 \ud30c\uc77c \ucc98\ub9ac\r\nhvac-flash --batch\r\n\r\n# \ub2e8\uc77c \ud30c\uc77c \ucc98\ub9ac\r\nhvac-flash --single-file firmware.bin\r\n\r\n# \uc124\uc815 \ud30c\uc77c \uc9c0\uc815\r\nhvac-flash --config config.ini --batch\r\n\r\n# \ub4dc\ub77c\uc774\ub7f0 \ubaa8\ub4dc (\uc2e4\uc81c \ud504\ub85c\uadf8\ub798\ubc0d \uc5c6\uc774 \ud14c\uc2a4\ud2b8)\r\nhvac-flash --dry-run\r\n\r\n# ST-Link \uc2dc\ub9ac\uc5bc \ubc88\ud638 \uc9c0\uc815\r\nhvac-flash --batch --stlink-sn 123456789\r\n```\r\n\r\n### Python API \uc0ac\uc6a9\r\n\r\n```python\r\nfrom hvac_did_flash import STM32ProgrammingSystem, Config\r\n\r\n# \uc124\uc815 \ub85c\ub4dc\r\nconfig = Config()\r\n\r\n# \ud504\ub85c\uadf8\ub798\ubc0d \uc2dc\uc2a4\ud15c \ucd08\uae30\ud654\r\nsystem = STM32ProgrammingSystem(config)\r\n\r\n# \ubc30\uce58 \ucc98\ub9ac\r\nfirmware_files = system.scan_firmware_directory()\r\nstats = system.process_batch_files(firmware_files)\r\n\r\nprint(f\"\ucc98\ub9ac \uc644\ub8cc: {stats['successful']}/{stats['total']} \uc131\uacf5\")\r\n```\r\n\r\n### \uace0\uae09 \uc0ac\uc6a9\ubc95\r\n\r\n```bash\r\n# \uac80\uc99d \ud65c\uc131\ud654\r\nhvac-flash --batch --verify\r\n\r\n# \uac80\uc99d \ube44\ud65c\uc131\ud654\r\nhvac-flash --batch --no-verify\r\n\r\n# \ud2b9\uc815 ST-Link \uc2dc\ub9ac\uc5bc \ubc88\ud638 \uc0ac\uc6a9\r\nhvac-flash --batch --stlink-sn 066DFF383638424E43172239\r\n\r\n# \uc0ac\uc6a9\uc790 \uc815\uc758 \uc124\uc815\uc73c\ub85c \uc2e4\ud589\r\nhvac-flash --config my_config.ini --batch\r\n```\r\n\r\n## \uba85\ub839\uc904 \uc778\uc218\r\n\r\n- `repeat` (\uc120\ud0dd\uc0ac\ud56d): \ube4c\ub4dc \ubc18\ubcf5 \ud69f\uc218 (\uae30\ubcf8\uac12: 1)\r\n- `start_serial` (\uc120\ud0dd\uc0ac\ud56d): \uc2dc\uc791 \uc2dc\ub9ac\uc5bc \ubc88\ud638 \ub610\ub294 \"auto\" (\uae30\ubcf8\uac12: auto)\r\n- `model` (\uc120\ud0dd\uc0ac\ud56d): \ubaa8\ub378\uba85 (\uae30\ubcf8\uac12: QZ25)\r\n- `--slack`: Slack\uc73c\ub85c ZIP \ud30c\uc77c \uc5c5\ub85c\ub4dc\r\n\r\n## \ucd9c\ub825 \ud30c\uc77c\r\n\r\n- \uac1c\ubcc4 \ud38c\uc6e8\uc5b4 \ud30c\uc77c: `firmware/hvac-main-stm32f103@CYBER-QZ25_{serial}_{tag}.bin`\r\n- \uc555\ucd95 \ud30c\uc77c: `{model}_{start_serial}_{count}.zip`\r\n\r\n## \ubb38\uc81c \ud574\uacb0\r\n\r\n### Slack \uc5c5\ub85c\ub4dc \uc624\ub958\r\n\r\n1. **missing_scope**: \r\n   - \uc624\ub958 \uba54\uc2dc\uc9c0: `'error': 'missing_scope', 'needed': 'files:write'`\r\n   - \ud574\uacb0 \ubc29\ubc95:\r\n     1. https://api.slack.com/apps \uc5d0\uc11c \uc571 \uc120\ud0dd\r\n     2. \"OAuth & Permissions\" \u2192 \"Scopes\" \u2192 \"Bot Token Scopes\"\r\n     3. `files:write` \uad8c\ud55c \ucd94\uac00\r\n     4. \ud398\uc774\uc9c0 \uc0c1\ub2e8\uc5d0\uc11c \"reinstall your app\" \ud074\ub9ad\r\n     5. \uc7ac\uc124\uce58 \uc644\ub8cc \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\r\n\r\n2. **invalid_auth**: SLACK_BOT_TOKEN\uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\r\n3. **channel_not_found**: SLACK_CHANNEL_ID\uac00 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\r\n4. **not_in_channel**: Bot\uc744 \ucc44\ub110\uc5d0 \ucd08\ub300 (`/invite @bot-name`)\r\n5. **file_too_large**: Slack \ud30c\uc77c \ud06c\uae30 \uc81c\ud55c (1GB) \ud655\uc778\r\n\r\n### \ud658\uacbd \ubcc0\uc218 \ubb38\uc81c\r\n\r\n- `.env` \ud30c\uc77c\uc774 \ud504\ub85c\uc81d\ud2b8 \ub8e8\ud2b8\uc5d0 \uc788\ub294\uc9c0 \ud655\uc778\r\n- `.env` \ud30c\uc77c\uc774 `.gitignore`\uc5d0 \ud3ec\ud568\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778 (\ubcf4\uc548)\r\n\r\n## \uc8fc\uc758\uc0ac\ud56d\r\n\r\n- Slack Bot Token\uc744 \uc808\ub300 \ucf54\ub4dc\uc5d0 \uc9c1\uc811 \uc785\ub825\ud558\uc9c0 \ub9c8\uc138\uc694\r\n- `.env` \ud30c\uc77c\uc744 Git\uc5d0 \ucee4\ubc0b\ud558\uc9c0 \ub9c8\uc138\uc694\r\n- \ub300\uc6a9\ub7c9 \ud30c\uc77c \uc5c5\ub85c\ub4dc \uc2dc \ub124\ud2b8\uc6cc\ud06c \uc0c1\ud0dc \ud655\uc778\r\n\r\n\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "STM32 Firmware Programming System for HVAC devices with DID flash support",
    "version": "1.1.2",
    "project_urls": {
        "Bug Tracker": "https://github.com/your-org/hvac-did-flash/issues",
        "Documentation": "https://github.com/your-org/hvac-did-flash/blob/main/README.md",
        "Homepage": "https://github.com/your-org/hvac-did-flash",
        "Repository": "https://github.com/your-org/hvac-did-flash.git"
    },
    "split_keywords": [
        "stm32",
        " firmware",
        " programming",
        " hvac",
        " did",
        " flash"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cb9407594657024628028664b9a4f096b5821ab6dea0cdd33e0b58a65b07b758",
                "md5": "8e32e5103f7b22a408ba22ee1e50abda",
                "sha256": "2469b92091e8e0213f5d535c125a0e3fefd1af441aaca2af719017688741bd4d"
            },
            "downloads": -1,
            "filename": "hvac_did_flash-1.1.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8e32e5103f7b22a408ba22ee1e50abda",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 63221,
            "upload_time": "2025-09-05T07:23:08",
            "upload_time_iso_8601": "2025-09-05T07:23:08.249699Z",
            "url": "https://files.pythonhosted.org/packages/cb/94/07594657024628028664b9a4f096b5821ab6dea0cdd33e0b58a65b07b758/hvac_did_flash-1.1.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b20cf6c380a87b5f328f220f150a571702c18e91c67ec361fbcb914b719045f7",
                "md5": "40343d3b49e7e5c1885f7e1efd8feadc",
                "sha256": "94d4300e7cfc9b7094f09f9042a14591495dd326b3d5e34877ffb12047f7fa95"
            },
            "downloads": -1,
            "filename": "hvac_did_flash-1.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "40343d3b49e7e5c1885f7e1efd8feadc",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 565438,
            "upload_time": "2025-09-05T07:23:09",
            "upload_time_iso_8601": "2025-09-05T07:23:09.830438Z",
            "url": "https://files.pythonhosted.org/packages/b2/0c/f6c380a87b5f328f220f150a571702c18e91c67ec361fbcb914b719045f7/hvac_did_flash-1.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-05 07:23:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "your-org",
    "github_project": "hvac-did-flash",
    "github_not_found": true,
    "lcname": "hvac-did-flash"
}
        
Elapsed time: 0.96114s