[FTUI3] Color Mapping gegen existierendes Mapping

Begonnen von LordVoodoo, 24 April 2024, 11:22:02

Vorheriges Thema - Nächstes Thema

LordVoodoo

Hallo,

ich möchte mir eine Kalenderansicht im Schachbrettmuster bauen. Dazu möchte ich den Feld-Wert gegen ein existierendes Reading vergleichen:

Konkret:
Haus_Kalenderansicht:row_4_column_1 - 23.04.2024
Haus_Kalenderansicht:row_4_column_2 - 24.04.2024
Haus_Kalenderansicht:current_date - 24.04.2024

in FTUI3 würde ich jetzt schreiben:
[color]="Haus_Kalenderansicht:row_4_column_2 | map('Haus_Kalenderansicht:current_date:primary, .*:grey')"

Klappt nur leider nicht, was auch logisch ist, schon wegen des Doppelpunktes. Bevor ich mir das vorberechne, wollte ich sicher stellen, dass es nicht mit Bordmitteln geht.

Falls nicht, sehe ich zwei Möglichkeiten:

1. Ein Flag setzen und über eine Substr-Funktion auslesen.

2. Mittels JS-Funktion das aktuelle Datum ermitteln, vergleichen und true/false zurückgeben.

yersinia

#1
Ich denke, dass es nicht so einfach mit Bordmitteln funktionieren würde.

Ich würde auch eher zu einem userReading oder reading-spezifische Farbdefinition im FHEM-Device raten, da ansonsten die Berechnung auf FTUI3-Seite erfolgt und einiges an Ressourcen kosten könnte. Insbesondere, da die Prüfung bei jedem refresh und für jeden Tag des Kalenderblattes durchgeführt wird. Da kann es effizienter sein, den color-wert aus FHEM zu übernehmen. Auf FHEM-seite musst du eh nur einmal täglich den Farbwert entsprechend berechnen.

Immerhin setzt du ja auch das Reading irgendwie:
Haus_Kalenderansicht:current_date - 24.04.2024demnach würde ich auch dynamisch ein Reading in etwa
Haus_Kalenderansicht:row_4_column_1_color grey
Haus_Kalenderansicht:row_4_column_2_color primary
generieren und in FTUI3 dann
[color]="Haus_Kalenderansicht:row_4_column_2_color"nutzen.

Allerdings geht es auch in FTUI3, als grober Lösungsansatz:
[color]="Haus_Kalenderansicht:row_4_column_2 | v=>this.v=v; Haus_Kalenderansicht:current_date | t=>t===this.v | map('true:primary, false:grey')"
Evtl fällt @mr_petz noch eine bessere Lösung ein. :)


@setstate: ggf wäre eine pipe
isToday()sinnvoll?
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

LordVoodoo

Ich habe mich den Abend abgemüht am Lösungsansatz von Yersinia, leider ohne Erfolg.

[color]="Haus_Kalender_Ansicht:row_3_column_3 | caldate => this.caldate = caldate; Haus_Kalender_Ansicht:current_date | today => today === this.caldate | map('true:ok, false:error')"

yersinia

Zitat von: LordVoodoo am 25 April 2024, 00:18:14[color]="Haus_Kalender_Ansicht:row_3_column_3 | caldate => this.caldate = caldate; Haus_Kalender_Ansicht:current_date | today => today === this.caldate | map('true:ok, false:error')"
komisch, sieht irgendwie nicht nach
[color]="Haus_Kalenderansicht:row_4_column_2 | v=>this.v=v; Haus_Kalenderansicht:current_date | t=>t===this.v | map('true:primary, false:grey')"aus. Hast du es genauso probiert?
Mit den spärlichen, von dir bisher zur Verfügung gestellten Device-Information funktioniert dies bei mir.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

LordVoodoo

Dann probiere ich das nochmal aus, danke fürs Ausprobieren.

Diese ,,Kurzschreibweise" mit => macht mir Probleme im Verständnis.

Die Anweisung: t=>this.t=t, bedeutet eigentlich ,,nur", Stelle die Variable ,,t" im (lokalen) Umfeld der Ausführung bereit. Langform wäre:
let var t;
function t_assign(t)
{
  this.t = t;
}

Korrekt?

Eine Frage noch? Wieso nutzt Du ,,t" und ,,v"? Für Today und Value? Sind die frei gewählt oder tiefere Bedeutung?

yersinia

Ja, soweit ich das verstanden habe ist das korrekt. Den Vorschlag hab ich aus mr_petz' Beiträgen aus dem Haupt-Thread übernommen. Möglicherweise musst du noch klammern wegen der Funktion:
[color]="Haus_Kalenderansicht:row_4_column_2 | (v)=>this.v=v; Haus_Kalenderansicht:current_date | (t)=>t===this.v | map('true:primary, false:grey')"Grundsätzlich musst du Werte über die pipe an die Funktion übergeben um später den aktuellen Readings-Wert mit einem weiteren Readings-Wert zu vergleichen; dies kann afaik FTUI3 nicht von Haus aus. Daher erst v bilden und später mit t vergleichen; die Bezeichnungen habe ich der Kürze wegen gewählt (value, today). Zum Debuggen würde ich die Pipe-Kette sukzessive aufbauen und debuggen. Genau genommen wird auch nur ein String-Vergleich durchgeführt, was bei Datumswerten relativ schlampig, aber für die gegebenen Bedingungen uU ausreichend, ist. Nichtsdestotrotz halte ich eine Lösung auf FHEM-Seite für besser.
viele Grüße, yersinia
----
FHEM 6.3 (SVN) on RPi 4B with RasPi OS Bullseye (perl 5.32.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl