Releases: zEhmsy/lightflow
LightFlow V2.5
v2.5.0 — Scoperta affidabile via mDNS + fallback
Questa release introduce una scansione dispositivi molto più robusta: prima tenta mDNS/Bonjour, poi cade su UDP JSON e infine su uno sweep HTTP /24 leggero e parallelo. Niente più dead-end su iOS con “no route to host”.
✨ Novità
-
Supporto mDNS/Bonjour (_ledctrl.tcp)
- Rilevamento istanze tipo
led-XXXXXX.localcon risoluzione SRV + A. - Richiede le chiavi iOS in Info.plist (vedi sotto).
- Rilevamento istanze tipo
-
Discovery “a strati” (triangolazione)
- mDNS/Bonjour
- UDP JSON su
49999(broadcast/multicast) - Sweep HTTP
/statesull’intera /24 con limite di concorrenza
-
Conferma reachability: ogni device trovato viene verificato con
GET /statee ordinato con i raggiungibili in alto.
🔧 Modifiche tecniche
-
Nuovo
DiscoveryService.discover({int listenMs = 900})_discoverMdnsBonjour(timeout: 2500ms)_discoverUdpJson(timeout: listenMs)_discoverHttpSweep(timeoutPerHostMs: 350, concurrency: 16 su iOS / 32 altrove)
-
Fix mDNS: rimosso l’
awaitdaMDnsClient.stop()(alcune versioni restituisconovoid) e cancellate le subscription prima di chiudere il client. -
Cleanup socket UDP: cancellazione
StreamSubscriptionprima diclose()per evitare warning/leak. -
Nuova dipendenza:
multicast_dns.
🧱 Firmware Arduino (compagno)
-
Aggiunto mDNS con istanza
led-XXXXXXe servizi:_ledctrl._tcp(porta 80)_http._tcp(porta 80)
-
Discovery UDP invariato su 49999 con risposta JSON compatibile (
t/id/name/ip/port/api/apiv/strips).
📱 Setup piattaforme
iOS (obbligatorio per mDNS)
Aggiungere a Info.plist:
<key>NSLocalNetworkUsageDescription</key>
<string>La rete locale è necessaria per cercare e controllare i dispositivi LED.</string>
<key>NSBonjourServices</key>
<array>
<string>_ledctrl._tcp</string>
<string>_http._tcp</string>
</array>Nota: non servono entitlement speciali se si resta su Bonjour (224.0.0.251:5353). Il multicast “generico” può essere filtrato da iOS.
Android (consigliato)
Su alcune ROM vecchie aiuta:
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />🧩 Migrazione
-
DiscoveryPage può continuare a chiamare:
final devices = await DiscoveryService().discover(listenMs: 900);
-
Nessuna breaking change su
LedApioDeviceInfo.
🐛 Bugfix
- Risolto errore di compilazione: “This expression has type 'void' and can't be used” causato da
await client.stop()(mDNS). - Ridotte eccezioni su iOS tipo SocketException errno=65 grazie al percorso mDNS “nativo” e allo sweep HTTP come fallback finale.
📦 Dipendenze
Aggiungi a pubspec.yaml:
dependencies:
multicast_dns: ^0.3.0✅ Checklist upgrade
- Aggiorna firmware Arduino con mDNS attivo (
_ledctrl._tcp,_http._tcp) -
flutter pub add multicast_dns - iOS: aggiungi
NSLocalNetworkUsageDescriptioneNSBonjourServices - (Opzionale) Android:
CHANGE_WIFI_MULTICAST_STATE - Ricompila ed esegui la nuova Scansione dispositivi
Grazie a questa release la scoperta su iOS diventa affidabile e veloce, con fallback automatici in caso di reti “difficili”.
LightFlow V2
LightFlow v2.0.0 — Auto-discovery & Live Apply
Release che introduce rilevamento automatico dei controller in LAN e salvataggio in tempo reale delle modifiche (con debounce), più vari affinamenti dell’interfaccia.
✨ Novità
-
Auto-discovery LAN (UDP)
- Broadcast
LEDCTRL_DISCOVER_V1su255.255.255.255:49999(+ tentativo multicast). - Raccolta risposte JSON, verifica via
GET /state, elenco dispositivi trovati. - Cache
id → ipper riconnessioni rapide.
- Broadcast
-
Live Apply (auto-salvataggio)
- Ogni cambio (LED, Bright, Velocità, Colore, Modalità) invia
/setautomaticamente con debounce (~350 ms). - Niente spam: gli input rapidi sono coalesciti in una singola chiamata.
- Ogni cambio (LED, Bright, Velocità, Colore, Modalità) invia
-
Toggle Animazione/Statica
- Nuovo interruttore per striscia: invia
mode=anim|solid. - Velocità allineata al firmware: 1..50 ms (1 = più veloce).
- Nuovo interruttore per striscia: invia
-
UI
- Carosello colori più grande e leggibile.
- Card comprimibili, rename persistente, griglia “masonry” a altezza variabile.
🧩 Compatibilità API
GET /setora usamode=anim|solid.sclampato1..50.- Lettura
m[]da/stateper riflettere la modalità corrente.
🐛 Fix
- Crash iOS dovuto a pacchetto non device (
Runner.debug.dylib) → packaging “pulito” per AltStore. - Overflow layout nelle card su schermi piccoli.
- Duplicato
apply()nella VM. - Icone + splash personalizzate, Info.plist ATS in debug.
📦 Asset
- LightFlow.ipa (non firmato, per AltStore)
- (Facoltativo)
mock_server.zip(Flask)
🚀 Come installare (AltStore)
- Elimina eventuale versione precedente sul telefono.
- Copia
LightFlow.ipasu iPhone → AltStore → My Apps → + → seleziona IPA → Apple ID. - Per reti diverse: aggiorna IP nella pagina “Connetti” o usa Scansione automatica (LAN).
✅ Verifica rapida
- Scansione trova i device e
GET /staterisponde. - Slider Velocità mostra 1..50 ms e si applica subito.
- Toggle Animazione/Statica cambia la modalità (controlla
/state.m[]). - Il carosello colori è più grande e reattivo.
🔎 Problemi noti
- Reti che bloccano broadcast/multicast: usare IP manuale.
- AltStore con Apple ID free richiede Refresh ogni 7 giorni.
V 1.0.0
Ecco un testo pronto (Markdown) per la release v1.0.0 – LightFlow da incollare su GitHub.
LightFlow v1.0.0
Controller mobile per 8 strisce LED compatibile con firmware tipo FastLED.
Inserisci l’IP del microcontrollore e controlla LED, luminosità, velocità e colore per ogni striscia. UI moderna, card comprimibili ed espandibili, carosello colori compatto, salvataggio nomi strisce.
✨ Novità principali
-
UI modulare con card per striscia:
- vista compatta (nome + dot colore + preview luminosa),
- vista espansa con stepper LED, slider Bright/Velocità, HEX e color picker.
-
Carosello colori con elemento centrale enfatizzato.
-
Rinomina striscia con persistenza (SharedPreferences).
-
Griglia “masonry” a altezza variabile (no più overflow).
-
Icone app (Android/iOS) e splash screen personalizzati.
-
Mock server Flask per test locale (
/state,/set,/sync).
🚦 Requisiti
- Flutter 3.x
- Android: SDK 21+ (Android 5.0+), NDK 27.0.12077973 (per plugin
shared_preferences_android) - iOS: iOS 12.0+
- Rete: HTTP in chiaro abilitato in debug (Android
usesCleartextTraffic=true, iOS ATS aperto)
🔌 Endpoints attesi (firmware)
GET /state→{ used:[...], b:[...], s:[...], c:["RRGGBB", ...] }GET /set?which=&n=&b=&s=&c=GET /sync
🧪 Test rapido (Mock server)
-
cd mock_server && python3 -m venv .venv && source .venv/bin/activate -
pip install flask && python server.py -
In app:
- Android Emulator →
http://10.0.2.2:5000 - iOS Simulator →
http://127.0.0.1:5000
- Android Emulator →
📲 Installazione su dispositivi
Android (debug):
flutter run -d <android_device>iOS (AltStore, senza account dev a pagamento):
-
flutter build ios --release -
Crea IPA non firmato:
cd build/ios/iphoneos mkdir -p Payload && cp -R Runner.app Payload/ ditto -ck --sequesterRsrc --keepParent Payload LightFlow.ipa
-
Invia
LightFlow.ipaa iPhone → AltStore → My Apps →+→ seleziona IPA.
Per iOS Simulator:
flutter run -d iOS.
🧱 Asset della release (allega qui su GitHub)
LightFlow.ipa(non firmato, per AltStore)mock_server.zip(opzionale: cartellamock_servercompressa)- Facoltativi: screenshot, icone (
assets/icon/*.png)
✅ Verifica
- L’app si avvia con splash LightFlow.
- La pagina Connetti accetta IP/porta e salva l’ultimo indirizzo.
- Le card si espandono/collassano e non “sbordano”.
- Rename strisce persistente dopo ✔︎ o chiusura tastiera.
/setapplica la modifica alla striscia corrente;/syncinvia sync globale.
🧭 Config di build (promemoria)
-
Android:
android/app/build.gradle.ktsandroid { ndkVersion = "27.0.12077973" } -
iOS:
Info.plistcon ATS aperto in debug:<key>NSAppTransportSecurity</key> <dict><key>NSAllowsArbitraryLoads</key><true/></dict>
🐞 Problemi noti
- AltStore (account free): durata firma 7 giorni (usare Refresh).
- mDNS (
esp32.local) può non risolversi in emulatore: usare IP LAN.
🔄 Changelog
- feat: UI card minimal + espansione, carosello colori
- feat: rename con persistenza
- feat: icone app + splash personalizzati
- feat: mock server Flask
- fix: overflow griglia con masonry
- chore: NDK 27, ATS/cleartext per debug
Grazie per provare LightFlow!
Segnalazioni e idee → apri una Issue o una Discussion.