3 Punkte von GN⁺ 2024-01-04 | 1 Kommentare | Auf WhatsApp teilen
  • Bündelt Rendering, Deployment und Display-Steuerung, die man beim direkten Bau eines Smart Frames benötigt, mit Fokus auf Ausführung auf dem Gerät selbst, sodass sich Raspberry-Pi- oder ESP32-basierte Frames eigenständig betreiben lassen
  • Das Backend wird lokal per Docker oder als Home-Assistant-Addon installiert, per SSH oder geflashter SD-Karte bereitgestellt, und der Frame läuft danach auch ohne Backend weiter
  • Szenen werden als Node-Graph erstellt, der Events, Daten-Apps, Render-Apps und Zustand verbindet; das Ergebnis wird zu einer einzelnen Binärdatei kompiliert und auf dem Frame ausgeführt
  • Raspberry Pi unterstützt ab dem Pi Zero 2 W WiFi-Deployment, TrueType-Schriften, SVG, 6-Farben-E-Ink-Dithering, TLS, iCal-Parsing, Headless-Chromium-Screenshots und einen eigenen Webserver
  • ESP32-S3 unterstützt für Waveshare-SPI-E-Paper-Panels Browser-Flashen, Rendering auf dem Gerät, OTA-Updates und Deep Sleep zwischen Aktualisierungen, allerdings enthält jedes Firmware-Image nur einen ausgewählten Panel-Treiber

Was FrameOS übernimmt

  • FrameOS ist ein Betriebssystem, das Raspberry Pi oder ESP32 mit einem Display kombiniert, um Smart Frames zu bauen, die selbstständig laufen, etwa als Kalender, Dashboard oder Art Frame
  • Es richtet sich an E-Ink-, HDMI- und LCD-Displays, wobei das Rendering auf dem Gerät selbst erfolgt
  • Es funktioniert ohne Cloud und Abonnement und wird seit 2023 als kostenloses Open-Source-Projekt unter der Lizenz AGPL-3.0 angeboten
  • Das Backend kann per Docker installiert werden, und das Projekt-Repository befindet sich auf GitHub

Installations- und Deployment-Ablauf

  • FrameOS richtet einen Frame über den Ablauf Backend-Installation, Hardware-Anschluss und Szenen-Deployment ein
    • Das Backend wird mit einem einzigen Befehl auf Laptop, Server oder NAS gestartet oder als Home-Assistant-Addon installiert
    • Raspberry Pi oder ESP32 werden mit dem Display verbunden
    • Eine vorgefertigte Szene wird ausgewählt oder selbst entworfen und dann bereitgestellt
  • Das Backend ist kein Abo-Dienst, sondern läuft als lokale Web-App
  • Das Deployment erfolgt per SSH oder geflashter SD-Karte; danach kann der Frame ohne Backend eigenständig weiterlaufen
  • Es lassen sich mehr als 120 unterstützte Panels anschließen, und bei Raspberry Pi kann auch ein HDMI-Kabel verwendet werden
  • Der Frame wird über einen eigenen QR-Code und eine HTTP-API gesteuert; die HTTP-API für ESP32 ist noch experimentell

Szenenbearbeitung und Ausführung

  • Szenen werden in einem visuellen Editor aufgebaut, der durch echten Code gestützt wird
  • Die Szenenkonfiguration ist in Form eines Node-Graphen aufgeteilt
    • Rot: Events
    • Grün: Daten-Apps
    • Blau: Render-Apps
    • Gelb: Zustand
  • Die konfigurierte Szene wird zu einer einzelnen Binärdatei kompiliert und auf dem Frame ausgeführt
  • Eine kuratierte Galerie sowie Szenen für Kalender, Termine, Message Board, Wetter, Webcam und AI-Art lassen sich mit einem Klick installieren und bis auf Quellcodeebene bearbeiten

