ESP Home Text Sensoe

Hallo Zusammen,
ich habe mal eine Frage zum Text Sensor.
Ist es möglich aus einem längeren Text nur einen Teil auszuwerten?
Ich habe mir einen Temperaturregler für meinen 3D Drucker gebaut und dort kann ich mir den Dateinamen auswerten lassen. Dort steckt dann das verwendete Material mit drin.
Stiftehalter_0.4n_0.2mm_PLA_MK4SMMU3_1d2h8m.bgcode
ich müsste das PLA ausgewertet bekommen.
Wie bekomme ich das nun hin?
Vielen Dank für euere Hilfe!!!

Servus! :slight_smile:

So:

template:
  - sensor:
      - name: "Verwendetes Material"
        state: >
          {% set filename = "Stiftehalter_0.4n_0.2mm_PLA_MK4SMMU3_1d2h8m.bgcode" %}
          {{ filename.split('_')[3] }}

Falls das Material an einer variablen Position im Dateinamen steht, kannst du Regex nutzen:

template:
  - sensor:
      - name: "Verwendetes Material"
        state: >
          {% set filename = states('sensor.3d_printer_filename') %}
          {% set match = filename | regex_findall_index('_(PLA|ABS|PETG|ASA)_') %}
          {{ match if match else 'Unbekannt' }}

Viel Erfolg!

Vielen Lieben Dank für die schnelle Antwort. Wenn ich das mit Redex umsetze, wird mir dann an dem Template Sensor der Name des Materials angezeigt? Dann kann ich diesen Template Senor mit z.B. state: „PLA“ verwenden?

Vielleicht verstehe ich Deine Frage nicht richtig… aber: bei beiden obigen Varianten (natürlich mit den entsprechenden Anpassungen an Deine Entitäten) hätte der Sensor als Status einen String, der das Materialkürzel enthält, also “PLA” oder “ABS” oder …

Falls das Deine Frage beantwortet: gut.
Falls nicht: mehr Details, bitte!

vielen Dank für deine Unterstützung! Mit Redex habe ich noch nie gearbeitet und ich bekomme auch einen Fehler wenn ich dein Codeteil einsetze.

Failed config

template: [source /config/esphome/prusa-1-enclosure.yaml:620]
  
  Component template cannot be loaded via YAML (no CONFIG_SCHEMA).
  - sensor: 
      - name: Verwendetes Material
        state: |-
          {% set filename = states('sensor.dateiname') %} {% set match = filename | regex_findall_index('_(PLA|ABS|PETG|ASA)_') %} {{ match if match else 'Unbekannt' }}

Ich lese den Dateinamen mit einem text_sensor aus:

#PRUSA-1 Dateiname
  - platform: homeassistant
    name: "Dateiname"
    id: dateiname
    entity_id: sensor.prusa_1_dateiname
    icon: "mdi:file-image-outline"
    internal: False

Ebenfalls wird der Zustand des Druckers ausgelesen und mit on_value soll ein Customer Preset des climate.control gestartet werden:

#Zustand PRUSA-1
  - platform: homeassistant
    name: "Zustand PRUSA-1"
    id: Zustand_PRUSA_1
    entity_id: sensor.prusa_1
    icon: "mdi:printer-3d"
    internal: False
    on_value: 
      then:
        #Licht
        - script.execute: licht_script
        #Autotemp PLA
        - if: 
            condition: 
              and:
                - text_sensor.state: 
                    id: Zustand_PRUSA_1
                    state: 'printing'
                - text_sensor.state: 
                    id: dateiname
                    state: '_PLA_'
            then: 
              - climate.control: 
                  id: thermostat_enclosure
                  custom_preset: PLA

Ich benötige eine Möglichkeit wie ich das umsetzen kann, denn mit text_sensor.state bekomme ich leider keine Reaktion.

Dies soll für PLA, PETG, ASA, ABS und FLEX funktionieren.

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Du musst die Entity-ID von Deinem Text-Sensor verwenden:

{% set filename = states('sensor.prusa_1_dateiname') %}
{% set match = filename | regex_findall_index('_(PLA|ABS|PETG|ASA)_') %}
{{ match if match else 'Unbekannt' }}

Du kannst das in den Entwicklerwerkzeugen > Template auch testen. Z. B. ergibt

{% set filename = "Stiftehalter_0.4n_0.2mm_PLA_MK4SMMU3_1d2h8m.bgcode" %}
{% set match = filename | regex_findall_index('_(PLA|ABS|PETG|ASA)_') %}
{{ match if match else 'Unbekannt' }}

wie gewünscht den String “PLA”.

Hast Du versucht (so sieht es aus), den Code in eine Konfiguration von einem ESPHome-Sensor zu packen? - Dafür ist/war der nicht gedacht… der Code ist für HA.
Dü könntest Dir jetzt z. B. einen Template-Sensor erstellen, der obigen Code als state-value hat.