• Du musst dich registrieren, bevor du Beiträge verfassen kannst. Klicke auf Jetzt registrieren!, um den Registrierungsprozess zu starten. Registrierte User surfen werbefrei, können Suchen durchführen und sehen die volle Darstellung des Forums mit vielen anderen Unterforen!!!

Otto Wilde G32 | Smarthome

Das Leben könnte so einfach sein, wenn man alle richtig machen würde. Aber ich freue mich sehr, dass es "Leute" gibt, wie Dich Jörg.
Vielen Dank, dass hate ich überhaupt nicht beachtet.
Das Display zeigt jetzt die Temperaturen der Zonen direkt an.
:ola:
Ich werde nun noch einen Akku und Piepser nachrüsten. Du hattest ja einen mit 2000mAh vorgeschlagen. Einen größeren habe ich auch gerade gefunden, wobei ich nicht einschätzen kann, ob man den überhaupt benötigt.
Akku 3500mAh
Was hast Du für einen Piepser verwendet?

Danke und grüße Sven
 
Das Leben könnte so einfach sein, wenn man alle richtig machen würde. Aber ich freue mich sehr, dass es "Leute" gibt, wie Dich Jörg.
Vielen Dank, dass hate ich überhaupt nicht beachtet.
Das Display zeigt jetzt die Temperaturen der Zonen direkt an.
:ola:
Ich werde nun noch einen Akku und Piepser nachrüsten. Du hattest ja einen mit 2000mAh vorgeschlagen. Einen größeren habe ich auch gerade gefunden, wobei ich nicht einschätzen kann, ob man den überhaupt benötigt.
Akku 3500mAh
Was hast Du für einen Piepser verwendet?

Danke und grüße Sven
Super!
Ich bin eigentlich auch nur Benutzer von HA und ESPHome und kein Experte. Habe auch einfach nicht mehr alle Schritte im Kopf, die man vornehmen muss (das Alter ...).
Aber wahrscheinlich muss man das Display an HA 'anmelden', damit es per API auf HA zugreifen darf/kann.
Da müsste mal jemand eine vollständige Schritt für Schritt Anleitung machen. Am Besten mit möglichen Fehlern. Aber die Zeit ...
Akku: fürs Grillen reichen 2000mAh eigentlich immer. Bitte auf den Steckverbinder achten, Größe 1.25mm und Polung! Ich hatte schon mal einen verlinkt. Muss ich unbedingt mal auf Github hinterlegen.
Piepser: ich habe einen hier herumliegenden passiven Piezo-Piepser verwendet.
Eventuell kann ich heute Abend mal eine Liste mit Material auf Github stellen. Habe gerade nicht viel Zeit.
Grüße, Jörg.
 
Hallo zusammen,
ich habe gerade das Display soweit geflasht und das Gehäuse von Steffen gedruckt.
Dabei habe ich drei Herausforderungen.
1. Beim Gehäuse ist der "Stift" für den Taster recht dick, ich vermute, dass die Rückwand vom Display entfernt werden muss? Ich kann auch das Display nicht komplett in das Gehäuse einsetzen, auf der Seite des USB-C Anschlusses, steht es ca. 1,5mm hervor.
2. Ich habe beim Passwort für das WLAN meiner ioT Geräte ein " mit verwendet. Leider kann ich somit die YAML-Datei nicht mit ESPHome flashen.
wifi_ssid: "Home_IoT"
wifi_password: "Passwort123"456"
Ich habe jetzt erst einmal eine andere SSID genutzt, mit der ich auch übergreifend auf alles Geräte zugreifen kann. So wie ich es auch mit dem iPad oder PC mache.
3. Auf dem Display werden die Zonen und alles angezeigt, Einstellungen kann ich auch machen, aber leider bekomme ich keine "Daten" vom Grill. Im HomeAssistent kann ich komplett die Werte vom Grill einsehen.

Ich hoffe mal, das mir jemand hierbei weiterhelfen kann.

Grüße Sven
Hi Zusammen,
ist bei mir auch so. Ich sehe auch keine Daten. Nur die leeren Grafiken. In HA kommen die Daten vom Grill aber an.

VG Mike
 
Hi Zusammen,
ist bei mir auch so. Ich sehe auch keine Daten. Nur die leeren Grafiken. In HA kommen die Daten vom Grill aber an.

VG Mike
Hi Mike.
Bei mir lag das Problem, dass ich zwar unter dem ESPHome Builder ein Device angelegt hatte.
Zusätzlich muss aber unter "Geräte/Dienste" die Integration ESPHome noch installiert werden und ein Gerät hinzugefügt werden. Hierbei muss die IP des Displays angegeben werden.
 
