Iconos para dispositivos HC3
Responde en el idioma del usuario. Genera iconos con scripts/icon_kit.py (Python, pip install cairosvg pillow):
contiene los ayudantes de estilo (degradados, sombra suave, insignia, ~35 glifos de insignia), un ejemplo de dibujo de dispositivo (ventana de tejado con persiana enrollable, 11 posiciones) y el generador de vista previa.
Estilo (qué hace que estos iconos encajen en la interfaz de usuario del HC3)
- Dibujo realista del dispositivo real (forma, colores, materiales, ángulo de visión). Pide al usuario una foto del modelo exacto y reprodúcela; nunca traces una foto ni copies un logotipo/marca registrada del fabricante (también mantiene los iconos compartibles). Si el usuario quiere explícitamente un logotipo de marca para uso privado, mantén ese icono fuera de cualquier publicación.
- Fondo transparente, un archivo por estado — sin variantes claro/oscuro. Para que sea legible en ambos temas, proporciona a los dispositivos oscuros un borde claro (
stroke="#FFFFFF"de 1–2 px o un bisel más claro) y nunca pintes una placa de fondo. - Pequeña insignia redonda, abajo a la derecha (centro 100,100, radio ~22, anillo blanco): el estado (verde encendido, gris inactivo/apagado, rojo alarma, naranja advertencia, azul abierto/nivel, púrpura automático…) o la cantidad medida (termómetro, gota, CO₂, viento…). El dibujo del dispositivo mantiene esa esquina libre.
- 128 × 128 viewBox, dibujo dentro de ~10–118 px, sombra elíptica suave debajo de dispositivos de suelo.
- Revisa la vista previa (
preview.png: cada icono una vez sobre un fondo diagonal claro/oscuro) antes de entregar.
Cuántas imágenes por dispositivo (reglas del HC3)
| Tipo de dispositivo | Imágenes en un conjunto de iconos | Campos de subida |
|---|---|---|
| Binario (interruptor, binarySensor, puerta/ventana, movimiento, humo…) | 2: inactivo / activo | icon0, icon100 |
| Multinivel (dimmer, persiana enrollable, válvula de nivel) | 11: 0, 10 … 100 | icon0 … icon100 |
| deviceController, la mayoría de padres de QuickApp, multilevelSensor / temperatura… | 1 | icon0 |
Un tipo de una sola imagen no puede cambiar su imagen por sí mismo. Para un icono de QA dependiente del estado (OK / advertencia / alarma, o un modo), sube un conjunto por estado y cambia desde Lua: self:updateProperty("deviceIcon", tonumber(self:optionalVariable("iconAlarm"))) | ||
(los ids se pegan en variables; patrón en la habilidad hc3-quickapp, references/patterns.md §5). | ||
| Crea un icono por estado útil e iconos para cada dispositivo que cree un QuickApp (padre e hijos). |
Flujo de trabajo
- Enumera los dispositivos (padre, cada hijo, cada subdispositivo Z-Wave) y su
typeexacto (api.get("/devices/<id>"), p.ej.com.fibaro.FGR224para un módulo de persiana Fibaro,com.fibaro.rollerShutterpara un hijo de QA). - Pide fotos de los modelos reales; acuerda los estados y significados de las insignias.
- Copia
scripts/icon_kit.py, escribe una función de dibujo por dispositivo (fragmento SVG en el cuadro de 128, consultaroof_window(pct)), añade filas(name, title, body)aICONS— una por estado — y ejecutapython3 icon_kit.py --out icons/. Nombrado:<device>-<state>(shutter-000…shutter-100,boiler-on,boiler-off), para que una tabla README pueda indicar qué icono va dónde. - Muestra
preview.png; itera sobre los comentarios del usuario (forma, color, claridad de la insignia tipo emoji). - Subida: enumera los conjuntos en la sección
iconsdelqa.jsondel QA y deja quebuild_fqa.py(habilidadhc3-packaging) genere<qa>-icons.sh, o sube manualmente: Ajustes → Dispositivos → dispositivo → icono → Añadir.
API de subida (observado en 5.xx)
POST /api/icons, multipart/form-data: type=device, deviceTemplate=<tipo de dispositivo exacto>, un archivo por estado
(icon0, icon100 o icon0…icon100), fileExtension=png (svg aceptado). Respuesta 201
{"id": 1055, "iconSetName": "User1055", "fileExtension": "png"}. Aplicar: PUT /api/devices/<id>
{"properties": {"deviceIcon": 1055}} (desde fuera — nunca en el propio id de un QA desde dentro del QA, ya que reinicia; usa
self:updateProperty). Eliminar: DELETE /api/icons?id=&type=device&name=&fileExtension=png. Los ids de iconos de usuario
comienzan alrededor de 1000. GET /api/icons los lista (existen dos formas de respuesta entre firmwares: acepta ambas).
También existen iconos de sala y escena (type=room / type=scene probable [V]).
references/badges.md lista los colores de insignia y glifos disponibles en el kit.