Skip to content

Meinungsaustausch zu Updates, Konfiguration, etc. #561

@D-ominik

Description

@D-ominik

Das hier ist wirklich ein tolles Projekt. Ich habe inzwischen 6 Uhren gebaut (alle identisch als 10x11), davon 5 verschenkt. 3 weitere sind gerade in Arbeit. Obwohl in der Zeit diverse Firmware-Versionen veröffentlicht wurden, haben alle diese Uhren noch Version 3.3, weil die jeweilige Version beim Bau gerade einen Bug oder dergleichen hatte und die Zeit es nicht erlaubte, da erst etwas zu fixen. Ist auch kein Problem, weil die Grundfunktionen bei 3.2 bis auf eine Kleinigkeit gut und zuverlässig funktionieren und MQTT bei den Beschenkten nicht genutzt wird. Dennoch bleibt ein gewisser Eindruck von stetiger Verschlimmbesserung bzw. immer mehr Inkonsistenzen.

Daher möchte ich diese Diskussion anregen, denn mein Eindruck ist, dass es derzeit keine Leitlinien für die Weiterentwicklung gibt. Vielleicht ist aber auch meine Sichtweise falsch.

Grundsätzlich ist es vorgesehen, die Firmware der Uhren eigenständig durch Laien zu aktualisieren. Entsprechende Links und Funktionen sind im Web-Interface vorhanden und im Repository werden fertige Firmware-Builds angeboten. Das ist super, aber es erfordert meiner Meinung nach ein paar Rahmenbedingungen, die derzeit nicht erfüllt sind:

Beständigkeit der Konfiguration

Scheinbar mit jedem Release wird die Konstante SERNR geändert, wodurch die Nutzereinstellungen verloren gehen. Installiert der Nutzer ein anderes Release, muss er die WLAN-Zugangsdaten neu eintragen und sich dazu erstmal erinnern, wie das ging. Nicht vergessen: Nutzer der Uhren sind nicht unbedingt diejenigen, welche die gebaut haben. Das sind u.U. technische Laien. Weiterhin muss der Nutzer alle seine Einstellungen (Farbe, Anzeige, etc.) erneut vornehmen. Viel schlimmer aber ist: der Nutzer erhält nach dem Update unter Umständen eine "defekte" Anzeige, z.B. wenn die Anzeige LEDTYPE Grbw verwendet, die neue Firmware aber Brg als Standard vorsieht. Der beschenkte Laie ist damit überfordert.

Falls der Zweck das Eliminieren eventuell veralteter oder inkompatibler Konfigurationswerte ist, ist das Verwerfen aller Konfigurationsdaten der falsche Weg. Diese Einzelfälle sollten sinnvoll per Software gelöst werden.

Hardwarekonfiguration per Webinterface

Das Webinterface erlaubt permanent die Konfiguration von Hardware-Parametern. Das ist eine unnötige Fehlerquelle. Im Normalfall ändert sich die Hardware nach dem Bau einer Uhr nicht mehr. Wenn der Nutzer z.B. die Bau-Variante oder den LED-Typ verstellt (unpassende Optionen wählt), erhält er eine "kaputte" Anzeige. Wenn er die Einstellung aus Neugier vorgenommen hat, ist das weniger dramatisch, dann weiß er ja, was geschehen ist und kann es sofort rückgängig machen. Diese Einstellungen können jedoch auch schnell versehentlich verstellt werden: dazu genügt es je nach Browser/OS schon, wenn man mit Mauszeiger oder Finger über dem Dropdown scrollt bzw. eine Scroll-Geste macht. Statt zu scrollen wird dann die Auswahl im Select verändert. Weil das unbeabsichtigt geschieht und beim Erreichen der ersten bzw. letzten Select-Option dann in der Regel doch gescrollt wird, bemerkt man dieses Versehen meist nicht gleich. Da manche Einstellungen (z.B. Uhr-Variante) ohne Speichern-Button übernommen werden, ist das ein ziemlich gravierendes Problem. Mir ist es schon gelungen, durch versehentliche Verstellung der Variante in einen boot loop zu gelangen => worst case für Laien.

