Zitat von Polytox
Beitrag anzeigen
Ankündigung
Einklappen
Keine Ankündigung bisher.
Neue Logikbausteine für den L1/X1: Formelberechnung, Statistik und mehr...
Einklappen
Dieser Beitrag wurde beantwortet.
X
X
-
Zuletzt geändert von uzi10; 07.05.2025, 21:03.
-
Zitat von hyman Beitrag anzeigenMuss ich nochmal ausprobieren, was bei mir passiert, wenn ich die (eigentlich überflüssigen) Leerzeichen entferne"http://a.b.de/x&R="+{Rot:I}+"&G="+{Grün:I}+"&B="+{Blau:I}+"&W="+ {Weiß:I}wird zu Unrecht ein Fehler wegen einer vermeintlichen Zuweisung in der Formel ausgeworfen.
Zum Glück gibt es Workarounds:- Vor und nach jedem + ein Leerzeichen einfügen
- oder Zwischenvariablen verwenden:
"http://a.b.de/x&R="+_out1_+"&G="+_out2_+"&B="+_out3_+"&W="+_out4 _
Zuletzt geändert von hyman; 08.05.2025, 05:49.
- Likes 1
Kommentar
-
Zitat von uzi10 Beitrag anzeigen
Wenn du dann eine komplette Lösung hast, bitte teile diese.
Ich werde mir noch den Hue Baustein anschauen und ansonsten über presets gehen. Via http API lassen sich auch presets in wled aufrufen. In Theorie bis zu 250. Diese sollten sich dann durchschalten lassen.
Kommentar
-
Zitat von Polytox Beitrag anzeigenDer lässt sich nicht virtuell anlegen. Das geht nur mit wirklichen Gruppenadressen.- Als Datenpunkt für den ColorPicker einen internen Datenpunkt verwenden, der keine getrennten GAs kennt.
- die Werte, die der X1 an die wled sendet auf Gruppenadressen legen und zusätzliche Status-GAs anlegen, die über eine Verbindung Eingangsbaustein - Ausgangsbaustein ihre Weiter weitergereicht bekommen. Der ColorPicker bekommt dann Datenpunkte mit jeweils zwei dieser GAs.
Kommentar
-
Ich denke ich habe eine halbwegs galante Lösung dafür gefunden ohne in der ETS KO anzulegen die dann zweckentfremdet irgendwo hinsenden um das ACK zu bekommen.
Die Prozent Geräte-Datenpunkte (ja dieser Mist im X1 der nicht benennbar ist) können im Colorpicker hinterlegt werden und ohne KNX Integration betrieben werden.
Mit diesen tut dann auch der Colorpicker was er soll. Das habe ich die letzte Stunde getestet. Da ich nicht plane die Farben per Taster zu verändern passt das für mich.
Einzig, dass der Colorpicker seinen Wert an die eingestellte Dimmung koppelt ist aktuell noch ein Problem.
Ist die Helligkeit 100%, dann sendet der Colorpicker 100 für tiefes rot. Ist die Helligkeit 50% dann sendet er für tiefes rot nur noch 50.
Entsprechend bekommt WLED dann nicht mehr den Farbcode 255 (Aus der Formel 100*2,55) sondern 127 (50*2,55 und abgerundet). Entsprechend schwach ist die Leuchtkraft.
Das führt dann den eigentlichen Dimmer relativ Adabsurdum weil die übergebene 127/0/0/0 (also für die RGBW Kanäle) dann als maximum nur halbe Leistung bringt. Stellt man den Dimmer dann wieder auf 100% dann bleibt die "Stärke" der Farbe bei 127/0/0/0. Heißt Helligkeit steht zwar auf 100% (auch im WLED), aber es leuchtet wenig (eben nur zur Hälfte wenn ne 127 an WLED übergeben wurde).
Würde man mit 100% die Farbe einstellen und dann dimmen, dann passt alles. Ist für mich aber nicht zufriedenstellend.
Aber ich wüsste nicht wie ich hier das verhalten des Colorpickers noch beeinflussen soll.
Außer eventuell die Werte miteinander zu dividieren und dann das Ergebnis wieder zu multiplizieren.
Also die 50% aus dem colorpicker mit den 50% aus der Helligkeit (die eben grad eingestellt ist) zu dividieren.
50/50 = 1 und das Ergebnis dann wieder auf Prozent zu rechnen. Also 1*100 = 100.
Für Mischfarben würde sich dann zB 20/50 = 0,4 ergeben. also * 0,4*100 = 40(%).
Finde ich aber auch nicht schön.
- Likes 1
Kommentar
-
Zitat von uzi10 Beitrag anzeigen
Wenn du dann eine komplette Lösung hast, bitte teile diese.
Anmerkung: Weißwert funktioniert nicht über den Schieberegler. Sondern man muss den Colorpicker auf weiß stellen. Da ich nicht plane das Kaltweiß zu nutzen werde ich das wohl erst lösen wenn ich ein anderes Projekt habe wo ich das benötige.
Prinzipiell habe ich in der Logik 3 Abschnitte.
An/Aus Schalten
Helligkeit ändern
Farbe ändern
Folgende Dinge werden benötigt:
Formelberechnung von hyman
Send Webrequest von z.B. splendid minds
4 Geräte Datenpunkte im X1 vom Typ Prozentwert
WLED im Netzwerk
Abschnitt An/Aus:
image.png
Bei mir ein virtueller Schalter, da ich im Test die WLED nur aus dem X1 geschalten habe. Physischer Taster kommt erst irgendwann noch.
Da der Send Webrequest den Trigger auf 1 braucht hab ich beim 0 Wert (=Ausschalten) den Wert aus dem Filter invertiert.
Oben wird also Aus gesendet und unten Ein.
Entsprechend die URL vom Send Webrequest bestücken mit HTTP-API von WLED (www.kno.wled.ge)
http://<WLEDIP>/win&T=0 für aus bzw. http://<WLEDIP>/win&T=1 für ein.
Abschnitt Helligkeit:
image.png
Die Dimmkorrektur kommt dann im Farbenteil zum tragen.
Ansonsten ein Wertgeber (kann ein virtueller Datenpunkt sein) oder eben aus irgendeinem Taster kommen. Gira erwartet dafür eigentlich einen Prozentwert. Bei mir ist es ein 8Bit Wert und ich hatte keine Lust mehr es gestern zu ändern. Falls also ein Prozentwert genommen wird entsprechend die Formel in Helligkeit skalieren anpassen.
image.png
Scaling habe ich fix als 2,55 hinterlegt und als Variable genutzt. Hyman hatte es hier irgendwo mit *2.55 getestet und es ging wohl auch.
Formel 1:
"http://<WLEDIP>/win&A="+Math.Floor({Scaleing:N}*{Helligkeit:I})
Scaling wird benötigt, da WLED einen Wert 0-255 für die Helligkeit erwartet. Via Math.Floor({Scaleing:N}*{Helligkeit:I}) wird dann der von der RGBW Kachel gesendete Prozentwert in den analog richtigen WLED-Wert gerechnet. Ich habe mich für Math.Floor entschieden (abrunden auf die nächste Ganzzahl). Prinzipiell sollte auch normales runden gehen. WLED meckert auch nicht bei einem Überlauf.
Formel 2:
{Helligkeit}!=0?1:0
Zur Bestimmung des Triggers der für den Webrequest Baustein benötigt wird. Ist Helligkeit ungleich 0 dann sende eine 1 (sprich trigger für Webrequest wird ausgelöst) Ist Helligkeit 0, dann Sende 0. Damit wird der Webrequest zwar mit der URL gefüttert, aber löst nicht aus, da Trigger = 0 ist. Ich hab den Ausgang 2 dann noch zusätzlich mit dem Schalter Verbunden. Dadurch ist der Schaltstatus auch "Aus" wenn auf 0 Prozent Helligkeit gedimmt wird bzw. Der Status "An" wenn man einen Dimmwert sendet. Sprich die Lampe geht dann bei 0 auch aus, bzw. an wenn ein Dimmwert eingestellt wird.
Abschnitt Farbe:
Wie geschrieben. Es werden 4 Geräte-Datenpunkte vom Typ Prozentwert benötigt. Variable Datenpunkte gehen nicht. Oder man hat eben ein entsprechendes Gerät im Bus hängen und kann es an einen wirkliches KO schicken... Gibt hier nicht und den Wert an nen anderen Prozentgeber zu schicken (der auf aktiv antwort senden steht) um das ACK zu bekommen wollte ich nicht.
image.png
Es gibt je einen Eingang für dir RGBW-Werte und einen für die Korrektur des dimmens.
Wie oben angesprochen hat der Colorpicker folgende Logik: Stelle ich die Dimmung auf 50, dann sende ich auch nur noch 50 für die Farbe als maximalwert.
Das resultiert in Kombination mit WLED dann darin, dass natürlich ein anderer skalierter Wert gesendet wird.
Nehmen wir als Beispiel an ich habe die Lampe auf 50% gedimmt und möchte tiefes Rot (255/0/0/0).
Dann gibt der Colorpicker folgende Werte aus:
Rot: 50
Grün: 0
Blau: 0
Weiß: 0
Heißt wir errechnen den Übertragungswert an WLED auf Basis der 50%. Es kommt dann zwar ein tiefes rot raus (127/0/0/0) aber nur mit halber Leuchtstärke.
Passt in dem Moment dann auch. Dimmt man jetzt aber auf 100% steht zwar die Helligkeit im WLED auf 100%, aber der Farbwert kennt trotzdem nur R=127. und leuchtet damit weniger als er könnte (nämlich 50%). Das dimmen unter 50% geht dann problemlos, aber drüber hat das Umstellen keine Funktion.
Liese sich umgehen indem man die Farbe nur ändert bei 100%. Fand ich aber doof.
Daher gibt es die Formel Dimmkorrektur als Eingang, gefüttert anhand des Helligkeitswerts. Nicht verwirren lassen. Ich nutze in der Formel schon ne Kommazahl, da ich den Helligkeitsschalter noch auf Prozent umbaue.
image.png
Formel:
{Helligkeit:N}==0?0:100/{Helligkeit}
Wenn der Helligkeitswert 0 ist übergebe 0. Wenn ein Wert abweichend 0 anliegt, dann errechne einen Skalierungsfaktor via 100/Helligkeit.
Heißt wenn die Lampe z.B. wie im Beispiel oben auf 50% steht, dann 100/50 = 2.
Dann hier der Abschnitt für die eigentliche Farbbestimmung:
image.png
Auch hier wieder fix definiert ein Scaling faktor von 2,55 um WLED mit entsprechen skalierten Werten zu füttern.
Ebenso die zuvor errechnete Dimmkorrektur.
Die ich dann auch einfach an einen Ausgang weiter reiche um dort festzustellen ob sich die Helligkeit (bzw der Wert für Dimmkorrektur) geändert hat.
Da ich dann die restlichen Werte nicht an WLED schicken will. Der neue Helligkeitswert komm schon an WLED über den oben gezeigten Abschnitt. Da ich die Dimmkorrektur allerdings in den anderen formeln zum rechnen brauche löst diese Änderung auch die eigentliche Berechnung aus (ohne, dass andere Werte (die zum Helligkeitswert passen) anliegen.) Wenn wir also davor bei 100% waren und zuvor 254 errechnet hatten, dann wird anhand dieser 254 multipliziert...Was eben falsch ist. Daher der Vergleich in Formel 4 ob der aktuelle Dimmkorrektur dem vorherigen entspricht. Sprich es eine Änderung am RGBW gab und nicht an der Helligkeit.
Für die eigentliche Farbübergabe ergibts sich damit:
Formel 1:
Hier wird als String die konkrete URL gebaut die der Webrequest rufen soll:
"http://<WLEDIP>/win&R=" + Math.Floor({Scaleing:N}*{Dimmkorrektur:N}*{Rot:N}) + "&G=" + Math.Floor({Scaleing}*{Dimmkorrektur:N}*{Grün:N}) + "&B=" + Math.Floor({Scaleing}*{Dimmkorrektur:N}*{Blau:N}) + "&W=" + Math.Floor({Scaleing}*{Dimmkorrektur}*{Weiß:N})
die Leerzeichen zwischen " + " sind verpflichtend!
Wir nehmen also unseren erhaltenen Rot-Wert, mutliplizieren ihn mit der 2,55 Skalierung und multiplizieren den Wert dann noch mit der Dimmkorrektur (und runden ab auf Ganzzahl. Auch hier könnte man wohl auch normal runden).
Das ergibt bei einer Leuchte die auf 100% und tief rot steht dann exemplarisch folgendes:
Scaleing (wobei das wohl Scaling sein müsste...): 2,55
Dimmkorrektur: 100/100 = 1
Rot: 100
Also Math.Floor(2,55*1*100) = 255
Für unser Beispiel mit 50% Leuchtkraft aber tief rot:
Scaleing: 2,55
Dimmkorrektur 100/50=2
Rot: 50
Also Math.Floor(2,55*2*50) = 255.
Sprich wir sind beides mal bei tief rot, mit vollem Farbwert und die Helligkeit wird über den Helligkeitsregler gesteuert im vollen Spektrum 0-100%.
Formel 2:
{Rot}!=0 ||{Blau}!=0||{Grün}!=0||{Weiß}!=0?1:0
Gibt es irgendwo einen Farbwert? Dann schicke 1. Gibts keine Farbwerte? Dann schicke 0. Steuert ob Farben an WLED gesendet werden. ISt also der Trigger für den Webrequest Farbe.
Formel 3:
{Dimmkorrektur}
Hilfsausgang um die Werte der Dimmkorrektur zu prüfen.
Formel 4:
_out3_ == _previousOut3_
Wie oben beschrieben, ob der aktuelle Dimmkorrektur dem vorherigen entspricht. Sprich es eine Änderung am RGBW gab und nicht an der Helligkeit.
Ausgang 2 und 4 sind dann noch mit einem Und-Gatter verbunden.
Ich möchte neue Farbwerte nur an den Webrequest schicken wenn etwas im Colorpicker gewählt wurde. Wurde nur die Helligkeit geändert (die ich aufgrund der Korektur um den Dimmwert auch mit dem Formelbaustein verbunden hab und welche somit die ganzen Rechnung auslöst die Helligkeit geändert wird) dann möchte ich nichts senden.
Das wurde jetzt irgendwie länger als erwartet...Falls noch fragen offen sind einfach melden.
Zuletzt geändert von Polytox; 09.05.2025, 09:36.
- Likes 3
Kommentar
-
Hallo miteinander,
ich habe ein Problem bei dem ich nicht weiterkomme!
Aktuell frage ich mit dem XML/JSON-Parser Baustein fuer den Gira X1 und der Current Weather Data 2.5 API aus Openweathermap u.a. die Daten fuer den Sonnenaufgang ab.
Die Daten werden mir im ISO-Format als Text angezeigt (siehe Anhang).
Gibt es eine Moeglichkeit mit dem Formelberechnungsbaustein diese Daten im LocalTime-Format angezeigt zu bekommen?
Screenshot 2025-05-25 214824.png
Kommentar
-
Ja, mit DateTime.Parse in ein Objekt verwandeln und dieses dann mit ToString wieder als Text ausgeben.
Kommentar
-
Hallo, gibt es derzeit Probleme mit dem JSON Parser?
Ich habe die Firmware upgedatet auf dem X1 und seit dem liefert die X1 Übersicht diese Meldung.
In der GPA beim Simulieren funktioniert alles problemlos.
Schöne Grüße
HerbertYou do not have permission to view this gallery.
This gallery has 1 photos.
Kommentar
-
Hallo Herbert, herzlich Willkommen bei den Aktiven im Forum!
die Fehlermeldung '4' is not a valid XML Name hat nichts mit dem Firmware Update zu tun, sondern liegt an den Daten. Siehe beispielsweise den Key im Text durch einen textuellen key ersetzen
Kommentar
-
Zitat von uzi10 Beitrag anzeigenwie stelle ich eine Fließkommazahl(zb Co2 in ppm) dar ohne den Kommastellen?
Kommentar
Kommentar