ESP-Home / Display / Entitätsabhängige Anzeige

Guten Morgen zusammen 😊

Ich hab mal wieder nen Knoten im Kopf und hoffe auf eure Hilfe 😊

Ich habe ein Display, auf dem ich mir folgendes im Wechsel von 10 Sekunden anzeigen lasse:

Page 1:
- Zustand Steckdose Waschmaschine (an/aus)
- aktuelle Wattzahl Waschmaschine

Page 2:
- Zustand Steckdose Trockner (an/aus)
- aktuelle Wattzahl Trockner

Nun möchte ich das Ganze abhängig davon anzeigen, ob und was gerade in Betrieb ist. Indikator soll der Zustand der Steckdose sein.

Aber wie mach ich das?

Greetz
Günni
 
Page 1:
- Zustand Steckdose Waschmaschine (an/aus)
- aktuelle Wattzahl Waschmaschine

Page 2:
- Zustand Steckdose Trockner (an/aus)
- aktuelle Wattzahl Trockner

Nun möchte ich das Ganze abhängig davon anzeigen, ob und was gerade in Betrieb ist. Indikator soll der Zustand der Steckdose sein.

Guten Morgen zurück,

ich habe hier auch einen Seitenwechsel nach Zeit, und zusätzlich nur bestimmte Seiten, wenn ein Taste betätigt wurde.
Habe mich nach:
https://esphome.io/components/display/index.html
gerichtet, da nach:
Code:
on_...:
  - display.page.show: page1

  # Templated
  - display.page.show: !lambda |-
      if (id(my_binary_sensor).state) {
        return id(page1);
      } else {
        return id(page2);
      }

Mein Code sieht so aus:

Code:
            - if:
                condition:
                  lambda: |-
                    return ((int)id(zaehler_next_page) == 0);
                then:
                  - display.page.show: page1

Bei return müßtest du dann deinen Sensor benutzen.
Vielleicht kannst du dir ja was zusammen basteln.
Gruß
 
Vielen Dank für deinen Tipp, die Seite hatte ich auch schon gefunden, aber ich krieg es irgendwie nicht im Kopf sortiert....

Könntest du deinen Code mal komplett posten ? Dann kann ich es mir bestimmt ableiten :)
 
Könntest du deinen Code mal komplett posten ? Dann kann ich es mir bestimmt ableiten :)
Hallo,

das wollte ich eigentlich vermeiden, sind über 700 Zeilen Durcheinander, wo ich alles Mögliche teste.

Ich denke für deine Zwecke könnte dies relevant sein:

YAML:
text_sensor:
#   *** importiert aus HASS ***
  - platform: homeassistant
    name: "bewegung_flur"
    id: bewegung_flur
    entity_id: binary_sensor.bewegungssensor_flur_motion
    on_value:
      then:
        - if:
            condition:
              lambda: |-
                return (x == "on");
            then:
              - component.update: my_display
              - switch.turn_on: backlight
              - lambda: |-
                  id(zaehler_backlight_time) = 0;

Je nachdem was du für einen Sensor hast zum Auslösen, unter sensor: oder text_sensor: einlesen.
Bedingung prüfen, unter then deine pages ansprechen.

Hier mal der Aufruf von drei Seiten nach Bedingung, hier wenn eine Taste betätigt wurde.

YAML:
interval:
  - interval: 10s
    then:
      - if:
          condition:
            lambda: |-
              return ((int)id(taste_1_toggle) == 1);
          then: 
            - lambda: |-
                id(zaehler_next_page) += 1;
            - if:
                condition:
                  lambda: |-
                    return ((int)id(zaehler_next_page) > 2);
                then:  
                  - lambda: |-
                      id(zaehler_next_page) = 0;
            - if: 
                condition:
                  lambda: |-
                    return ((int)id(zaehler_next_page) == 0);
                then:
                  - display.page.show: page1
            - if: 
                condition:
                  lambda: |-
                    return ((int)id(zaehler_next_page) == 1);
                then:
                  - display.page.show: page3
            - if: 
                condition:
                  lambda: |-
                    return ((int)id(zaehler_next_page) == 2);
                then:
                  - display.page.show: page5                     
            - lambda: |-
                id(zaehler_backlight_time) = 0;

