Xenia DBL : Schnittstellen / APIs für Home-Automation und Apps

Diskutiere Xenia DBL : Schnittstellen / APIs für Home-Automation und Apps im Espresso- und Kaffeemaschinen Forum im Bereich Maschinen und Technik; Hier ein neuer, separater Thread für die Themen: Schnittstellen APIs Homeautomation Einbindung (z.B. ioBroker und Home Assistant) App-Zugriffe...

  1. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Hier ein neuer, separater Thread für die Themen:
    • Schnittstellen
    • APIs
    • Homeautomation Einbindung (z.B. ioBroker und Home Assistant)
    • App-Zugriffe und Steuerung der Xenia
     
  2. #2 LagaV, 02.05.2023
    Zuletzt bearbeitet: 02.05.2023
    LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Home Assistant - Sensoren der Xenia auslesen und nutzen:

    Einträge in der configuration.yaml beide unter "sensor:"

    Auslesen der Dater via Rest - URL und evtl. Interval anpassen:

    Code:
      - platform: rest
        name: "Xenia_JSON_Data"
        resource: "http://xenia.localnet/overview"
        scan_interval: 5
        value_template: '1'
        json_attributes:
          - "MA_EXTRACTIONS"
          - "MA_OPERATING_HOURS"
          - "MA_STATUS"
          - "MA_CLOCK"
          - "BG_SENS_TEMP_A"
          - "BG_LEVEL_PW_CONTROL"
          - "PU_SENS_PRESS"
          - "PU_LEVEL_PW_CONTROL"
          - "PU_SET_LEVEL_PW_CONTROL"
          - "SB_SENS_PRESS"
          - "BB_SENS_TEMP_A"
          - "BB_LEVEL_PW_CONTROL"
          - "SB_STATUS"
    
    Die ausgelesenen Daten als Sensoren bereitstellen:

    Code:
      - platform: template
        sensors:
          xenia_status:
            value_template: >-
              {% if state_attr('sensor.xenia_json_data', 'MA_STATUS') == 0 %}
                Off
              {% elif state_attr('sensor.xenia_json_data', 'MA_STATUS') == 1 %}
                On
              {% elif state_attr('sensor.xenia_json_data', 'MA_STATUS') == 2 %}
                Eco
              {% else %}
                Unknown
              {% endif %}
          xenia_extractions:
            value_template: "{{ state_attr('sensor.xenia_json_data', 'MA_EXTRACTIONS') }}"
          xenia_operating_hours:
            value_template: "{{ state_attr('sensor.xenia_json_data', 'MA_OPERATING_HOURS') }}"
          xenia_clock:
           value_template: "{% set in = state_attr('sensor.xenia_json_data', 'MA_CLOCK') %}{{ (in / 65536 )| round(0) }}:{{'%02i'%( ((in % 65536) / 256) | round(0))}}:{{'%02i'%(in % 256| round(0))}}"
          xenia_bg_sens_temp_a:
            unit_of_measurement: 'ºC'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'BG_SENS_TEMP_A') | round(1) }}"
          xenia_bg_level_pw_control:
           unit_of_measurement: '%'
           value_template: "{{ state_attr('sensor.xenia_json_data', 'BG_LEVEL_PW_CONTROL') }}"
          xenia_pu_sens_press:
            unit_of_measurement: 'bar'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'PU_SENS_PRESS')| round(1) }}"
          xenia_pu_level_pw_control:
            unit_of_measurement: '%'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'PU_LEVEL_PW_CONTROL') }}"
          xenia_pu_set_level_pw_control:
            unit_of_measurement: '%'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'PU_SET_LEVEL_PW_CONTROL') }}"
          xenia_sb_sens_press:
            unit_of_measurement: 'bar'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'SB_SENS_PRESS') | round(1)}}"
          xenia_bb_sens_temp_a:
            unit_of_measurement: 'ºC'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'BB_SENS_TEMP_A') | round(1)}}"
          xenia_bb_level_pw_control:
            unit_of_measurement: '%'
            value_template: "{{ state_attr('sensor.xenia_json_data', 'BB_LEVEL_PW_CONTROL') }}"
          xenia_sb_status:
            value_template: "{{ state_attr('sensor.xenia_json_data', 'SB_STATUS') }}"
    
     
    simi, FlorianGee und kesaloh13 gefällt das.
  3. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Home Assistant - Betriebszustand der Xenia (Ein - Aus - Eco) via Home Assistant steuern und meine Implementierung eines Buttons für das UI:

    configuration.yaml

    Steuerbefehle senden (URL anpassen)

    Code:
    rest_command:
      xenia_machine_control:
        url: "http://xenia.local/machine_control"
        method: POST
        payload: "action={{ action }}"
        content_type: "application/x-www-form-urlencoded"
    
    Lovelace Button für Xenia -- der aktuelle Betriebszustand wird aus dem im vorherigen Post erstellten Sensor ausgelesen. Der Betriebszustand wird angezeigt und ein kurzer Druck schaltet um (Ein -> Aus, Aus -> Ein, Eco -> Ein) und ein langer Druck schaltet wie folgt: (Ein, Aus -> Eco, Eco -> Aus). Das ganze ist als Grid Karte gelöst. Die drei sep. Button liegen übereinander, es wird aber nur jeweils der zum Betriebszustand passende Button angezeigt.

    Code:
    square: false
    type: grid
    columns: 1
    cards:
      - type: conditional
        conditions:
          - entity: sensor.xenia_status
            state: 'On'
        card:
          type: custom:mushroom-template-card
          primary: 'On'
          secondary: ''
          icon: mdi:coffee-maker
          icon_color: green
          layout: vertical
          multiline_secondary: true
          tap_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '0'
          hold_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '2'
      - type: conditional
        conditions:
          - entity: sensor.xenia_status
            state: 'Off'
        card:
          type: custom:mushroom-template-card
          primary: 'Off'
          secondary: ''
          icon: mdi:coffee-maker
          icon_color: red
          layout: vertical
          multiline_secondary: true
          tap_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '1'
          hold_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '2'
      - type: conditional
        conditions:
          - entity: sensor.xenia_status
            state: Eco
        card:
          type: custom:mushroom-template-card
          primary: Eco
          secondary: ''
          icon: mdi:coffee-maker
          icon_color: orange
          layout: vertical
          multiline_secondary: true
          tap_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '1'
          hold_action:
            action: call-service
            service: rest_command.xenia_machine_control
            data:
              action: '0'
    
     
    GHU und kesaloh13 gefällt das.
  4. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Einige Schnittstellen haben ich mir bisher aus den Quellen der Web-Schnittstelle herausgezogen.

    Hilfreich wäre eine zentrale Ablage (Github ?) um das zu dokumentieren oder Xenia / @Iskanda haben dazu bereits etwas fertig oder andere Vorstellungen.

    Bisher habe ich zusammen:
    Was gibt es noch?

    Auch wäre es gut zu wissen, was wir dem ESP32 zumuten können (Menge an Pull-Abfragen pro Zeiteinheit).
     
  5. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Uhrzeitinformationen in den Schnittstellen sind 3-Byte-Werte, mit

    Byte 0: Sekunden
    Byte 1: Minuten
    Byte 2: Stunden
     
  6. #6 d-schoen, 02.05.2023
    Zuletzt bearbeitet: 02.05.2023
    d-schoen

    d-schoen Mitglied

    Dabei seit:
    07.11.2013
    Beiträge:
    38
    Zustimmungen:
    91
    Hallo zusammen,

    ich unterstütze @Iskanda aktuelle je nach meiner zeitlichen Verfügbarkeit bei dem einen oder anderen Web-Thema.

    Zur Zumutbarkeit: Polling häufiger als 1/sec ist aktuell nicht sinnvoll. Häufiger bekommt der ESP nämlich keine Daten vom Hauptprozessor. Wir testen intern genau das aktuell und liefern einzelne Parameter im 200ms Takt aus. Sobald das sauber läuft liefern wir das aus.

    Bzgl API-Endpunkte:
    Über /execute_script lassen sich Skripte (auch die Standards) starten. /scripts_list liefert eine Liste (als JSON) aller Skripte (für die IDs).
    Über /toggle_sb kann der Dampfboiler an/aus gemacht werden.

    Ich dokumentiere das in den nächsten Tagen mal vernünftig, so dass @Iskanda das auf der Webseite verfügbar machen kann.
     
    haegar33, Silas, betbruder und 3 anderen gefällt das.
  7. #7 d-schoen, 02.05.2023
    d-schoen

    d-schoen Mitglied

    Dabei seit:
    07.11.2013
    Beiträge:
    38
    Zustimmungen:
    91
    Auch ist aktuell ein Websocket in Überlegung. @Graphefruit hilft das evtl für die Beanconqueror Anbindung. Das wird aber erst in ein paar Monaten was werden (wenn überhaupt).
     
  8. #8 Graphefruit, 02.05.2023
    Graphefruit

    Graphefruit Mitglied

    Dabei seit:
    01.06.2017
    Beiträge:
    1.177
    Zustimmungen:
    1.526
    Habe mich gerade mal durchs Plugin gescrollt, die Websockets sind wohl nicht so mega mäßig gut Unterstützt für Cordova.
    Persee gibts natürlich das normale Http-Access mit Websockets, ABER dann kommen die CORS-Probleme wieder zu Stande, welche nicht so einfach lösbar sind.
     
    d-schoen gefällt das.
  9. #9 kesaloh13, 02.05.2023
    kesaloh13

    kesaloh13 Mitglied

    Dabei seit:
    06.11.2014
    Beiträge:
    17
    Zustimmungen:
    29

    Vielen Dank dafür. Funktioniert perfekt bei mir. Damit ein und aus auch über einen "normalen" Schalter funktioniert (z.B. für die einfache Einbindung mit Alexa) musste ich nur noch einen Schalter hinzufügen.

    Code:
    switch:
      - platform: template
        switches:
          xenia:
            friendly_name: "Xenia Power"
            unique_id: switch.xenia_power
            value_template: "{{is_state('sensor.xenia_status', 'On') }}"
            turn_on:
              service: rest_command.xenia_machine_control
              data:
                action: 1
            turn_off:
              service: rest_command.xenia_machine_control
              data:
                action: 0
     
  10. #10 LagaV, 02.05.2023
    Zuletzt bearbeitet: 02.05.2023
    LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Polling jede Sekunde ist aber kein Problem? Evtl. auch kombiniert mit dem ein oder offenen Browser, die ja auch regelmäßig pollen?
     
  11. #11 d-schoen, 03.05.2023
    d-schoen

    d-schoen Mitglied

    Dabei seit:
    07.11.2013
    Beiträge:
    38
    Zustimmungen:
    91
    Nein, das ist gar kein Problem. Hab mir mal den Spaß gemacht, alle 250ms einen /overview Request zu senden. Der ESP macht das locker mit, liefert halt nur 4 mal die selben Daten aus.
     
  12. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Habe mir interessehalber einmal Daten aus dem Visualizer von einer Decent angesehen, da dort immer pro Messwert ein Zeitstempel mitprotokolliert wird.

    Druckdaten sind mit einer Messintervall-Zielgröße von vermutlich 250ms verfügbar.

    Genau:
    • Avg 249,9
    • Min 221,0
    • Max 273,0
     
  13. #13 d-schoen, 03.05.2023
    d-schoen

    d-schoen Mitglied

    Dabei seit:
    07.11.2013
    Beiträge:
    38
    Zustimmungen:
    91
    So, ich mach Schluss für heute. Aktueller Stand der API-Dokumentation (WiP):

    SwaggerEditor

    Code:
    openapi: 3.0.3
    info:
      title: XENIA DBL
      description: This document describes the HTTP API of Xenia DBL Espresso machine.
      version: 1.0.0
    servers:
      - url: http://xenia.local
    paths:
      /overview:
        get:
          summary: Main parameters of machine
          description: Retrieve the main operating parameters as shown in index page of WebUI
          operationId: overview
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      MA_EXTRACTIONS:
                        type: integer
                        format: int64
                        example: 10
                        description: Number of extractions since last reset
                      MA_OPERATING_HOURS:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      MA_STATUS:
                        type: integer
                        format: int64
                        enum: [0, 1, 2]
                        description: >
                          Current operating mode
                          * 0: OFF
                          * 1: ON
                          * 2: ECO
                      MA_CLOCK:
                        type: integer
                        format: int64
                        example: 240
                        description: >
                        Current Time - Time format 10:11:12 --> (A:B:C)hex --> simple data shift (bytewise): 0x000A0B0C
                      MA_CUR_PWR:
                        type: number
                        format: float
                        example: 8.12
                        description: Current power consumption in Ampere
                      MA_MAX_PWR:
                        type: number
                        format: float
                        example: 10.1
                        description: Maximum power consumption in Ampere
                      BG_SENS_TEMP_A:
                        type: number
                        format: float
                        example: 91.3
                        description: Current temperature of brewgroup
                      BG_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      PU_SENS_PRESS:
                        type: number
                        format: float
                        example: 8.3
                        description: Current pressure of brew pump
                      PU_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      PU_SET_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      SB_SENS_PRESS:
                        type: number
                        format: float
                        example: 1.3
                        description: Current pressure of steamboiler
                      BB_SENS_TEMP_A:
                        type: number
                        format: float
                        example: 91.3
                        description: Current temperature of brewboiler
                      BB_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      SB_STATUS:
                        type: integer
                        format: int64
                        example: 0
                        description: Status of Steamboiler (0 = OFF, 1 = ON)
      /diagram_get:
        get:
          summary: Shot parameters
          description: Retrieve the parameters for a shot
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      BB_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 10
                        description: Number of extractions since last reset
                      BG_LEVEL_PW_CONTROL:
                        type: integer
                        format: int64
                        example: 240
                        description: Operating hours since last reset
                      BG_SENS_TEMP_A:
                        type: number
                        format: float
                        example: 92.0
                        description: Current temperature of the brewgroup
                      BB_SENS_TEMP_A:
                        type: number
                        format: float
                        example: 92.1
                        description: Current temperature of the brewboiler
                      PU_SENS_FLOW_METER_ML:
                        type: integer
                        format: int64
                        example: 0
                        description: Operating hours since last reset
                      PU_SENS_PRESS:
                        type: number
                        format: float
                        example: 1.2
                        description: Current pressure of brew pump
      /inc_dec:
        post:
          summary: Change Brewboiler and -group temperatures
          description: Change Brewboiler and -group temperatures
          requestBody:
            description: Desired temperatures
            content:
              application/x-www-form-urlencoded:
                schema:
                  type: object
                  properties:
                    BG_SET_TEMP:
                      description: Desired temperature for brewgroup
                      schema:
                        type: number
                        format: float
                        default: 92.0
                    BB_SET_TEMP:
                      description: Desired temperature for brewboiler
                      schema:
                        type: number
                        format: float
                        default: 92.0
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      BG_SET_TEMP:
                        type: number
                        format: float
                        example: 92.0
                        description: Set temperature for brewgroup
                      BB_SET_TEMP:
                        type: number
                        format: float
                        example: 92.0
                        description: Set temperature for brewboiler
      /inc_dec_sb:
        post:
          summary: Change steamboiler pressure
          description: Change steamboilder pressure
          requestBody:
            content:
              application/x-www-form-urlencoded:
                schema:
                  type: object
                  properties:
                    SB_SET_PRESS:
                      description: Desired pressure for steamboilder
                      schema:
                        type: number
                        format: float
                        default: 1.3
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      SB_SET_PRESS:
                        type: number
                        format: float
                        example: 1.3
                        description: Desired pressure for steamboilder
      /inc_dec_bb:
        post:
          summary: Change Brewboiler temperature
          description: Change Brewboiler temperature
          requestBody:
            content:
              application/x-www-form-urlencoded:
                schema:
                  type: object
                  properties:
                    BB_SET_TEMP:
                      description: Desired temperature for brewboilder
                      schema:
                        type: number
                        format: float
                        default: 92.0
          responses:
            '200':
              description: successful operation
              content:
                application/json:
                  schema:
                    type: object
                    properties:
                      BB_SET_TEMP:
                        type: number
                        format: float
                        example: 92.0
                        description: Desired temperature for brewboiler
      /machine_control:
        post:
          summary: Change Operating Mode
          description: Turns the machine on, off or activates ECO mode
          requestBody:
                  content:
                    application/x-www-form-urlencoded:
                      schema:
                        type: object
                        properties:
                          action:
                            type: integer
                            enum: [0, 1, 2]
                            description: >
                              Operating Mode:
                                * 2 ECO
                                * 1 ON
                                * 0 OFF
          responses:
            '200':
              description: successful operation
       
        
     
    LagaV und hobbes_II gefällt das.
  14. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Hier strauchele ich im Moment:

    Ich bekomme zwar ein {"status":"success"} bei

    curl -X POST -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" --data '{"ID": "18"}' "http://xenia.localnet/execute_script"

    zurück, aber das Skript wird nicht ausgeführt.
     
  15. #15 d-schoen, 04.05.2023
    d-schoen

    d-schoen Mitglied

    Dabei seit:
    07.11.2013
    Beiträge:
    38
    Zustimmungen:
    91
    Der ESP erwartet kein JSON, sondern einfach ID als Formularparameter im Request Body.
     
    LagaV gefällt das.
  16. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Ich sehe hier auch noch 3 + 4 als Werte (bei mir im Zusammenhang mit Scriptausführungen - 3 nach Skriptstart - 4 nach Scriptende (?)).
     
  17. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Hier nachfolgend einige Snippsel, um die Xenia Skripte auch in Home Assistant zu nutzen.

    Grundlagen:

    a) Ausführen eines Skriptes in zwei Varianten mit jeweils unterschiedlichen Parametern (script_id als Zahl und entity_id mit einer Entity [dazu später mehr]

    Code:
    rest_command:
       execute_xenia_script_id:
       url: "http://192.168.111.32/execute_script?ID={{ script_id }}"
    
       execute_xenia_script_entity:
       url: "http://192.168.111.32/execute_script?ID={{ state_attr(entity_id, 'index') }}"
    Für die manuelle Anlage von Buttons ist mit dem rest_command "execute_xenia_script_id" alles wesentlche vorhanden. Um die gesamte Liste der möglichen Skripte automatisiert anzuzeigen und aufrufen zu können, ist dann ein wenig mehr Aufwand erforderlich.

    b) Ein Sensor, der die Skript-Informationen ausliest:

    Code:
    sensor:
      - platform: rest
        name: "xenia_scripts_list"
        resource: "http://xenia.localnet/scripts_list"
        scan_interval: 600
        json_attributes:
          - "index_list"
          - "title_list"
        value_template: "xenia_scripts_data"
    c) Dazu dann ein Python-Skript, das aus "xenia_scripts_list" pro Skript eine input_text Entity erstellt.

    Beispiel:
    upload_2023-5-9_14-29-4.png

    Das Python Skript rufe ich aktuell per Button manuell auf.

    Code:
    # Get the sensor attributes
    xenia_scripts_list = hass.states.get("sensor.xenia_scripts_list")
    index_list = xenia_scripts_list.attributes.get("index_list")
    title_list = xenia_scripts_list.attributes.get("title_list")
    
    # Get all input_text.xenia_script_ entities
    xenia_input_text_entities = [
        entity for entity in hass.states.all() if entity.entity_id.startswith("input_text.xenia_script_")
    ]
    
    if index_list and title_list:
        # Merge the index_list and title_list into a list of dictionaries
        xenia_scripts = [
            {"index": index, "name": title}
            for index, title in zip(index_list, title_list)
        ]
    
        # Create or update input_text entities for each script in the xenia_scripts variable
        for script in xenia_scripts:
            entity_id = f"input_text.xenia_script_{script['index']}"
    
            # Check if the entity already exists
            existing_entity = hass.states.get(entity_id)
            if existing_entity:
                # Update the entity's attributes and value
                hass.states.set(
                    entity_id,
                    str(script["name"]),
                    {"name": script["name"], "index": script["index"]}
                )
            else:
                # Create a new input_text entity and set the value to the index value
                hass.services.call(
                    "input_text",
                    "set_value",
                    {"entity_id": entity_id, "value": str(script['index'])},
                )
    
                # Set the entity's name and index attributes
                hass.states.set(
                    entity_id, str(script["name"]), {"name": script["name"], "index": script["index"]}
                )
    
        # Remove input_text.xenia_script_ entities that are not in the xenia_scripts list
        current_xenia_script_entities = [f"input_text.xenia_script_{script['index']}" for script in xenia_scripts]
        entities_to_remove = [entity for entity in xenia_input_text_entities if entity.entity_id not in current_xenia_script_entities]
    
        for entity in entities_to_remove:
            hass.services.call("input_text", "remove", {"entity_id": entity.entity_id})
            logger.info(f"Removed {entity.entity_id}")
    
    else:
        logger.error("Failed to fetch data from sensor.xenia_scripts_list")
    
    d) Auto-Entities Card, um die vorhandenen Skripte anzuzeigen und dann auch per tap_action aufrufen zu können.

    Code:
    type: custom:auto-entities
    card:
      square: false
      columns: 1
      type: grid
    show_empty: false
    card_param: cards
    filter:
      include:
        - entity_id: input_text.xenia_script_*
          options:
            type: custom:mushroom-template-card
            entity: this.entity_id
            primary: |
              {{ state_attr(entity, 'name')}} [{{state_attr(entity, 'index')}}]
            tap_action:
              action: call-service
              service: rest_command.execute_xenia_script_entity
              data:
                entity_id: this.entity_id
     
  18. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Finde gerade noch:

    http://xenia.local/overview_single liefert die Infos zu:

    BG_SET_TEMP
    PU_SET_PRESS
    PU_SENS_WATER_TANK_LEVEL
    SB_SET_PRESS
    BB_SET_TEMP

    als JSON.

    In HomeAssistant sieht das dann wie folgt aus:

    Code:
      - platform: rest
        name: "Xenia_JSON_Data_Single"
        resource: "http://xenia.localnet/overview_single"
        scan_interval: 60
        value_template: "1"
        json_attributes:
          - "BG_SET_TEMP"
          - "PU_SET_PRESS"
          - "PU_SENS_WATER_TANK_LEVEL"
          - "SB_SET_PRESS"
          - "BB_SET_TEMP"
    
    und

    Code:
      - platform: template
        sensors:
          xenia_bg_set_temp:
            unit_of_measurement: "ºC"
            friendly_name: "Xenia BG Set Temperature"
            value_template: "{{ state_attr('sensor.xenia_json_data_single', 'BG_SET_TEMP') }}"
          xenia_pu_set_press:
            unit_of_measurement: "bar"
            friendly_name: "Xenia PU Set Pressure"
            value_template: "{{ state_attr('sensor.xenia_json_data_single', 'PU_SET_PRESS') }}"
          xenia_pu_sens_water_tank_level:
            friendly_name: "Xenia PU Sens Water Tank Level"
            value_template: "{{ state_attr('sensor.xenia_json_data_single', 'PU_SENS_WATER_TANK_LEVEL') }}"
          xenia_sb_set_press:
            unit_of_measurement: "bar"
            friendly_name: "Xenia SB Set Pressure"
            value_template: "{{ state_attr('sensor.xenia_json_data_single', 'SB_SET_PRESS') }}"
          xenia_bb_set_temp:
            unit_of_measurement: "ºC"
            friendly_name: "Xenia BB Set Temperature"
            value_template: "{{ state_attr('sensor.xenia_json_data_single', 'BB_SET_TEMP') }}"
    
     
    FlorianGee gefällt das.
  19. LagaV

    LagaV Mitglied

    Dabei seit:
    23.03.2019
    Beiträge:
    253
    Zustimmungen:
    359
    Nachdem der Versuch mit dem Spülen zur Verkürzung der Aufwärmzeit leider aktuell keine für mich ausreichende Beschleunigung erzielt werden konnte, habe ich mir etwas sehr simples in Home Assistant angelegt. Es gibt jetzt eine Benachrichtigung auf mein Mobiltelefon + SmartWatch, wenn meine Xenia nach dem Einschalten aufgeheizt ist, Mich hat es selbst überrascht, wie nützlich das ist. Daher hier die Beschreibung zur Automation:

    Ablauf:

    - Aktivierung beim Wechsel der Xenia von Off zu On.

    - Warten , dass die gemessene Temperatur der Brühgruppe größer ist, als der Zielwert für die BG. (Warten ist begrenzt auf 10 Minuten - falls der Zielzustand nicht erreicht wird, dann Abbruch des Skripts - keine Benachrichtigung)

    - Absenden der Nachricht


    Screenshot 2023-06-26 104322.png

    Und hier die YAML-Automation:

    Code:
    alias: Xenia Ready Notification
    description: ""
    trigger:
      - platform: state
        entity_id:
          - sensor.xenia_status
        from: "Off"
        to: "On"
    condition: []
    action:
      - wait_for_trigger:
          - platform: numeric_state
            entity_id: sensor.xenia_bg_sens_temp_a
            above: sensor.xenia_bg_set_temp
        timeout:
          hours: 0
          minutes: 10
          seconds: 0
          milliseconds: 0
        continue_on_timeout: false
        enabled: true
      - service: notify.mobile_app_<Mobile Device>
        data:
          message: Xenia ready
          data:
            visibility: public
    mode: single
    
     
  20. zikaf

    zikaf Mitglied

    Dabei seit:
    19.10.2023
    Beiträge:
    147
    Zustimmungen:
    205
    Danke für die ganze Vorarbeit hier!

    Das war für mich jetzt ein Schnell-Start. Ich hab meine Xenia in fhem integriert (--> Perl Smarthome-Zentrale), und nun lassen sich damit hübsche Spielereien veranstalten:


    ... Schalten und Direkt-Link auf die Konfig-Seite über mein grafisches Smart-Home-Interface:

    upload_2023-10-21_12-12-57.png


    ... Verhaltensgesteuertes Anschalten: wenn ich morgens nach 6 Uhr das Badezimmerlicht das erste Mal anschalte, heizt die Xenia hoch, am Wochenende erst ab 8 Uhr (soll ja nicht bei nächtlichen Pinkelausflügen der Kinder passieren)

    ... denkbar wäre natürlich auch ein Nachmittags-Timer, der vom Anwesenheitsstatus abhängt (wozu hochfahren, wenn niemand daheim ist).

    Braucht man das alles?

    NATÜRLICH!!! Sonst schmeckt der Espresso nur halb so gut! :D
     
    FlorianGee, hobbes_II, Lancer und einer weiteren Person gefällt das.