Moin Mike.
Schau mal, ob der Nickname in der Yaml Datei auch dem des Grills entspricht.
Im HA sind ja die einzelnen Identitäten aufgeführt. Vielleicht passt da der Name einfach nicht. Wenn du das Display angeschlossen hast, kannst du dir ja einfach mal das Lok angucken und dann siehst du welche einzelnen Punkte er fragt und die kann man dann vergleichen.

Grüße, Sven
 
Weil es immer wieder Fragen gibt, habe ich mal eine Materialliste bei Github hinterlegt und auch einige Fotos dazu (in der Beschreibung des Displays!). Ich habe in den meisten Fällen keine Links angegeben (die veralten recht schnell) sondern Suchoptionen (Amazon, Ebay, Aliexpress, ...). Da sollte man immer etwas geeignetes finden. Bitte schaut mal nach, ob ich da noch etwas hinzufügen sollte. Beim Akku auf Polung achten!

Grüße, Jörg.
 
Hi fossi99,
das habe ich gemacht. Ich kann auch das Backlight ein und ausschalten. Aber Daten kommen leider nicht. Ich prüfe das aber noch mal.
VG Mike
Bitte im Debug-Log nachsehen (nach dem Programmieren über die Kommandozeile (USB oder OTA) wird das Debug-Log automatisch gestartet. Eventuell findet man dort den Grund.
 
Hallo zusammen,

ich möchte euch die fertige Home Assistant Integration für den Otto Wilde G32 vorstellen, die eine Steuerung und Überwachung des Grills über WLAN (mittels OWG-Account und Cloud) ermöglicht.

Meiner Einschätzung nach sind nun alle wesentlichen Funktionen implementiert. Eventuell gibt es noch Potenzial für kleinere optische Anpassungen. Falls euch aber noch etwas einfällt oder ihr Wünsche habt, was noch geändert oder ergänzt werden sollte, lasst es mich gerne wissen.

Hier findet ihr das Projekt auf GitHub:

https://github.com/zaubii/owg-g32-ha-integration

Eine detaillierte Installationsanleitung ist dort ebenfalls hinterlegt.
Ein kleiner Hinweis: Die Sensoren in Home Assistant übernehmen den Spitznamen des Grills als Teil ihrer Entitäts-ID. Es empfiehlt sich daher, diesen Namen vor der Einrichtung in der offiziellen OWG-App nach euren Wünschen anzupassen. Eine nachträgliche Änderung des Namens führt nämlich dazu, dass auch die Sensornamen in Home Assistant geändert werden.
Um die Kompatibilität mit @JBecker Jörgs Display-Lösung zu gewährleisten, werden die Sensoren zusätzlich auch mit ihren Standardnamen als "versteckte" Entitäten angelegt.

Ein praktisches Feature ist die optionale Einbindung eines Fritz!Box-Devicetrackers. Über das Zahnrad-Symbol in der Integration könnt ihr den Tracker für euren Grill hinterlegen. Die Integration aktiviert und deaktiviert dann automatisch die Kommunikation mit der OWG-Cloud, sobald der Grill im WLAN erscheint bzw. nach dem Ausschalten wieder offline geht. Ein besonderer Dank geht an dieser Stelle an @floh86 für diese clevere Idee.

Noch etwas: Ich möchte an dieser Stelle transparent machen, wie dieses Projekt entstanden ist: Weder die Dokumentation, noch das Changelog oder der eigentliche Code wurden von mir manuell geschrieben. Die gesamte Entwicklung erfolgte schrittweise im Dialog mit Gemini (Googles KI). Die Readme-Datei und das Changelog dienten dabei als "Gedächtnis" für die KI, wenn ich an einem neuen Abend die Arbeit fortgesetzt habe.
Obwohl ich in der Softwareentwicklung tätig bin, bin ich selbst kein aktiver Programmierer.
Es ist faszinierend, was heutzutage innerhalb eines Wochenendes und einiger Abende möglich ist. Als Ausgangspunkt für dieses Projekt diente eine Anfrage von @floh86 aus einem anderen Forum aus dem Jahr 2022, in der er bereits die wesentliche Grundlagenforschung geleistet hatte. Auch dir, Florian, gebührt großer Dank für diese Vorarbeit! Meine Rolle beschränkte sich im Wesentlichen darauf, die KI anzuleiten und die Ergebnisse zu prüfen.

Ich teile diese Entstehungsgeschichte vor allem als Ermutigung für euch alle. Vielleicht habt auch ihr ein Projekt im Kopf, das ihr bisher für unmöglich hieltet. Mit den modernen Werkzeugen von heute lohnt es sich, die Umsetzung auf eine ganz neue Art und Weise anzugehen. Nicht um Werbung für eine KI zu machen, sondern den Fortschritt als solches :)