Optionen mit Raspberry Pi und ESP32

  • FrameOS funktioniert am besten in einer echten Linux-Umgebung und zielt auf Raspberry Pi ab $15 Pi Zero 2 W oder höher
  • In der Raspberry-Pi-Umgebung kann per WiFi bereitgestellt werden, ohne die Firmware erneut zu flashen
  • Auf Linux-basierten Frames stehen folgende Funktionen zur Verfügung
    • TrueType-Schriften und SVG in allen Auflösungen
    • Dithering für 6-Farben-E-Ink
    • TLS
    • iCal-Parsing
    • Headless-Chromium-Screenshots
    • Eigener Webserver des Frames
  • Wer einen kabellosen Frame möchte, kann ihn auf dem ESP32-S3 für Waveshare-SPI-E-Paper-Panels betreiben
  • Die ESP32-S3-Konfiguration unterstützt Browser-Flashen, Szenen-Rendering auf dem Gerät, OTA-Updates und Batteriebetrieb durch Deep Sleep zwischen Aktualisierungen
  • Jedes ESP32-Firmware-Image enthält genau einen ausgewählten Panel-Treiber

Gehäusebau und fertige Beispiele

  • FrameOS Case Maker erzeugt parametrische Gehäuse für den 3D-Druck, passend zu unterstützten Panels und Raspberry-Pi-Layouts
  • Nutzer können eine Vorlage wählen, Tiefe und Rahmen anpassen und dann Wandhalterung, Kickstand, USB-C-Aussparung und Schraubstützen hinzufügen, bevor sie die STL herunterladen
  • Der Case Maker verwendet dieselbe Hardware-Datenbank wie die Dokumentation und liefert Standardmaße für Waveshare- und Pimoroni-Konfigurationen
  • Der Case Maker ist unter Open Case Maker verfügbar
  • Fertige Beispiele zeigen Waveshare- und Pimoroni-Spectra-6-Panels, schlanke 3D-gedruckte Gehäuse, USB-C-Stromversorgung und die Software-Konfiguration von FrameOS als Gesamtpaket

1 Kommentare

 
GN⁺ 2024-01-04
Hacker-News-Kommentare
  • Ein interessantes kleines Projekt. Vor zwei Jahren habe ich als Geschenk einen 7-Farben-eInk-Arduino-Bilderrahmen gebaut, und das Schwierigste war, Bilder selbst zuzuschneiden, zu dithern und die Farbpalette anzupassen, damit sie auf dem Display halbwegs gut aussahen.
    Wenn FrameOS das für mich erledigt hätte, hätte ich wohl einige Stunden manueller Bearbeitung und Tests gespart.
    Letztlich habe ich derselben Person dieses Jahr einen Aura-Bilderrahmen gekauft, weil es so mühsam war, aus der Ferne Fotos hinzuzufügen.

    • ImageMagick kann Bilder mit eingeschränkter Palette batchweise verarbeiten. Es gab keinen Grund, das alles manuell zu machen.
    • Ich möchte erreichen, dass niemand Bilder selbst zuschneiden, dithern und farbindizieren muss. Das ist etwas, das die FrameOS-Software übernehmen sollte.
      Wenn man so etwas wie einen Inky-Impression-7-Farben-Rahmen verwendet, funktioniert das bereits, weil die zugehörige Software und die Treiber diese Verarbeitung meistens schon übernehmen.
  • Das könnte für medizinische Kioske, digitale Kunst und Signage sehr hilfreich sein.
    In Krankenhäusern gibt es eine ziemlich große Nachfrage nach digitaler Kunst. Ich war technischer Planer bei SFGH und UCSF, Technical Implementation Manager beim El Camino Hospital und Director of TV Operations bei Vizio.
    Ich habe solche Systeme und Wegeleitsysteme in Krankenhäusern bewertet, gekauft und installiert, und wir haben Hunderttausende Dollar für digitale Kunst ausgegeben, die in Aufzugslobbys oder auf Bildschirmen in Patientenzimmern in Endlosschleife lief, aber die Software war miserabel.
    In der Lobby des El Camino Hospital war das Digital-Signage-System so schlecht, dass wir einen Teil der Geräte durch Mac Minis ersetzen mussten, auf denen VLC MP4s in Endlosschleife abspielte.
    Daher fände ich es gut, ein solches System zusammen mit einem Pi Zero zu nutzen.
    Allerdings ließe sich damit wohl auch Wegführung elegant umsetzen. Wenn „interaktiv“ bedeutet, dass auf dem Pi eine Webapp/App laufen kann und er im Leerlauf wieder zur Endlosschleife mit digitaler Kunst zurückkehrt, wäre das gut.
    Der Markt für digitale Kunst, Signage und Wegführung braucht so ein freches neues Projekt, das den Markt aufmischt. Wenn ich jetzt einen Pi hätte, würde ich es sofort ausprobieren.
    Ich frage mich, ob man es auch auf dem schäbigen Android-TCL-Tablet installieren kann, das ich von T-Mobile bekommen habe. Eine Steuerung für Feit-Electric-Glühbirnen wäre auch einen Blick wert.
    Die profitabelste Option für ein solches Gerät/OS wäre vermutlich Verkehrsleitsignage im öffentlichen Nahverkehr wie bei BART. Man müsste es so machen, dass selbst die technisch schwächste Person in der Organisation Installation, Konfiguration und Anzeige fehlerfrei hinbekommt.
    Im Regionalverkehr von Sacramento gibt es viele Bildschirme, aber kaum brauchbare Informationen.
    Wenn man in APAC Zug fährt, gibt es LCD-Bildschirme oben an der Wand, die eine Statuskarte anzeigen. Wenn man in den USA Zug fährt, gibt es oben an der Wand Urin und Kot, aber nirgends eine Statuskarte.

    • Wenn man in US-Zügen Bildschirme installiert, landen am Ende vermutlich auch Urin und Kot darauf.
    • Einen Mac Mini zu installieren, nur um MP3-Dateien abzuspielen, ist eine enorme Geldverschwendung. Ein sehr billiger tragbarer MP3-Player für 10 Dollar würde reichen.
      Es wirkt verrückt, dass in den USA so Geld verschwendet wird, während auf der Straße Menschen um Essen betteln.
    • Ich frage mich, wie BrightSign einzuschätzen ist. Die Basissoftware ist ziemlich schlecht, aber die Programmierbarkeit war für uns sehr gut. Wir sind allerdings noch nicht sehr tief eingestiegen.
  • Das erinnert mich an Chumby. Das Produkt hatte wirklich enormes Potenzial, wurde aber viel zu früh aufgegeben.
    Im Haus gibt es viele Einsatzmöglichkeiten für smarte, kontrollierbare Displays, die sich mit wenig Code bedienen lassen, aber ich habe kaum Zeit, mich selbst damit zu befassen. Ich freue mich wirklich, dieses Projekt heute gesehen zu haben.

    • Ich baue gerade einen fertigen eInk-Kalender. Man kann auch eigene Inhalte entwickeln und sie dem Display über eine Web-URL als .png oder .jpeg bereitstellen.
      https://shop.invisible-computers.com
    • Ich habe auch keine Zeit, mich selbst damit zu befassen, also werde ich mir einfach ein gebrauchtes iPad kaufen und an die Wand hängen.
      So bekomme ich einen hellen Bildschirm, und alles, was ich sehen will, muss nur im Webbrowser angezeigt werden.
  • Wirklich cool. Letztes Jahr habe ich ein Bündel Skripte gebaut, um e-Ink-Bilder über Gmail auszutauschen, und es DispatchPi genannt; mit so einem Programm wäre die Entwicklung wohl viel schneller gegangen.
    https://github.com/malcolmosh/dispatchPi/blob/main/README.md
    Es war ziemlich umständlich, mich ständig per SSH im Terminal auf dem Pi einzuloggen und die Skripte mit dem FileZilla-FTP-Client und VSCode zu aktualisieren.
    Ich habe gerade auch ein Dashboard-Projekt fertiggestellt, das ich bald veröffentlichen will, und überlege, den Frame-Treiber auf ESP32 umzustellen, damit er mit Akku läuft. Der ESP32 verbraucht nämlich deutlich weniger Strom als ein Pi Zero.
    Wenn Zeit dafür ist, gebe ich eine Stimme für ESP32-Kompatibilität ab.

    • Ich frage mich, wie weit die ESP32-Entwicklung fortgeschritten ist. Bild-Rendering war weniger einfach als erwartet. In meinem Fall war das Display kein eInk, sondern ein LCD.
      Statt zu versuchen, beliebige Bilder mit der ESP-Bibliothek anzuzeigen, war es einfacher und zuverlässiger, die Bilder vor dem Senden an ESP32/Display auf eine bestimmte Größe und ein bestimmtes Format zu bringen.
    • Ich frage mich, welche Hardware verwendet wird. Ich habe vor Kurzem ein ähnliches Projekt abgeschlossen und würde gerne mehr mit e-Ink machen, aber die Treiberplatinen für den Pi sind fast so teuer wie die e-Ink-Displays selbst.
  • Das erste Bild auf der Seite ist der Editor, und wow, der ist wirklich beeindruckend. In der Beschreibung steht dieser Teil:
    „Diagram Editor: Eine Drag-and-drop-Oberfläche, um Nim-Apps zu Szenen zusammenzusetzen. Bestehende Apps wie ‚OpenAI image‘ oder ‚Text overlay‘ können geforkt und angepasst werden, damit sie zu den eigenen Bedürfnissen passen. Jedes Feld kann mit Inline-Code-Schnipseln überschrieben werden.“
    Das sieht wirklich elegant aus. Da muss enorm viel Arbeit hineingeflossen sein. Ich frage mich, womit das gebaut wurde, und auch, ob der Editor in Nim geschrieben ist.
    Außerdem frage ich mich, was nach dem Erstellen einer Szene ausgeführt wird. Läuft da eine Runtime, die dem Editor ähnelt, aber einen Präsentationsmodus hat, oder spuckt sie ein neues Nim-Programm aus, das andere Nim-Programme ausführt?
    Ich frage mich auch, ob Apps jeweils einmal aufgerufen werden oder ob sie dauerhaft laufen und persistente Kommunikation betreiben. Was triggert den Start eines Frames, und wie erfolgt das Compositing?
    Es wird zwar für Smart Frames verwendet, aber es fühlt sich so an, als hättet ihr eigentlich ein sehr cooles allgemeines flow-basiertes Programmiersystem gebaut.

    • Danke für das Feedback.
      Der Editor/Controller selbst ist eine React+Kea-App, der Diagrammteil nutzt React Flow, und das Backend ist Flask.
      Im Moment muss man zum Testen, ob eine gebaute App funktioniert, auf den Frame deployen. Mit einem schnellen RPi 5 als Testgerät liegt die Feedback-Schleife normalerweise bei etwa 30 Sekunden, beim Zero W2 bei etwa 1 Minute und beim Zero W bei etwa 2 Minuten. Das ist nicht ideal, und ich möchte es verbessern.
      Idealerweise würde ich gerne Nim’s JS-Backend nutzen, um einen „Frame“ zu bauen, der direkt im Browser laufen kann, um dort zu testen.
      Zu den anderen Fragen: Das FrameOS-System läuft beim Booten, und alle Apps werden zu einem einzigen Binary kompiliert und gemäß den Anweisungen der Szene ausgeführt. Wenn ein Render-Event übergeben wird, wird ein neuer Frame gerendert; dieses Event kann periodisch automatisch oder auf Anfrage ausgelöst werden.
      Der Frame schickt Logs an den Controller, kann ansonsten aber vollständig unabhängig arbeiten.
    • Nur anhand des Screenshots sieht es nach dear imgui aus. Ähnliche Widgets sieht man hier: https://github.com/TimoSalomaki/awesome-dear-imgui
      Edit: Ich lag falsch, tatsächlich ist es React Flow.
      https://github.com/FrameOS/frameos/blob/037af53e94a3b47ce5df...
      https://reactflow.dev/
  • Sieht wirklich interessant aus. Verstehe ich das richtig, dass das eigentlich kein OS ist, sondern Software, die auf dem OS des Pi läuft?

    • Technisch gesehen stimmt das. Sogar die beste Art von stimmt, aber bei dieser Frage gibt es ein paar Nuancen.
      FrameOS ist ein kompiliertes Binary, das auf Linux läuft. Aktuell muss man vor der Installation von FrameOS selbst „Raspberry Pi OS Lite“ ohne Desktop-Umgebung auf die SD-Karte installieren. Insofern kann man es als „einfach eine Anwendung“ betrachten.
      Allerdings ist das so, weil es in der Frühphase des Projekts der schnellste Weg war, loszulegen. Der nächste Schritt ist zu sehen, wie viel man entfernen kann. FrameOS ist ein einzelnes statisch kompiliertes Binary und braucht außer dem Linux-Kernel möglicherweise nicht viel. Wäre es dann ein echtes OS? Android nutzt ebenfalls den Linux-Kernel, gilt aber als eigenes OS.
      Sobald FrameOS aktiviert ist, übernimmt es das gesamte System, hat eigene apps/- und drivers/-Ordner und verhält sich in vielerlei Hinsicht bereits wie ein Betriebssystem. Ich überlege auch, es auf dem ESP32 laufen zu lassen, wofür man vielleicht drivers/wifi/ hinzufügen müsste. Wenn darunter gar kein OS läuft, dürfte man es dann OS nennen? Das könnt ihr entscheiden.
      Wenn man mich fragt, ob das ein Betriebssystem ist, dann ist es für mich eines; man kann es aber auch anders sehen.
      Bei meinem eigentlichen Arbeitgeber PostHog nennen wir uns manchmal „Product OS“, und das stört mich noch mehr. Denn ein Bündel von Webapps ist im traditionellen Sinn eindeutig kein Betriebssystem. Ich habe auch schon gesehen, dass Dinge, die keine reinen Betriebssysteme sind, ein -OS ans Ende bekommen. Das stört mich ein wenig, vor allem weil ich aus einer Zeit komme, in der „Welches OS benutzt du?“ eine identitätsstiftende Frage war.
      Sprache verändert sich, und „Betriebssystem“ scheint inzwischen für unterschiedliche Leute mehr zu bedeuten, als du und ich vielleicht darunter verstehen.
    • Sieht so aus. Dann dürfte es vermutlich auch auf anderen Boards mit nur kleinen Anpassungen laufen.
    • Genau. Es sieht eher nach einer fernsteuerbaren Vollbildanwendung aus.
    • Ich frage mich wirklich, was ein OS eigentlich ist. Nicht sarkastisch gemeint. „OS“ ist heutzutage ein ziemlich locker definierter Begriff. Android und Ubuntu verwenden fast denselben Kernel, sind aber eindeutig sehr unterschiedliche Betriebssysteme.
      Da FrameOS Nim verwendet, könnte es so portiert werden, dass es ohne Kernel auf Bare Metal läuft. Dank Async-Dispatch bietet Nim auch leichtgewichtiges kooperatives Multitasking.
      FrameOS ist derzeit ein OS, das nur auf dem Linux-Kernel läuft, oder, wenn man so will, Userspace. Es gibt aber keinen Grund, warum es nicht so portiert werden könnte, dass es direkt auf einem Mikrocontroller läuft.
  • Sieht cool aus. Ich wollte schon länger ein E-Ink-Display zusammen mit Home Assistant einrichten, und werde mir das hier ansehen.
    Im Artikel „Why FrameOS“ gibt es ein Foto, das wie ein E-Ink-Display aussieht, das ein Home-Assistant-Dashboard anzeigt, und darunter steht: „Aber die Software-Seite war ein Chaos.“ Mich würde interessieren, welche Probleme es genau gab, bevor FrameOS entwickelt wurde. Zumindest auf dem Foto sieht es so aus, als würde es gut funktionieren.
    Mich interessiert auch, was dieser Satz tatsächlich bedeutet: „GPT4 Support: Bitten Sie Ihr Lieblings-LLM, FrameOS-Apps zu schreiben und zu debuggen.“

    • Der Autor hat GPT-4 in den App Builder zum Erstellen eigener Ansichten in FrameOS integriert, sodass man GPT um Verbesserungen am zugrunde liegenden Code bitten kann. https://frameos.net/blog/gpt4-support
      Als ich das gesehen habe, hatte ich sofort das Gefühl, dass sich damit der Trend bestätigt, dass neue Apps künftig von Anfang an LLM-Integration enthalten werden. Warum sollte man es auch nicht tun? Richtig eingesetzt können LLMs die User Experience in fast jeder App deutlich verbessern.
    • Bei ChatGPT wirkt es wie ein cleverer Scherz, der betont, dass das Produkt keine zusätzliche Integration braucht.
      So nach dem Motto, dass man kein Blockchain-basiertes, autonom fahrendes Social-AI-Cloud-Ding bauen muss, das sich derzeit im Private-Equity-Markt gut verkauft.
  • Gibt es eine gute Alternative, um alte Amazon-Fire-Tablets davor zu bewahren, zu Elektroschrott zu werden? Sie basieren auf Android.

    • Mit Fire Toolbox kann man alle unnötigen vorinstallierten Standard-Apps deaktivieren. Wenn man eine Fully-Kiosk-Lizenz kauft, lassen sie sich für viele praktische Zwecke umfunktionieren.
      Ich persönlich nutze Amazon-Fire-Tablets im Haus als Audio-Treiber für Snapcast. Jedes Tablet hat USB, Wi-Fi, 3,5-mm-Aux und einen eingebauten Akku, was sie für diesen Zweck sehr gut macht; im Sale kosten sie 45 Dollar pro Stück, was besonders ordentlich ist.
    • Ich frage mich, wo dabei das Problem liegt. Kann man nicht einfach irgendeine Android-App installieren und anzeigen lassen?
    • Der Bootloader ist gesperrt. Wenn ich mich richtig erinnere, war das Modell von 2015 das letzte, das sich über einen Bug entsperren ließ, bei dem man bestimmte Pins kurzgeschlossen hat.
      Ohne entsperrten Bootloader kann man Android zwar möglicherweise rooten, aber Android oder das ROM selbst nicht ersetzen.
      Viel bringt das ohnehin nicht. Es ist MediaTek, und die Partitionsstruktur und das Treibermodell aus dieser Zeit sind im Großen und Ganzen ein Durcheinander. Es wäre schwierig, FrameOS auf dieser Hardware auf halbwegs elegante Weise zum Laufen zu bringen.
  • Wirklich cool. Es gibt viele Projekte, die etwas Ähnliches nachbauen wollen, aber kaum etwas, das besonders auf der Produktionsseite einen solchen Grad an Ausgereiftheit hat.
    Persönlich würde ich mir Unterstützung für stromsparende eINK-Geräte mit integriertem ESP32 wünschen, wie etwa die InkPlate-Serie. Trotzdem bringt mich das dazu, über einen Wechsel auf einen Pi nachzudenken.

    • Ich würde mir wünschen, dass FrameOS ESP32 unterstützt. Noch vor zwei Tagen war FrameOS eine langsame, interpretiert ausgeführte Python-App. Heute ist es ein statisch gelinktes 3-MB-Binary.
      Der Spielraum ist knapp, und wahrscheinlich müsste man einige Funktionen wie Threading streichen, aber theoretisch sollte es machbar sein.
      Allerdings gibt es noch viel zu tun, um die Raspberry-Version richtig gut zu machen, daher habe ich vorerst nicht vor, diese Aufgabe zu übernehmen.
  • Es ist schön, dass in diesem Bereich mehr Software entsteht.
    Nur indirekt damit verbunden: Ich suche nach einem Bildschirm ab 32 Zoll, den man als Bilderrahmen verwenden kann. Abgesehen vom Samsung The Frame habe ich nichts gefunden, was für einen so einfachen Use Case erstaunlich ist.
    Bisher habe ich Folgendes gefunden: Fernseher und Monitore haben keinen guten Stromverbrauch, wenn man sie rund um die Uhr eingeschaltet lässt. Farb-E-Ink gibt es meist nur bis etwa 13 Zoll. Samsung The Frame ist funktional und optisch gut, aber teuer, und außerdem ist es eben Samsung.
    Mich würde interessieren, ob jemand ein empfehlenswertes Produkt kennt.

    • Ich frage mich, wie ein spezielles Bilderrahmen-Gerät gegenüber einem normalen TV-Display Strom sparen kann. Läuft es am Ende nicht auf dieselben Grundkomponenten hinaus?