Ich hoffe das hilft dir weiter.
Gruss
 
Zuletzt bearbeitet:
Vielen Dank, ich schau es mir mal an…. 😊

Ich brauche halt eine Funktion, die mir im Zweifelsfall beides anzeigt 🙄

Also entweder
- nur Seite 1 ODER nur Seite 2
- oder Seite 1 UND Seite 2 mit 10 Sekunden Pause

halt in Abhängigkeit vom Status der Steckdosen

Bin da grad noch n bisschen verwirrt….
 
Ich brauche halt eine Funktion, die mir im Zweifelsfall beides anzeigt 🙄

Also entweder
- nur Seite 1 ODER nur Seite 2
- oder Seite 1 UND Seite 2 mit 10 Sekunden Pause

halt in Abhängigkeit vom Status der Steckdosen

Hallo,

hat etwas länger gedauert als erwartet.
Auch ohne Intervall, da habe ich jetzt auch keine Lust mehr.
Aber ich denke, das kannst du dir dann ja alles anpassen.

Im Mom werden 4 Seiten angezeigt, Nr. 1 und Nr. 2 je nach Steckdose, Nr. 3 wenn beide ein sind,
Nr. 4 wenn beide aus sind.

Ich habe hier Sensoren, die die Leistung liefern.
Sie werden von Home Assitant importiert.
Sobald die Leistung größer 0 wird, werden entsprechend Binär-Sensoren gesetzt.
Damit wird dann errechnet, welche Seite angezeigt werden soll.

Nicht groß getestet, aber es klappert. Hoffe du kannst es brauchen.
Gruß

YAML:
binary_sensor:
  - platform: template
    name: "Steckdose 8 ein"
    id: steckdose_8_ein
    lambda: |-
      if (id(steckdose_8).state > 0) {
        return true;
      } else {
        return false;
      }   

  - platform: template
    name: "Steckdose 9 ein"
    id: steckdose_9_ein
    lambda: |-
      if (id(steckdose_9).state > 0) {
        return true;
      } else {
        return false;
      }

sensor:
  - platform: homeassistant
    name: "Steckdose 8"
    entity_id: sensor.deine_steckdose_1
    id: steckdose_8

  - platform: homeassistant
    name: "Steckdose 9"
    entity_id: sensor.deine_steckdose_2
    id: steckdose_9

  - platform: template
    name: "pageauswahl"
    id: pageauswahl
    lambda: |-
      return (id(steckdose_8_ein).state + (id(steckdose_9_ein).state *2));   
    update_interval: 1s


interval:
  - interval: 1s
    then:
      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 0);
          then:
            - display.page.show: page4 
      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 1);
          then:
            - display.page.show: page1
      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 2);
          then:
            - display.page.show: page2
      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 3);
          then:
            - display.page.show: page3
 
Entschuldige, dass ich mich jetzt erst melde...
Vielen Dank für deine Hilfe, ich habe ein wenig angepasst und vom Prinzip her funktioniert es.

Nur die Seitenanzeige klappt nicht so, wie es soll...

Ich habe folgendes bei mir:
Page1: Waschmaschine
Page2: Trockner
Page3: Müllabfuhrtermine

Ich brauche nun folgendes:

- Wenn Steckdose Waschmaschine an UND Steckdose Trockner aus, dann zeige Page1 , warte 5s, zeige Page3, von vorne

- Wenn Steckdose Waschmaschine aus UND Steckdose Trockner an, dann zeige Page2 , warte 5s, zeige Page3, von vorne

- Wenn Steckdose Waschmaschine aus UND Steckdose Trockner aus, dann zeige nur Page3