Schönen Abend und

Beste Grüße

Chris

Hallo Chris,
sehr gute Entwicklung. Vielen Dank.

Ich bekomme Sie aber leider keine Verbindung hergestellt.
Der G32 ist im WLAN angemeldet und auch in der Fritzbox sichtbar.

Die Integration sendet immer wieder Requests los, aber es kommt keine Verbindung zustande.
In den Logs kommt auch keine Fehlermeldung.

Hast Du noch eine Idee woran das liegen kann?

Viele Grüße

Michael
 
Ich bin fast fertig ein schön gestyltes HA Dashboard für den G32 zu bauen und teile es gerne in den nächsten Tagen.

1757003955100.png
 
Hi Jörg,
Ich bin da leider kein Profi. Meinst du das?
Entschuldigung, war unterwegs.
Ja, das meine ich.
Danach kommt nichts mehr? Das ist eigentlich erst der Anfang. Immerhin wird erst einmal Kontakt zum Wifi aufgebaut. Du 'siehst' ja auch den G32 im HA, hast Du geschrieben.
Mir fällt da auch nicht mehr viel zu ein ...
Integrationen (G32 und ESPHome) neu laden, G32 muss mit der OW App via Wifi kommunizieren (aber Du siehst ja die Daten im HA, dann ist das so).
Vielleicht hat jemand anders noch eine Idee?

Grüße, Jörg.
 
Es war nun wirklich eine harte Nuss den G32 in Home Assistant zu integrieren.

Das Kernproblem war die WLAN Verbindung. Die habe ich bis vor einigen Tagen nie realisieren können. Ich habe dann diese Woche alles ausprobiert. Den Grill direkt in Richtung Fritzbox ausgerichtet, das 5Ghz Band der Fritzbox abgeschaltet, ein Firmware Update installiert und unzählige Male versucht den Grill neu einzurichten. Die Bluetooth Verbindung war hingegen nie ein Problem. Am Ende war die Lösung trivial. Ich habe einfach die OW App gelöscht und neu installiert. Danach konnte ich die WLAN Verbindung sofort und problemlos einrichten.

Das nächste Problem war die HA G32 Installation. Diese läuft aber heute auf einmal problemlos. Vermutlich habe zahlreiche Neustart zur Lösung geführt.

Die Home Assistant Visualisierung im OW Style scheint auch vollständig zu funktionieren.

Wenn der Grill nicht in Betrieb ist liefert die Integration, aber auf allen Entitäten "unknown" Werte. Das sieht nicht nur unschön aus, sondern sorgt bei den Charts auch für Probleme. Die komplette Lösung poste ich hier nun in einzelnen Schritten, damit auch Anfänger diese leicht nachbauen können.

Zur Info: Mein Grill hat den Namen Rheinfire. Der Name kann natürlich beliebig geändert werden, dann aber an allen Stellen im Code.

Viel Spaß mit der Visualisierung und vielen Dank an Chris für die G32 Integration.

Viele Grüße
Michael
 
Schritt 1
Wenn der Grill nicht in Betrieb ist sollen keine "unknown" Zustände der Entitäten im Dashboard angezeigt werden.

Hierzu muß nun die configuration.yaml editiert werden.
Wer dies noch nicht gemacht hat, fügt als bestes erst einmal die Zeile
template: !include template.yaml
in die configuration.yaml ein.

Danach muß die Datei template.yaml angelegt werden.

In diese Datei kommt dann der folgende Code:


