ESPHome / Display / Grafik abhängig von Wert anzeigen

Hy zusammen,

ich hab mal wieder nen Knoten im Hirn und krieg ihn nicht weg....

Was möchte ich ? Eine Grafik auf meinem Display darstellen (rot oder grün), abhängig von einem anderen Wert (Stromverbrauch mehr oder weniger als 5 Watt)

Die Grafiken sind beide definiert und hochgeladen, der Stromverbrauch wird auch abgerufen und schon auf dem Display dargestellt.

Wenn ich aber nun in der yaml folgenden Code verwende:
Code:
if (id(waschmaschine_power).state.c_str() > "5") {
            it.image(100, 103, id(my_waschmaschine_gruen));
          } else {
            it.image(100, 103, id(my_waschmaschine_rot));
          }

wird mir nur die grüne Grafik angezeigt... egal ob Power größer oder kleiner 5 Watt....

Wo liegt mein Denkfehler....?

Greetz
Günni
 
Ich würde auch tippen, dass es daran liegt, dass du Strings vergleichst. Damit kann ESPHome nicht "rechnen".
 
Die 5 steht in "" und ist damit ein String.
Man könnte zwar abfragen, ob Entität = "5" ist, aber das löst halt nur aus, wenn es exakt 5 ist und nichts anderes.
 
Ja, dann kommt in rot:
Code:
Compiling .pioenvs/esp32-tft-3-2/src/main.cpp.o
/config/esphome/esp32-tft-3-2.yaml: In lambda function:
/config/esphome/esp32-tft-3-2.yaml:163:38: error: no match for 'operator>' (operand types are 'std::__cxx11::string' {aka 'std::__cxx11::basic_string<char>'} and 'int')

und danach 100000 Fehlermeldungen in gelb.....
 
Lösung gefunden...

waschmaschine_power war als text_sensor definiert
Die Anzeige der aktuellen Power auf dem Display mit
Code:
it.printf(315, 225, id(font2), id(my_white), TextAlign::BASELINE_RIGHT, "%s Watt", id(waschmaschine_power).state.c_str());
hat ja auch super funktioniert, nur konnte der Wert nicht auf "Größe" verglichen werden, da es keine Zahl war....

Mit
Code:
if (atoi(id(waschmaschine_power).state.c_str()) > 5) {
            it.image(100, 103, id(my_waschmaschine_gruen));
          } else {
            it.image(100, 103, id(my_waschmaschine_rot));
          }
funktioniert nun aber alles wie es soll :)

Greetz
Günni
 
Ähm
Die 5 steht in "" und ist damit ein String.
Was ist daran nicht zu verstehen ?

Aber egal. Wenns es ja nun geht, ist ja gut.
 
Wenn man weiß, was ein String ist, was für "Eigenschaften" er hat und wie man ihn verwenden kann, hilft einem die Aussage schon.
Wenn man das aber nicht weiß (so wie ich), nützt einem die Aussage relativ wenig....
Abgesehen davon hatte ich es auch ohne die "" versucht und es hat auch nicht geklappt.

Letztendlich bin ich über die Fehlermeldung und ein englischsprachiges Forum auf den entscheidenden Hinweis gekommen.

Man muss immer daran denken, dass hier nicht alle den gleichen Wissensstand haben...
Eine Aussage a la "Du vergleichst einen Textwert mit einem numerischen Wert und das geht nicht" hätte mir eher geholfen, weil leichter verständlich :)

Aber wie du schon sagst, es funktioniert nun und das ist die Hauptsache :)
 

Letzte Anleitungen

Statistik des Forums

Themen
6.134
Beiträge
59.640
Mitglieder
6.197
Neuestes Mitglied
mkutzke
Zurück
Oben