ESP RGBWW Controller - Firmware v5

Begonnen von pjakobs, 01 Januar 2025, 21:14:31

Vorheriges Thema - Nächstes Thema

rippi46

ZitatUm die 12V zu messen bräuchte es ein bisschen extra Schaltung, nur in Software geht da nix.

Interresant währe im Prinzip einfach die Spannung bzw. der Wert an A0 des ESP. Den Rest würde ich über einen kleinen Spannungsteiler erledigen.

Wenn ich es richtig weiss verträgt der nackte ESP8266 1.0V an A0.

Ich habe 5 Controller batteriebetrieben. Solange ich eine LiFePo-Akku dran habe ist das nicht sehr kritisch. Der schaltet einfach bei ca 10,5 Volt ab.
Bei den normalen Blei-Akkus funktioniert das nicht. Die werden ausgesaugt bis nichts mehr geht und dann sind die relativ bald defekt.

Wenn es jetzt einfach ein Möglichkeit gäbe die Spannungsmessung über die Weboberfläche ein bzw auszuschalten. könnte ich den Wert weiterverarbeiten und bei unterschreiten einer Grenze darauf reagieren (Akku tauschen)

Gruß rippi
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

pjakobs

Zitat von: rippi46 am 13 Februar 2025, 11:31:14
ZitatUm die 12V zu messen bräuchte es ein bisschen extra Schaltung, nur in Software geht da nix.

Interresant währe im Prinzip einfach die Spannung bzw. der Wert an A0 des ESP. Den Rest würde ich über einen kleinen Spannungsteiler erledigen.

Wenn ich es richtig weiss verträgt der nackte ESP8266 1.0V an A0.

Ich habe 5 Controller batteriebetrieben. Solange ich eine LiFePo-Akku dran habe ist das nicht sehr kritisch. Der schaltet einfach bei ca 10,5 Volt ab.
Bei den normalen Blei-Akkus funktioniert das nicht. Die werden ausgesaugt bis nichts mehr geht und dann sind die relativ bald defekt.

Wenn es jetzt einfach ein Möglichkeit gäbe die Spannungsmessung über die Weboberfläche ein bzw auszuschalten. könnte ich den Wert weiterverarbeiten und bei unterschreiten einer Grenze darauf reagieren (Akku tauschen)

Gruß rippi


verstehe.
Ich denk mal drüber nach, wenn ich mit allem anderen fertig bin ;-)
Das ist doch eine eher ungewöhnliche Anforderung.
Aber: Du kannst ja einen Pull Request machen ;-)


pjakobs