Meiner Meinung nach gehören alle Hardware-Einstellungen grundsätzlich auf eine Einstellungsseite (sind derzeit auf "Anzeigeoptionen" und "Einstellungen" verteilt) UND diese Einstellungen sollten nicht dauerhaft zugänglich sein. Denkbar wäre hier z.B., dass auf diese Hardware-Einstellungsseite beim Aufruf des Webinterface umgeleitet wird, wenn entsprechende Konfigurationsdaten im EEPROM fehlen (oder eben, wenn man die spezielle URL gezielt aufruft). Nach dem Speichern fragt das Interface "sind die Einstellungen korrekt", bei "ja" wird fortan nur noch das normale Webinterface gezeigt. Die Hardwareeinstellungen erscheinen erst wieder, wenn die entsprechenden Daten im EEPROM fehlen (Reset auf "Werkseinstellungen") oder man die URL zu dieser Seite gezielt aufruft.

Dies betrifft folgende Einstellungen:

  • Uhrvariante
  • vertikal spiegeln
  • horizontal spiegeln
  • Bauart (jede LED entspricht...)
  • Anzahl der LEDs für Minuten (4 oder 7)
  • LED-Typ
  • Farbtemperatur der weißen LED

Rückwärtskompatible Updates

Funktionsupdates sollten so erfolgen, dass auch bei Einspielen des Updates auf älteren Modellen die Funktion weiterhin gegeben ist.

Als Beispiel möchte ich hier z.B. #408 nennen, wo mit großem Aufwand und viel Refactoring die Unterstützung für einen anderen Helligkeitssensor ergänzt wurde. Das Problem an der Umsetzung ist jedoch, dass der Fallback-Code für einen LDR (also der Code für alle bislang mit Helligkeitssensor gebauten Uhren und vermutlich auch die allermeisten zukünftig gebauten Uhren) komplett anders aufgebaut ist, als der bisherige, gut funktionierende Code. Das ist aufgrund der Vielzahl möglicher Konstellationen, die man nicht einfach nachstellen und testen kann, eine schlechte Idee und wie sich bei mir zeigt, funktioniert der neue Code für den LDR nicht. Da ich das dokumentierte Setup für MCU und LDR verwende und es vorher tadellos funktioniert hat, nehme ich an, dass der neue Code vermutlich bei so gut wie niemandem mit LDR funktioniert.

Immer, wenn man die möglichen Setups nicht testen kann, sollte man Änderungen so ausführen, dass die Rückwärtskompatibilität durch entsprechende Programmierung garantiert ist. Im genannten Beispiel wäre das der Fall gewesen, wenn der Fallback-Code für den LDR unverändert geblieben wäre.

Auch halte ich es für keine gute Praxis, Bibliotheken und Code für optionale Features fest zu integrieren. Gerade im Bereich Mikrokontroller gibt es genug Beispiele, wo das irgendwann Probleme macht und nachträglich der Code für optionale Funktionen mühsam optional gemacht wurde. Ich handhabe es generell so, dass ich per Konfiguration eine Konstante setzte (z.B. #define USE_AMBIENTSENSOR_BH1750 true) und der jeweilige Code und dessen Bibliotheken dann nur eingebunden werden, wenn die Konstante true ist. Auf diese Weise kann man einfach verschiedene Versionen bereitstellen, welche mit allen Funktionen und welche mit reduzierten Funktionen. Auch kann man zum Debuggen nicht benötigte Komponenten leichter entfernen.

Muss jede Variante alles können?

Mit #483 wurde die Digitalanzeige dahingehend modifiziert, dass sie auch auf zu kleinen Displays angezeigt werden kann. Hier wechselt die Anzeige dann ständig zwischen Stunde und Minute hin und her. Dieses Gezappel widerspricht dem Konzept einer Wortuhr. Schlimmer ist aber, dass auch auf Formaten, die bislang groß genug für die Digitalanzeige waren (und noch sind), diese nicht mehr korrekt angezeigt wird. Auch hier erfolgt völlig unnötig ein Wechsel zwischen Stunden und Minuten-Anzeige.

Meiner Meinung nach: wenn die Bauform der Uhr für ein Feature nicht geeignet ist (im Beispiel: zu klein für die Digitalanzeige), dann ist es besser, das Feature für diese Bauform nicht zur Verfügung zu stellen. Auf keinen Fall sollten geeignete Bauformen durch unbedingte Unterstützung für ungeeignete Bauformen benachteiligt werden.

.

So viel erstmal dazu. Wie sieht ihr das?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions