enne2 a3b6bc66c9 Ambilight per Plasma 6: demone Adalight + plasmoide con slider
- backend/ambicapture.py: cattura Wayland via ScreenCast portal + PipeWire
- backend/ambilightd.py: demone, 47 zone sul bordo superiore, luminosita/contrasto/
  saturazione/banda, invio Adalight su seriale, servizio D-Bus org.enne2.Ambilight
- backend/ambilight-ctl: CLI JSON per il plasmoide
- backend/ambilight.service: avvio automatico (systemd --user)
- package/org.enne2.ambilight: applet vassoio con popup e slider
- install.sh / uninstall.sh senza root
2026-11-01 13:11:02 +01:00

ambilight-plasmoid

Ambilight per KDE Plasma 6: cattura il bordo superiore dello schermo su Wayland (portal ScreenCast + PipeWire), calcola il colore medio di 47 zone e pilota una striscia WS2812B collegata a un ESP8266 (Wemos D1 mini) con firmware Adalight via seriale. Il controllo sta in un plasmoide nel vassoio di sistema, con popup per luminosità, contrasto, saturazione e banda campionata.

schermo ──portal──▶ ambilightd ──Adalight/seriale──▶ ESP8266 ──▶ striscia
                        ▲
                        │ D-Bus org.enne2.Ambilight
                        │
                ambilight-ctl  ◀── plasmoide (Plasma 6, QML)

Componenti

File Ruolo
backend/ambicapture.py negoziazione ScreenCast portal + pipeline GStreamer (pipewiresrc)
backend/ambilightd.py demone: cattura, calcolo zone, luminosità/contrasto/saturazione, invio Adalight, servizio D-Bus
backend/ambilight-ctl CLI che parla col demone e stampa JSON (usata dal plasmoide)
backend/ambilight.service unit systemd --user (avvio automatico al login)
package/org.enne2.ambilight/ plasmoide Plasma 6 (icona nel vassoio + popup con slider)
install.sh / uninstall.sh installazione e rimozione, senza root

Hardware

  • ESP8266 Wemos D1 mini (clone), firmware Adalight-FastLED con PIN_DATA 5 (= D1/GPIO5), Num_Leds = dimensione buffer (256): il numero reale di LED lo decide il software che invia i frame.
  • Striscia WS2812B 47 LED sul solo bordo superiore.
  • Cablaggio: D1 → 470 Ω → DIN, alimentatore 5 V separato (~60 mA/LED), massa comune, 1000 µF sull'alimentazione; level shifter 74AHCT125 se il filo dati è lungo.

Installazione

./install.sh          # backend + servizio utente + plasmoide

Al primo avvio il desktop chiede il permesso di condividere lo schermo: va concesso una volta (viene memorizzato in ~/.cache/ambilight/restore_token).

Il plasmoide appare nel vassoio come Ambilight (icona TV); clic per il popup.

Uso da terminale

ambilight-ctl state                     # JSON con tutto lo stato
ambilight-ctl start | stop | toggle
ambilight-ctl set brightness 0.8         # brightness|contrast|saturation|band|reverse|leds
ambilight-ctl get fps
systemctl --user status ambilight.service

Configurazione

~/.config/ambilight/config.json (scritto dal demone a ogni modifica):

chiave range default note
brightness 0.05 – 2.0 1.0 moltiplicatore
contrast 0.5 – 2.0 1.0 pivot sul grigio 128
saturation 0.0 – 2.0 1.0 0 = bianco e nero
band 0.02 – 0.5 0.12 frazione di altezza campionata
reverse bool true LED 0 sul lato destro (verificato a schermo)
leds 1 – 256 47 LED della striscia
port, baud – /dev/ttyUSB0, 115200 seriale
side top/bottom top bordo campionato
auto_start bool true streaming attivo all'avvio del demone

Prestazioni misurate

  • 47 LED, Adalight a 115200: ~78 fps (limite teorico della seriale per 147 byte/frame).
  • Cattura: portal + PipeWire, pipeline ridotta a 47×4 × 72 px RGB → costo CPU trascurabile.

Note

  • Il firmware Adalight manda Ada\n una volta al secondo quando non riceve frame: è l'heartbeat del protocollo, non un errore.
  • Il demone tiene la seriale in esclusiva: Prismatik (o altri programmi Adalight) vanno chiusi.
  • ModemManager su Fedora può contendere /dev/ttyUSB0: se la porta risulta occupata serve una regola udev con ID_MM_DEVICE_IGNORE.

Licenza

GPL-3.0-or-later (come i componenti KDE con cui interagisce).

S
Description
Ambilight per KDE Plasma 6: demone Adalight (ESP8266/WS2812B) + applet nel vassoio con slider luminosita, contrasto, saturazione
Readme
113 KiB
Languages
Python 62.7%
QML 22.1%
Shell 15.2%