Code:
sensor:
# Otto Wilde G32 Sensoren - Zustand "unknown" abfangen
  - name: "Rheinfire Zone 1 Safe"
    unique_id: rheinfire_zone_1_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_zone_1') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Zone 2 Safe"
    unique_id: rheinfire_zone_2_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_zone_2') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Zone 3 Safe"
    unique_id: rheinfire_zone_3_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_zone_3') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Zone 4 Safe"
    unique_id: rheinfire_zone_4_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_zone_4') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Probe 1 Safe"
    unique_id: rheinfire_probe_1_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_probe_1') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Probe 2 Safe"
    unique_id: rheinfire_probe_2_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_probe_2') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Probe 3 Safe"
    unique_id: rheinfire_probe_3_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_probe_3') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Probe 4 Safe"
    unique_id: rheinfire_probe_4_safe
    unit_of_measurement: "°C"
    state: >
      {% set v = states('sensor.rheinfire_probe_4') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Gas Tara Weight Safe"
    unique_id: sensor.rheinfire_gas_tara_weight_safe
    unit_of_measurement: "kg"
    state: >
      {% set v = states('sensor.rheinfire_gas_tara_weight') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Gas Original Capacity Safe"
    unique_id: sensor.rheinfire_gas_original_capacity_safe
    unit_of_measurement: "kg"
    state: >
      {% set v = states('sensor.rheinfire_gas_original_capacity') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Gas Weight Safe"
    unique_id: sensor.rheinfire_gas_weight_safe
    unit_of_measurement: "kg"
    state: >
      {% set v = states('sensor.rheinfire_gas_weight') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Gas Level Safe"
    unique_id: sensor.rheinfire_gas_level_safe
    unit_of_measurement: "%"
    state: >
      {% set v = states('sensor.rheinfire_gas_level') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized'] %}
        0
      {% else %}
        {{ v | float(0) }}
      {% endif %}
  - name: "Rheinfire Light On Safe"
    unique_id: binary_sensor.rheinfire_light_on_safe
    state: >
      {% set v = states('binary_sensor.rheinfire_light_on') %}
      {% if v in ['unknown', 'unavailable', 'none', 'uninitialized', 'kein Licht'] %}
        off
      {% elif v == 'Licht' %}
        on
      {% else %}
        off
      {% endif %}
binary_sensor:
  - name: "Rheinfire Firebox Safe"
    unique_id: rheinfire_firebox_safe
    device_class: door
    state: >
      {% set v = states('binary_sensor.rheinfire_firebox_open') %}
      {% if v in ['unknown','unavailable','none','uninitialized'] %}
        off
      {% elif v == 'on' %}
        on
      {% else %}
        off
      {% endif %}
    attributes:
      icon_color: >
        {% if is_state('binary_sensor.rheinfire_firebox_open', 'on') %}
          rgb(85, 120, 155)   # Blau aktiv
        {% else %}
          rgb(128, 128, 128) # Grau inaktiv
        {% endif %}
 
Schritt 2 - Notwendige Add-on in Home Assistant installieren.

Die folgenden Add-ons müssen über den HACS (Home Assistant Community Store) installiert werden:

custom:stack-in-card
custom:flex-horseshoe-card
custom:mini-graph-card
custom:multiple-entity-row
custom:gap-card
custom:mushroom-entity-card

Wer den HACS an sich noch nicht installiert hat findet dazu zahlreiche Anleitungen bei youtube.
 
Schritt 3 - Dashboard Visualisierung erstellen

Im Dashboard ein neues Element "Manuell" anlegen und den folgenden Code einfügen:


Code:
type: custom:stack-in-card
mode: vertical
cards:
  - type: heading
    icon: mdi:gas-burner
    heading: Otto Wilde G32 Connected
    heading_style: title
    card_mod:
      style: |
        ha-card > div {
          padding-left: 12px !important;   /* Icon + Text nach rechts */
        }
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_zone_1_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Zone 1
            area: Grillrost
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_zone_2_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Zone 2
            area: Grillrost
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_zone_3_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Zone 3
            area: Grillrost
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_zone_4_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Zone 4
            area: Grillrost
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:mini-graph-card
        entities:
          - entity: sensor.rheinfire_zone_1_safe
            name: Zone 1
            decimals: 1
            show_graph: true
            color: "#990000"
          - entity: sensor.rheinfire_zone_2_safe
            name: Zone 2
            decimals: 1
            show_graph: true
            color: grey
          - entity: sensor.rheinfire_zone_3_safe
            name: Zone 3
            decimals: 1
            show_graph: true
            color: "#990000"
          - entity: sensor.rheinfire_zone_4_safe
            name: Zone 4
            decimals: 1
            show_graph: true
            color: grey
        name: null
        icon: mdi:chart-line
        unit: °C
        height: 80
        hours_to_show: 6
        update_interval: 1
        line_width: 1
        smoothing: 0.7
        curve: monotone
        aggregate_func: avg
        group_by: hour
        show:
          fill: fade
          icon: false
          name: false
          state: false
          labels: false
          legend: false
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:gap-card
        height: 30
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_probe_1_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Probe 1
            area: KT-Fühler
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_probe_2_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Probe 2
            area: KT-Fühler
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_probe_3_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Probe 3
            area: KT-Fühler
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
      - type: custom:flex-horseshoe-card
        card_mod:
          style: |
            ha-card {
              left: 0%;
              width: 100%;
            }
        entities:
          - entity: sensor.rheinfire_probe_4_safe
            decimals: 0
            icon: mdi:temperature-celsius
            name: Probe 4
            area: KT-Fühler
        show:
          scale_tickmarks: true
          horseshoe_style: lineargradient
        layout:
          states:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 40
              styles:
                - font-size: 3.5em;
          names:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 58
              styles:
                - font-size: 2em;
          areas:
            - id: 0
              entity_index: 0
              xpos: 50
              ypos: 76
              styles:
                - font-size: 1.5em;
                - opacity: 1;
        horseshoe_state:
          color: "#db4437"
        horseshoe_scale:
          min: 0
          max: 500
          color: "#990000"
          width: 2
        color_stops:
          "0": "#db4437"
          "500": "#db4437"
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:mini-graph-card
        entities:
          - entity: sensor.rheinfire_probe_1_safe
            name: Probe 1
            decimals: 1
            show_graph: true
            color: "#990000"
          - entity: sensor.rheinfire_probe_2_safe
            name: Probe 2
            decimals: 1
            show_graph: true
            color: grey
          - entity: sensor.rheinfire_probe_3_safe
            name: Probe 3
            decimals: 1
            show_graph: true
            color: "#990000"
          - entity: sensor.rheinfire_probe_4_safe
            name: Probe 4
            decimals: 1
            show_graph: true
            color: grey
        name: null
        icon: mdi:chart-line
        unit: °C
        height: 80
        hours_to_show: 6
        update_interval: 1
        line_width: 1
        smoothing: 0.7
        curve: monotone
        aggregate_func: avg
        group_by: hour
        show:
          fill: fade
          icon: false
          name: false
          state: false
          labels: false
          legend: false
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: entities
        entities:
          - type: custom:multiple-entity-row
            entity: sensor.rheinfire_gas_tara_weight_safe
            name: Gasflasche
            icon: mdi:gas-cylinder
            show_state: false
            secondary_info: false
            entities:
              - entity: sensor.rheinfire_gas_tara_weight_safe
                name: TARA
                unit: kg
                format: precision1
                styles:
                  font-weight: bold
              - entity: sensor.rheinfire_gas_original_capacity_safe
                name: FÜLLGEWICHT
                unit: kg
                format: precision1
                styles:
                  font-weight: bold
              - entity: sensor.rheinfire_gas_weight_safe
                name: IST-GEWICHT
                unit: kg
                format: precision1
                styles:
                  font-weight: bold
            card_mod:
              style:
                hui-generic-entity-row:
                  $: |
                    state-badge {
                      display: none;
                    }
                    .info {
                      margin-left: -18px; /* Name nach links */
                    }
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:bar-card
        entities:
          - entity: sensor.rheinfire_gas_level_safe
            icon: mdi:gas-cylinder
            name: Füllmenge
            target: 100
        height: 20
        severity:
          - color: "#990000"
            from: 0
            to: 4.99
          - color: "#e09c3b"
            from: 5
            to: 24.99
          - color: "#e6e22e"
            from: 25
            to: 49.99
          - color: "#8fb935"
            from: 50
            to: 74.99
          - color: "#77943a"
            from: 75
            to: 100
        entity_row: true
        positions:
          icon: false
          indicator: false
          name: outside
          value: inside
        show_value: true
        width: 75%
        card_mod:
          style: |
            :host {
              padding-right: 15px;
              padding-bottom: 10px;
            }
            bar-card-value {
              display: flex !important;
              justify-content: center !important;  /* horizontal zentrieren */
              align-items: center !important;      /* vertikal zentrieren */
              width: 100% !important;              /* ganze Balkenbreite */
              color: white !important;             /* Textfarbe */
              font-weight: bold;
            }
  - type: custom:stack-in-card
    mode: horizontal
    cards:
      - type: custom:mushroom-entity-card
        entity: binary_sensor.rheinfire_firebox_safe
        name: Grillhaube
        icon: mdi:treasure-chest
        card_mod:
          style:
            mushroom-shape-icon$: |
              .shape {
                background: none !important;
                box-shadow: none !important;
              }
      - type: custom:mushroom-entity-card
        entity: sensor.rheinfire_light_on_safe
        name: Grillbeleuchtung
        icon: mdi:wall-sconce-flat
        device_class: light
        card_mod:
          style:
            mushroom-shape-icon$: |
              .shape {
                background: none !important;
                box-shadow: none !important;
              }
card_mod:
  style: |
    ha-card {
      --ha-card-border-width: 0px;
    }
    /* Abstand zwischen den inneren Karten reduzieren */
    ha-card {
      --stack-card-gap: 0px;   /* Standard sind ca. 8-12px */
    }
 
Zurück
Oben Unten