Thema:

Xenia DBL : Schnittstellen / APIs für Home-Automation und Apps

Die Seite wird geladen...

Xenia DBL : Schnittstellen / APIs für Home-Automation und Apps - Ähnliche Themen

  1. [Vorstellung] Mühle Xenia X55 (Macap Leo 55 Essential)

    Mühle Xenia X55 (Macap Leo 55 Essential): Wir haben vor einiger Zeit die Macapmühlen in das Programm aufgenommen und nun sind sie auch im Shop verfügbar. Die Mühlen gibt es in schwarz und...
  2. [Verkaufe] Xenia DBL

    Xenia DBL: [ATTACH] [ATTACH] [ATTACH] [ATTACH] [ATTACH] [ATTACH] [ATTACH] Hallo, da mir eine Unica Pro zugelaufen ist, verkaufe ich nun meine Xenia DBL in...
  3. [Vorstellung] gebrauchte Xenia 2K

    gebrauchte Xenia 2K: Wir haben eine Xenia mit gut 900 Bezügen zurückbekommen, die wegen eines Todesfalles verkauft werden soll. [ATTACH] [ATTACH] [ATTACH] [ATTACH]...
  4. [Vorstellung] Xenia DB(L) schwarz

    Xenia DB(L) schwarz: Es steht ausser der Reihe eine schwarze Xenia zum Verkauf, die für die Optimierung der Aufheizzeiten gebaut wurde. Die verfügt über 2 x 150 Watt...
  5. [Vorstellung] Xenia 2024

    Xenia 2024: [ATTACH] Vor fast 10 Jahren haben wir zum ersten Mal eine Xenia so zusammengebaut, dass die Maschine gute Ergebnisse (in Form von Espresso)...