argh! Ich hab mir gedacht, ich räum kurz mal die Messaging Protokolle auf (aktuell spricht der Controller jsonrpc über tcp socket, mqtt und websocket, tcp socket wird früher oder später raus fliegen, aber die anderen beiden sollten gleichwertig sein.

Jetzt schreibe ich eine abstrakte Interface Klasse für die drei Transport Mechanismen, eine abstrakte Message Klasse, einen abstrakten Eventserver und wenn ich Zeit hab auch noch einen abstrakten Callback Mechanismus, damit ich einfach erweitern kann, wie der Controller auf Messages reagiert.

Wenn, wie in dem Fall, drei, vier Entwicker nacheinander an einer relativ großen Firmware arbeiten schraubt jeder seinen Teil an das bestehende an (so hab ich's mit websocket gemacht) und irgendwann muss dann mal die Architektur überdacht werden.

Call me Mr. Scope Creep

pjakobs

okay, neue Version incoming. Nicht so sehr viel offensichtlich neues, aber ich hab hinter den Kulissen ein bisschen aufgeräumt und ein paar Dinge sollten jetzt etwas besser aussehen.
es gibt auch eine neue top-level Seite für "Groups and Scenes", die aber noch nicht wirklich fertig ist. Die Idee ist hier, dass ich dort die Verwaltung von Gruppen von Controllern und Szenen, also vordefinierten einstellungen für Controller unterbringe.

Im moment ist mein Gedanke so:
  • Gruppe definieren (etwa "Wohnzimmer")
  • manuell für jeden Controller die Helligkeit/Farbe einstellen, die für die Szene gewünscht ist
  • Eine Szene anlegen, die erstellte Gruppe auswählen und abspeichern. Dabei wird der Controller im Hintergrund die aktuelle Farbe und Helligkeit der anderen in der Gruppe abfragen und das als den Wert für die Szene speichern
Wie gesagt, das ist so noch nicht implementiert, aber so kann ich es mir vorstellen.
Ich weiß noch nicht so richtig, wo die Szenen dann im UI hin gehören. Eigentlich sollten sie so ziemlich direkt erreichbar sein, ähnlich wie jetzt die besternten Presets. Vielleicht werfe ich die Szenen dort mit rein, so dass es eine Oberfläche gibt, von der aus sofort alle "one Touch" Funktionen erreichbar sind.

Habt Ihr bessere Ideen?

pjakobs

im Moment ist offenbar ein Fehler im Frontend, der dazu führt, dass es gar nicht erst geladen wird.
Macht mal keine Updates, bis ich das behoben habe.
(ich glaube, es hängt mit einem Change zusammen, der die Auswahl des aktuellen controllers betrifft)

pjakobs

Problem behoben (es saß ziemlich mittig zwischen meinen Ohren) - Ihr könnt wieder testen.

Mafi

#66
Weil du gerade neue Features einbaust und nach Ideen gefragt hattest. Ich hätte eine, aber wahrscheinlich ist die recht speziell:
Ich setze mehrere der Controller für die Aquarienbeleuchtung ein. Man kann hervorragend Tagesabläufe simulieren, inklusive rötlichem Sonnenaufgang, fahlem Mondlicht etc. Nun würde ich aber oftmals Einstellungen der fünf Kanäle nutzen wollen, die nur per RAW Befehl möglich sind, weil sie in der Wohnraumbeleuchtung keinen Sinn ergeben. Zum Beispiel beide Weißkanäle gleichzeitig auf 100% oder sogar alle 5 Kanäle auf 100%. Mit RAW Befehlen möglich, aber man kann dann leider die automatische Überblendung nicht nutzen, die die Controller gerade so attraktiv macht.

Mein Wunsch wäre daher so etwas wie ein Boost-Modus, der sich wie folgt verhält:
Normalerweise wird bei Vorhandensein eines oder beider weißen Kanäle der Weißanteil der eingestellten Farbe auf den Weißkanälen ausgegeben und von den RGB Kanälen abgezogen. Außerdem wird je nach eingestellter Farbtemperatur der Weißanteil zwischen den beiden Weißkanälen aufgeteilt, sodass beispielsweise bei mittlerer Farbtemperatur beide weiße Kanäle zu je 50% maximal angesteuert werden. Das ergibt auch Sinn, denn es soll sich beim Ändern der Farbtemperatur die Helligkeit ja nicht ändern, sodass nie mehr als die Helligkeit eines der beiden Kanäle allein genutzt werden kann.
Ich hätte jetzt gern, dass der Controller sich in diesem speziellen Wunschmodus so verhält, dass der Weißanteil der eingestellten Farbe weiterhin auf den weißen Kanälen ausgegeben wird, aber ohne diesen Anteil von den RGB Kanälen abzuziehen. Das würde dazu führen, dass Weiß dann gleichzeitig mit allen RGB Kanälen und den Weiß Kanälen dargestellt würde. Außerdem sollte auch bei der Wahl der Farbtemperatur die Helligkeitskorrektur entfallen, sodass bei einer mittleren eingestellten Farbtemperatur beide Weißkanäle auf 100% laufen würden.
Zusammen genommen würde also bei einer angenommenen Konfiguration von WW 3000K und CW 5000K und einer Einstellung von Weiß mit 4000K als Ergebnis alle RGB Kanäle auf 100% (weil weiß) und beide Weißkanäle auf 100% (weil mittlere Farbtemperatur) herauskommen.

Für die Wohnraumbeleuchtung ergibt das natürlich wenig Sinn, weil sich mit der Farbeinstellung auch immer die Helligkeit verändern würde. Aber wenn es darum geht, die maximale Helligkeit aus den installierten LEDs zu holen (weil man z.B. ein Aquarium beleuchtet und die Eigenarten dieser Betriebsart im Ablauf berücksichtigen kann), dann wäre das für mich ein echt praktisches Feature.

Ist meine Beschreibung nachvollziehbar? Ich habe keine Ahnung wie komplex die Umsetzung wäre, möglicherweise geht es ganz leicht, vielleicht hängt aber viel mehr dran als ich mir naiv vorstelle. Dann wäre die Frage, ob so ein Feature außer für mich auch für andere interessant wäre. Es muss ja nicht zwingend um Aquarien gehen. Eine per Infrarot steuerbare RGBW E27 Lampe von Jedi hat beispielsweise einen Modus "Arbeitslicht", bei dem die maximal mögliche Helligkeit abgerufen wird, indem einfach alle Kanäle auf 100% gestellt werden, unabhängig von der sich ergebenden Farbtemperatur. Das ist manchmal schon ganz nützlich.

Man könnte das ja im Webinterface bei der Einstellung der angeschlossenen LED Kanäle unterbringen. Einfach eine Tickbox "Boostmode" oder so, die natürlich nur Sinn ergibt, wenn mindestens ein weißer Kanal vorhanden ist. Oder als weitere Auswahl bei der Farbmischung (Spektrum, Regenbogen oder was es da alles gibt, übrigens eine Einstellung deren Wirkung mir nicht so ganz klar ist).





pjakobs

@Mafi, das klingt eher wie etwas, das ich in der nächsten Version angehen würde (V6) - da will ich die rgbww library angehen und unter anderem "virtuelle Leuchten" einbauen, also etwa die Möglichkeit, die fünf Kanäle eines ESP8266 in eine RGB und zwei Reinweiß Leuchten zu konfigurieren, die dann auch getrennt steuerbar sind. Sinnvoll ist das dann vor allem für die größeren ESP32, die 12 Kanäle ansteuern können.
Ich behalt Deine Idee mal in Hinterkopf. Aber: das kann ein bisschen dauern. ;-)

pjakobs

#68
so, gerade hab ich eine neue Version gepusht, die ein paar Verbesserungen unter der Haube mitbringt, aber auch ein paar Sachen, die sichtbar sind:
  • Presets sind jetzt global, das heißt sie werden auf alle aktuell sichtbaren Controller verteilt. Das ist nützlich, wenn ich im nächsten Sprint auch Presets in der Definition einer Szene nutzen will. Alle Elemente, ob Szenen, Presets, Gruppen oder Hosts werden jetzt über eine eindeutige ID angesprochen, so dass sie über das ganze Netzwerk (genaugenommen sogar global, weil die ChipID des Controlers eingeht) eindeutig sind.
  • es gibt einen Button, der alle Presets überall löscht. Ob der später in den Production Build eingeht weiß ich noch nicht, ich hab den primär gebraucht, wenn ich die Controller aufräumen musste, weil alle unterschiedliche Presets hatten
  • es Gruppen können angelegt werden, um später eine Szene für eine Gruppe anzulegen. Eine Szene bezieht sich immer auf eine Gruppe von Controllern, d.h. die Gruppe muss vorhanden sein, bevor die Szene dafür angelegt wird.
  • auch wenn es so aussieht, noch funktionieren Szenen nicht, ich hab die Colorpicker Seiten so umgebaut, dass ich die Komponenten in der Definition von Szenen nutzen kann - das einzubauen ist der nächste Schritt
  • im Firmware Update Dialog wird jetzt automatisch die build Variante vorgewählt, die aktuell auf dem Controller läuft (debug oder release). Ich bau noch eine Funktion ein, um alle sichtbaren Controller auf einmal updaten zu können. Ich überlege auch, ob ich statt des "check firmware" einfach von vornherein checke, ob es neuere Firmware gibt und dann den Button "update Firmware" nenne, das spart dann einen Schritt, denn der Button wäre nur verfügbar, wenn die aktuelle Firmware auf lightinator.de neuer wäre als die gerade laufende. Allerdings gibt es da ggf. die Situation, dass man den build Type wechseln möchte. Ich muss überlegen. Außerdem denke ich, ich werde eine Funktion einbauen, die alle Controller auf einmal updaten kann.
die auffälligste Änderung ist aber, dass die verschiedenen Karten des UI jetzt als default eingeklappt sind (ausgenomen der Colorpicker). Das empfinde ich als übersichtlicher und schöner - sagt mir, was Ihr denkt.
Weil ich neulich das Caching auf dem Controller aktiviert habe, müsst Ihr vermutlich den Reload des UI erzwingen, indem Ihr auf einem neu geflashten Controller einmal <shift> reload klickt.

Und am Rande: ich nutze diese Version mittlerweile auf all meinen Controllern, wenn sie aus fhem heraus angesteuert wird, hat sie sich bisher als völlig stabil erwiesen. Ich habe etliche Controller, die zuvor mit der alten Firmware an der Ermüdung des FLASH gestorben waren hiermit wieder reanimiert und nutze sie wie gehabt.

pjakobs

#69
und noch ein neuer Build für's OTA - diesmal gibt's die ersten Szenen Funktionen.
Die Logik ist derzeit so:
Ihr legt eine Gruppe von Controllern an (etwa für einen Raum oder ein Objekt oder was immer bei Euch zusammen gehört)
Ihr legt dann eine Szene an und wählt die zugehörige Gruppe aus. Danach könnt ihr für jeden Controller der Szene entweder ein Preset, einen hsv oder einen raw Wert auswählen, der dann in der Szene gespeichert wird.
Die Szenen werden als hierarchische Liste unter den Gruppen angezeigt, allerdings sind die Namen global (es kann aber den gleichen Namen mehrfach geben, denn intern verwendet der Controller eindeutige IDs)
Wenn Ihr in der Liste eine Szene anklickt, dann wird sie auf die Controller der Gruppe angewendet.

Was noch kommt:
  • neben dem Gruppenkopf ist schon ein kleines Kamera Icon, der Gedanke ist da, einen Snapshot der aktuellen Beleuchtung zu machen, d.h. Ihr stellt wie gehabt jeden Controller ein und die Szene speichert dann, was gerade ist.
  • jede Szene hat schon ein Sternchen Icon, damit macht Ihr sie zum Favoriten. In zukunft sollen die favorisierten Szenen dann auf der Startseite im gleichen Screen dargestellt werden wie jetzt schon die favorisierten Presets, so dass Ihr schnell von dort aus eine Szene aktivieren könnt
  • ich habe im Schema vorbereitet, dass Ihr für jeden Controller und jede Szene ein eigenes Icon vorgeben könnt, allerdings aus einer Auswahl von internen Icons, ich will die Controller so weit wie möglich Internet-unabhängig halten
Ich glaube, so langsam erreiche ich einen Funktionsumfang, den man kommerziell ohne Server oder Cloudanbindung nicht finden wird.

Wie oben schon gesagt: alle Daten werden auf alle Controller geschrieben, es ist demnach egal, mit welchem Controller Ihr Euch verbindet. Der Nachteil ist, dass das bei vielen Controllern länger dauern kann.

Worüber ich nachdenke: Ich könnte auch noch Animationen als Objekt einführen. Der Controller kann ja selbständig Farbwechsel ausführen und es gibt eigentlich keinen Grund, die nicht auch über das UI zugänglich zu machen. Schwieriger wird es, dann mehrere Controller halbwegs synchron zu halten, ohne dann mqtt zu nutzen.

pjakobs

#70
Der Szenen Dialog kommt langsam zusammen. Es fehlen noch ein paar Kleinigkeiten und favorisierte Szenen müssen noch in der Favorites Page eingebunden werden, aber langsam wird's.

Neue Version heute Morgen!

pjakobs

eigentlich gibt es jetzt auf https://lightinator.de die Möglichkeit, die aktuelle Firmware per web-install zu installieren (ideal für noch nicht geflashte Controller) - aber zumindest bei mir spiel Chrome da nicht mit.

Vielleicht klappt's ja bei Euch.

pj

pjakobs

Noch ne neue Version. Diesmal funktioniert die Synchronisation mit existierenden Controllern und ein neuer Controller, der eingebunden wird, holt sich erstmal die Presets, Gruppen und Szenen von den anderen, oder genauer: immer, wenn das Frontend auf einem Controller gestartet wird, werden Presets, Gruppen und Szenen mit allen anderen synchronisiert.

pjakobs

neues Feature, jetzt können von einem Controller aus alle im Netzwerk upgedatet werden. Hat noch ein paar kosmetische Probleme, aber funktioniert insgesamt schon ziemlich gut.