- Wenn Steckdose Waschmaschine an UND Steckdose Trockner an, dann zeige Page1, warte 5s, zeige Page2, warte 5s, zeige Page3, von vorne



Ich habe schon einiges probiert und im Netz gesucht, aber krieg es nicht hin.... geht das überhaupt ?

Greetz
Günni
 
Hallo,

jo, geht, bestimmt auch eleganter, aber wenns funktioniert.
Habe das aber jetzt nicht bis zum geht nicht mehr getestet.
Hier mal ein Entwurf:

Aufbauend auf meinem letzten Geschriebsel:
- habe eine globals "zaehler" erstellt
- sensor und binary_sensor unverändert gelassen
- alles unter interval 1s weg, dafür interval 5s neu aufgebaut
- der zaehler wird alle 5 Sekunden erhöht und geht je nach pageauswahl von 1 bis 3
- dann wird abgefragt welche pageauswahl vorliegt
- bei 0 soll Seite 3 dauernd angezeigt werden, deswegen da keine zaehler Abfrage nötig
- bei pageauswahl 1,2 oder 3 wird der zaehler abgefragt, die entsprechende Seite angezeigt (1,3 oder 2,3 oder 1,2,3)
- dann zaehler erhöht, nächste Abfrage
- wenn fertig zaehler auf 0, Wiederholung

Code:
globals:
  - id: zaehler
    type: int
    initial_value: '0'



interval:
  - interval: 5s
    then:
        
      - lambda: |-
          id(zaehler) += 1;



      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 0);
          then:
            - display.page.show: page3
            - lambda: |-
                id(zaehler) = 0;



      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 1);
          then:
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 1);
                then:
                  - display.page.show: page1
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 2);
                then:
                  - display.page.show: page3
                  - lambda: |-
                      id(zaehler) = 0;



      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 2);
          then:
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 1);
                then:
                  - display.page.show: page2
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 2);
                then:
                  - display.page.show: page3 
                  - lambda: |-
                      id(zaehler) = 0;



      - if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 3);
          then:
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 1);
                then:
                  - display.page.show: page1
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 2);
                then:
                  - display.page.show: page2
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 3);
                then:
                  - display.page.show: page3
                  - lambda: |-
                      id(zaehler) = 0;


Hoffe ich hab nichts durcheinader gebracht, bei mir klappt es.
Gruss
 
Guten Morgen :)

Vielen vielen vielen Dank für deine Mühe :) Da wäre ich alleine nie drauf gekommen.... es funktioniert einwandfrei :)

Jetzt ist da nur noch eine Sache: Wenn ich nicht nur 3 Seiten habe, sondern irgendwann 4,5,6..... wie zeige ich die dann nach Seite 3 auch an ?
Also entitätsabhängig nur Seite 1 und 2, alle anderen sollen immer mit durchlaufen.....

Und kann ich dir irgendwas Gutes tun für deine ausführliche Hilfe ? n 10er für n Eis per Paypal? Dann schick mir bitte deine Paypal-Adresse als PN :)
 
Ich denke, ich habs selber hinbekommen :)
Hier am Beispiel von Pageauswahl = 3
Code:
- if:
          condition:
            lambda: |-
              return (id(pageauswahl).state == 3);
          then:
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 1);
                then:
                  - display.page.show: page1
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 2);
                then:
                  - display.page.show: page2
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 3);
                then:
                  - display.page.show: page3
            - if:
                condition:
                  lambda: |-
                    return (id(zaehler) == 4);
                then:
                  - display.page.show: page4
                  - lambda: |-
                      id(zaehler) = 0;

Einfach einen Zwischenschritt einfügen und es funzt :)
Manchmal dauert es bei mir im Kopf ein bisschen länger, bis es KLICK macht...

Nochmal vielen Dank für deine Hilfe :)

Greetz
Günni
 
Zurück
Oben