[{"data":1,"prerenderedAt":227},["ShallowReactive",2],{"project-/projects/lumo":3},{"id":4,"title":5,"body":6,"date":205,"description":206,"extension":207,"image":208,"link":209,"meta":210,"navigation":216,"path":217,"seo":218,"stack":219,"stem":225,"__hash__":226},"projects/projects/lumo.md","Lumo",{"type":7,"value":8,"toc":197},"minimark",[9,22,29,34,104,108,179,183,190,194],[10,11,12,13,17,18,21],"p",{},"Lumo remplace l'interface web d'",[14,15,16],"strong",{},"AWTRIX",", le firmware communautaire des afficheurs LED type ",[14,19,20],{},"Ulanzi TC001",", par une app native pour Mac, iPhone et iPad. Elle parle directement à l'afficheur en HTTP sur le réseau local, et rend simple ce qui demandait jusque-là des requêtes à la main : choisir ce qui s'affiche, dans quel ordre, brancher des sources de données, et faire réagir l'afficheur à des événements.",[10,23,24],{},[25,26],"img",{"alt":27,"src":28},"Lumo sur Mac","/images/Lumo/mac.webp",[30,31,33],"h2",{"id":32},"ce-que-lumo-propose","Ce que Lumo propose",[35,36,37,44,50,56,62,68,79,85,95,101],"ul",{},[38,39,40,43],"li",{},[14,41,42],{},"Découverte automatique"," des afficheurs sur le réseau (sans mDNS, par sondage du sous-réseau), ajout manuel par IP, multi-afficheurs.",[38,45,46,49],{},[14,47,48],{},"Écran"," : la rotation éditée comme une playlist, avec des vignettes au rendu réel 32×8, du glisser-déposer et un aperçu live.",[38,51,52,55],{},[14,53,54],{},"Sources prêtes à l'emploi"," : météo (Open-Meteo, sans clé), calendrier, CPU et RAM du Mac, cours crypto, apps natives du firmware.",[38,57,58,61],{},[14,59,60],{},"Connecteurs"," : n'importe quelle API REST devient une source. URL, authentification (clé API, Bearer, OAuth 2.0 + PKCE avec rafraîchissement automatique), explorateur de réponse JSON, gabarit d'affichage, aperçu live. Une trentaine de modèles fournis (GitHub, npm, Spotify, YouTube, Stripe, Plausible, Home Assistant, Tempo EDF, ISS…).",[38,63,64,67],{},[14,65,66],{},"Studio"," : compositions texte avec icône et couleur, éditeur de pixel art 32×8, galerie d'icônes LaMetric avec import et conversion automatiques.",[38,69,70,73,74,78],{},[14,71,72],{},"Moments"," : notifications, règles d'alerte par seuil ou à heure fixe, minuteur et Pomodoro, LED témoins, passerelle de notifications locale (HTTP et schéma ",[75,76,77],"code",{},"lumo://notify",").",[38,80,81,84],{},[14,82,83],{},"Appareil"," : luminosité manuelle ou automatique, mode nuit programmé, lampe d'ambiance, capteurs.",[38,86,87,90,91,94],{},[14,88,89],{},"Menu-bar macOS",", ",[14,92,93],{},"Raccourcis"," (App Intents) et, sur iPhone, Santé, batterie, rappels, anniversaires, mode de concentration et HomeKit.",[38,96,97,100],{},[14,98,99],{},"Afficheur de démonstration"," intégré pour découvrir l'app sans matériel.",[38,102,103],{},"Interface française et anglaise.",[30,105,107],{"id":106},"aspects-techniques","Aspects techniques",[35,109,110,120,139,145,163,169],{},[38,111,112,115,116,119],{},[14,113,114],{},"SwiftUI, Swift 6"," (concurrence stricte), ",[75,117,118],{},"@Observable",", Swift Testing. Un seul bundle et une seule base de code pour macOS 15+ et iOS 18+, les parties spécifiques à chaque plateforme étant écartées à la compilation.",[38,121,122,125,126,90,129,90,132,90,135,138],{},[14,123,124],{},"Protocole"," : API REST d'AWTRIX 3 uniquement (",[75,127,128],{},"/api/stats",[75,130,131],{},"/api/custom",[75,133,134],{},"/api/notify",[75,136,137],{},"/api/settings","…), en HTTP local.",[38,140,141,144],{},[14,142,143],{},"Sécurité"," : jetons OAuth et clés d'API stockés dans le Trousseau, passerelle de notifications en loopback uniquement, aucune collecte de données.",[38,146,147,150,151,154,155,158,159,162],{},[14,148,149],{},"Outillage"," : projet généré par ",[14,152,153],{},"XcodeGen",", CI ",[14,156,157],{},"GitHub Actions"," (tests, .dmg signé et notarisé) et ",[14,160,161],{},"Xcode Cloud"," (archives et TestFlight), captures d'écran générées automatiquement par des tests UI sur l'afficheur de démonstration.",[38,164,165,168],{},[14,166,167],{},"Volume"," : environ 15 000 lignes de Swift et 200 tests.",[38,170,171,174,175,178],{},[14,172,173],{},"Landing"," : ",[14,176,177],{},"Nuxt 4"," en génération statique, Tailwind 4, bilingue, avec des composants LED maison. Hébergée sur un VPS via Docker et Nginx.",[30,180,182],{"id":181},"le-modèle","Le modèle",[10,184,185,186,189],{},"Lumo est ",[14,187,188],{},"gratuit",", sans achat intégré, sans publicité, sans analytique. C'est un projet communautaire, non affilié à AWTRIX ni à Ulanzi.",[30,191,193],{"id":192},"et-la-suite","Et la suite ?",[10,195,196],{},"La version 1.0 est prête et la publication sur l'App Store est en cours sous le nom « Lumo for AWTRIX ». Ensuite : les retours des premiers utilisateurs, et peut-être le support MQTT pour ceux qui ont déjà un broker chez eux.",{"title":198,"searchDepth":199,"depth":199,"links":200},"",2,[201,202,203,204],{"id":32,"depth":199,"text":33},{"id":106,"depth":199,"text":107},{"id":181,"depth":199,"text":182},{"id":192,"depth":199,"text":193},"2026-08-20T00:00:00.000Z","Lumo est une app native macOS et iOS pour piloter les afficheurs LED sous firmware AWTRIX (Ulanzi TC001) : rotation, connecteurs d'API, pixel art, notifications et alertes, sans passer par l'interface web.","md","/images/Lumo/cover.webp","https://lumo.playfan.fr",{"readingTime":211},{"text":212,"minutes":213,"time":214,"words":215},"3 min read",2.235,134100,447,true,"/projects/lumo",{"title":5,"description":206},[220,221,16,222,223,153,224],"Swift","SwiftUI","HealthKit","App Intents","Nuxt.js","projects/lumo","i0nqOSc31YdY5ateaoZvH6KDl9NzS5gLhT-ZI-0xn1M",1787859225349]