HC3 기기 아이콘
사용자의 언어로 답변하세요. scripts/icon_kit.py(Python, pip install cairosvg pillow)를 사용하여 아이콘을 생성합니다:
이 스크립트에는 스타일 도우미(그라데이션, 부드러운 그림자, 배지, ~35개의 배지 글리프), 예제 장치 드로잉(천창 + 롤러 셔터, 11단계) 및 미리보기 생성기가 포함되어 있습니다.
스타일 (이 아이콘들이 HC3 UI에 적합한 이유)
- 실제 장치의 사실적인 드로잉(모양, 색상, 재질, 시야각). 사용자에게 정확한 모델의 사진을 요청하고 재현하세요. 사진을 트레이싱하거나 제조사 로고/상표를 복사하지 마세요(아이콘을 공유 가능하게 유지합니다). 사용자가 개인 용도로 브랜드 로고를 명시적으로 원하는 경우, 해당 아이콘을 공개된 곳에 게시하지 마세요.
- 투명 배경, 상태당 하나의 파일 — 라이트/다크 변형 없음. 두 테마에서 모두 읽기 쉽도록 어두운 장치에는 밝은 테두리(
stroke="#FFFFFF"1–2px 또는 밝은 베벨)을 주고 배경판을 절대 칠하지 마세요. - 오른쪽 하단의 작은 원형 배지(중심 100,100, 반경 ~22, 흰색 링): 상태(녹색 켜짐/회색 대기 또는 꺼짐/빨간색 경보/주황색 경고/파란색 열림 또는 레벨/보라색 자동…) 또는 측정된 값(온도계, 물방울, CO₂, 바람…). 장치 드로잉은 이 모서리를 비워둡니다.
- 128 × 128 viewBox, 드로잉은 ~10–118px 범위 내, 바닥 설치 장치 아래에는 부드러운 타원형 그림자.
- 미리보기(
preview.png: 각 아이콘이 라이트/다크 대각선 배경에 한 번씩 표시됨)를 확인한 후 전달하세요.
장치당 이미지 개수 (HC3 규칙)
| 장치 유형 | 하나의 아이콘 세트 내 이미지 수 | 업로드 필드 |
|---|---|---|
| 이진 (스위치, binarySensor, 문/창문, 모션, 연기…) | 2: 대기 / 활성 | icon0, icon100 |
| 멀티레벨 (디머, 롤러 셔터, 밸브 레벨) | 11: 0, 10 … 100 | icon0 … icon100 |
| deviceController, 대부분의 QuickApp 부모, multilevelSensor / 온도… | 1 | icon0 |
하나의 이미지 유형은 자체적으로 그림을 변경할 수 없습니다. 상태별 QA 아이콘(OK/경고/경보 또는 모드)의 경우 상태당 하나의 세트를 업로드하고 Lua에서 전환합니다: self:updateProperty("deviceIcon", tonumber(self:optionalVariable("iconAlarm"))) | ||
(id는 변수에 붙여넣음, 패턴은 hc3-quickapp 스킬의 references/patterns.md §5 참조). | ||
| 유용한 상태별 아이콘 하나와 QuickApp이 생성하는 모든 장치(부모 및 자식)에 대한 아이콘을 만드세요. |
워크플로우
- 장치 목록(부모, 각 자식, 각 Z-Wave 하위 장치)과 정확한
type을 확인합니다(api.get("/devices/<id>"), 예:com.fibaro.FGR224는 Fibaro 롤러 셔터 모듈,com.fibaro.rollerShutter는 QA 자식 장치). - 실제 모델의 사진을 요청하고, 상태 및 배지 의미에 대해 합의합니다.
scripts/icon_kit.py를 복사하고, 장치당 하나의 드로잉 함수(SVG 조각, 128 박스 내,roof_window(pct)참조)를 작성하고,ICONS에(name, title, body)행을 추가합니다(상태당 하나씩). 그런 다음python3 icon_kit.py --out icons/를 실행합니다. 명명 규칙:<device>-<state>(shutter-000…shutter-100,boiler-on,boiler-off). README 테이블에서 어떤 아이콘이 어디에 쓰이는지 알 수 있습니다.preview.png를 보여주고, 사용자의 의견(모양, 색상, 이모지 같은 배지 선명도)에 따라 반복 수정합니다.- 업로드: QA의
qa.jsonicons섹션에 세트를 나열하고build_fqa.py(스킬hc3-packaging)가<qa>-icons.sh를 생성하도록 하거나, 수동으로 업로드: 설정 → 장치 → 장치 → 아이콘 → 추가.
업로드 API (5.2xx에서 확인됨)
POST /api/icons, multipart/form-data: type=device, deviceTemplate=<정확한 장치 유형>, 상태당 하나의 파일(icon0, icon100 또는 icon0…icon100), fileExtension=png (svg 허용됨). 응답 201
{"id": 1055, "iconSetName": "User1055", "fileExtension": "png"}. 적용: PUT /api/devices/<id>
{"properties": {"deviceIcon": 1055}} (외부에서 — QA 내부에서 QA 자체 id에 적용하지 마세요, 재시작됨. self:updateProperty를 사용하세요). 삭제: DELETE /api/icons?id=&type=device&name=&fileExtension=png. 사용자 아이콘 id는 1000부터 시작합니다. GET /api/icons는 목록을 반환합니다(펌웨어에 따라 두 가지 응답 형태가 있습니다. 둘 다 처리하세요).
방 및 장면 아이콘도 존재합니다(type=room / type=scene 가능 [V]).
references/badges.md에는 키트에서 사용 가능한 배지 색상과 글리프가 나열되어 있습니다.