ESP-Home Display ili9xxx und Touch xpt2046

Hallo Zusammen,
ich hab mein Projekt von vor zwei Wochen (siehe hier: ESP mit DHT und Display, Jemand Ideen?) inzwischen erweitert und zeige nicht nur Temperatur und Luftfeuchte, sondern auf mehreren Seiten noch diverse andere Werte an.
Dazu noch zwei Fragen.

  1. Kann man in abhängigkeit des Wertes einer Variable die Textfarbe ändern?
    lambda: |-
      it.strftime(80, 2, id(font1), my_red, "%H:%M", id(homeassistant_time).now());

Statt dem “my_red” bräuchte ich da ne Bedingung. Wie mache ich das?

  1. Ich kann zwar meine Seiten auf dem Diplay durch tippen auf das Touchdisplay umschalten, aber ich hab noch nicht herausgefunden wie man das Tippen auf eine bestimmte Stelle auswertet.
    Auf XPT2046 Touch Screen Controller (Updated version) — ESPHome steht dazu auch nichts.
    Weiß Jemand wie das geht?

Danke!

Warum funktioniert zB das nicht?

        lambda: |-
          if (id(ha_power) > 0) {
            it.printf(200, 30, id(font3), my_red, "%.0f W", id(ha_power).state); 
          }  
          if (id(ha_power) < 0) {
            it.printf(200, 30, id(font3), my_green, "%.0f W", id(ha_power).state);
          }  

Der Text wird immer in rot angezeigt.

So, das mit der Textfarbe habe ich inzwischen raus gefunden.
Es hat “.state” gefehlt.

          if (id(ha_power).state > 0) {
            it.printf(200, 30, id(font3), my_red, "%.0f W", id(ha_power).state); 
          }  
          if (id(ha_power).state < 0) {
            it.printf(200, 30, id(font3), my_green, "%.0f W", id(ha_power).state);
          }  

Bleibt die Frabe mit dem Touchscreen.
Alles was ich auf esphome.io und diversen Foren finde funktioniert nicht.
Nutze das wirklich Niemand?

Du zeichnest dir auf das Display einen Rahmen wo dann gedrückt werden soll.
Dann suchst du Werte für x und y die Touch liefert.
Achtung Falle: Bei meinem Display ist 0/0 links oben. Für Touch ist es links unten. Damit du nicht wahnsinnig wirst kannst du mit

transform:
    mirror_x: false
    mirror_y: true
    swap_xy: false

mirror_y: true das so ändern, dass auch beim Touch links oben 0/0 ist.
Ob dein Feld getroffen wurde musst du abfragen.
Du kannst natürlich nicht genau ein Pixel treffen und musst daher eine Fläche abfragen (die ein wenig kleiner als dein Rahmen sein sollte).

binary_sensor:
  - platform: touchscreen
    id: Feld 1
    x_min: 0
    x_max: 79
    y_min: 0
    y_max: 79
    on_press:
    - logger.log: "Feld 1 getroffen"