Tasterdrücke zählen

Moin, moin zusammen,

nachdem ich nun tagelang versucht habe das zum Laufen zu bekommen, wende ich mich mal an die Experten.

Also: Ich habe einen Taster und der wird oft gedrückt.
Nun möchte ich wissen wie oft er gedrückt wurde.
Wie oft wurde er in den letzten 24 Stunden gedrückt?
Die Zahl soll gespeichert und der Taster wieder auf 0 gesetzt werde.
Alles in ESPhome mit einem D1mini.

Bis denne
Arwin

Also soll das Ganze nicht über eine Automatisierung in HA gelöst werden, oder?

Gruß, Lars

Da ich totaler Laie in Sachen HA bin, wäre es mir egal, wie es gelöst wird.
Hauptsache es geht :wink:
Also:
Als Taster fungiert ein Reed Sensor.
Dessen Schaltungen sollen gezählt und nach 24h wieder auf 0 gesetzt werden.

Wie wäre es dann mit so etwas:

alias: Test-Button
description: ""
triggers:
  - domain: mqtt
    device_id: 30627cae08397b43e969d4a71e60e510
    type: action
    subtype: single
    metadata: {}
    trigger: device
    id: Klick
  - trigger: time
    at: "00:00:00"
    id: Reset
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Klick
        sequence:
          - action: counter.increment
            metadata: {}
            data: {}
            target:
              entity_id: counter.anzahlklicks
      - conditions:
          - condition: trigger
            id:
              - Reset
        sequence:
          - action: counter.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: counter.anzahlklicks
mode: single

basierend auf einem Zähler-Helfer:

Den Auslöse-Trigger müsstest du dann noch auf dein ESP-Device anpassen.

Gruß, Lars

Es schmerzt mich ja selbst, wenn ich meine nicht vorhandene Intelligenz so offen zur Schau stellen muss.
Aber ich weiß nicht, was ich mit dem Code oben anfangen muss :frowning:

Kein Problem. Es handelt sich dabei um den YAML-Code eine Automation.


Legen eine neue Automation an…


Beginne mit einem leeren Template…


An dieser Stelle dann mit Strg-V den zuvor kopierten Code einfügen…


Nun sollte sich dieses Bild bieten, welches du speichern kannst und die für Dich notwendigen Änderung durchführst, wie z.B. “deinen” Button konfigurierst, da wo jetzt “single” action steht.

Frag, wenn du noch Fragen haben solltest.

Gruß, Lars

Danke, ich melde mich.
Zur Zeit ein anderes Problem.

Eine Frage vorweg:
Muss ich “mqtt” installiert haben?

Nach langen Versuchen, habe ich nun einen Taster eingerichtet bekommen.

binary_sensor:
  - platform: gpio
    pin: 
      number: D1
      inverted: false
      mode:
        input: true
    name: "Taster Trigger"

Nun wollte ich die Automation erstellen.
Aber wie mache ich das?
Automation erstellen —> im nächsten Fenster “Neue Automation erstellen”
Drei Punkte oben rechts:
In Yaml bearbeiten.
Hier füge ich Deinen Code ein.
Bei “device_id” habe ich meinen api key eingetragen.
Wenn ich auf Speichern drücke, soll ich “Test-Button” umbenennen.
Da kann ich aber reinschreiben was ich will, da passiert nichts.
Und wenn ich auf Speicher drücke kommt folgende Fehlermeldung:
“Message malformed: Unknown device ‘+SyTMwuJwhfaKof2grC+aMqZBjJxLWftfsHxBvUdO+w=’”

:crayon:by HarryP: Zusammenführung Doppelpost (bei Änderungen oder hinzufügen von Inhalten bitte die „Bearbeitungsfunktion“ anstatt „Antworten“ zu nutzen)

Ich kann dir eine einfache Methode anbieten, mit der du die Impulse zählen kannst. Auf jeden Fall ist sie aus meiner Sicht einfacher.
Dieser Code ist für die Datei „template.yaml”.

#  Test   Impulszöhler    
- trigger:
  - trigger: time
    at: "00:02"    
    id: tr_time
  - trigger: state
    entity_id:
    - binary_sensor.dein_taster
    from: "off"
    to: "on"
    id: tr_impuls
  sensor:
    - name: Zaehler Schalter1
      unique_id: "zaehler_schalter1" 
      state: > 
        {% set zaehler = states('sensor.zaehler_schalter1') | float(0) %}
        {% if trigger.id == 'tr_time' %}
          {{ 0 }}
        {% endif %}
        {% if trigger.id == 'tr_impuls' %}
          {{ zaehler + 1 }}
        {% endif %}

Danke Dir!
Aber ich bin zu blöd für diese Welt :frowning:
Wo ist diese besagte “template.yaml” Datei?
Muss ich sie selbst erstellen?
Und wo trage ich dies ein?

Ich hab das jetzt mal mit

template:
  - trigger:
  - trigger: time

versucht.
Bekomme immer die Fehlermeldung:

while parsing a block collection
  in "/config/esphome/2terversuch.yaml", line 41, column 3
expected <block end>, but found '?'
  in "/config/esphome/2terversuch.yaml", line 51, column 3

ja,
im Config Ordner eine neue Datei erstellen und tempalte.yaml bennenen.

Füge dann in “configuration.yaml” folgenden Eintrag ein:

template:  !include template.yaml

Ich habe eine Kleinigkeit vergessen: Damit der Zähler funktioniert, muss er zunächst initialisiert werden. Das kannst du machen, indem du eine Zeile änderst und HA neu startest.

        {% if trigger.id == 'tr_impuls' %}
          {{ 1 }}
        {% endif %}

Einmal triggern (Schalter betätigen) , schauen ob der Zahler auf 1 steht. Dann die Zeile auf den Uhrsprung ändern und HA neu starten.

Unter “homeassistant/” ein File namens “template.yaml” erstellt.
Laut Tante Kugel ist “homeassistant” das alte “Config”.

In das File Deinen Code eingefügt.

In “configuration.yaml” die Zeile “template: !include template.yaml” eingefügt.

HA neu gestartet.

Die Zeile wurde von mir, wie von Dir vorgeschlagen, geädert.

Taster schaltet, aber der Zaehler Schalter1 steht auf unbekannt.

Kann es sein, dass ich das hier falsch eingetragen habe?

    entity_id:
    - binary_sensor.Taster_Trigger

Hast du meinen Beitrag davor komplett gelesen, vor allem den Teil, in dem ich erkläre, wie der Sensor initialisiert wird?

ist es dein Taster?

binary_sensor.Taster_Trigger

Poste bitte deinen YAML-Code.

Du meinst das hier:

Ja habe ich, hoffe auch verstanden.

Die Zeile hatte ich geändert:

 sensor:
    - name: Zaehler Schalter1
      unique_id: "zaehler_schalter1" 
      state: > 
        {% set zaehler = states('sensor.zaehler_schalter1') | float(0) %}
        {% if trigger.id == 'tr_time' %}
          {{ 0 }}
        {% endif %}
        {% if trigger.id == 'tr_impuls' %}
          {{ 1 }}
        {% endif %}

Hier meine Code:


esphome:
  name: 2terversuch
  friendly_name: 2terversuch

esp8266:
  board: d1_mini_pro

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "+SyTMwuJwhfaKof2grC+aMqZBjJxLWftfsHxBvUdO+w="

ota:
  - platform: esphome
    password: "d110ab13f415ea62070fb0ecb672b4aa"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "2Terversuch Fallback Hotspot"
    password: "dp84sRKiLrs3"

captive_portal:

binary_sensor:
  - platform: gpio
    pin: 
      number: D1
      inverted: false
      mode:
        input: true
    name: "Taster_Trigger"

ohne Trigger wird es nicht funktionieren

- trigger:
  - trigger: time
    at: "00:02"    
    id: tr_time
  - trigger: state
    entity_id:
    - binary_sensor.dein_taster
    from: "off"
    to: "on"
    id: tr_impuls
  sensor:
    - name: Zaehler Schalter1
      unique_id: "zaehler_schalter1" 
      state: > 
        {% set zaehler = states('sensor.zaehler_schalter1') | float(0) %}
        {% if trigger.id == 'tr_time' %}
          {{ 0 }}
        {% endif %}
        {% if trigger.id == 'tr_impuls' %}
          {{ 1 }}
        {% endif %}

von der ESP Home habe ich keine Ahnung. Ändert sich der Zustand des Taster_Triggers, wenn du den Schalter betätigst?

"

Verstehe ich jetzt nicht.
Bilde mir ein, alles so gemacht zu haben wie von Dir beschrieben.

Der Taster funktioniert. Zeigt mir aus/an.
Nur gezählt wird nichts.
Gestern war der der “Zaehler Schalter1” noch unbekannt.
Seit 0000 zeigt er mit 0, zählt aber nicht.
Hatte heute Morgen die Zeile auf den Ursprung gesetzt und HA neu gestartet.
Nichts.

Ist da jemand verärgert?
Bevor ich den Zähler präsentiert habe, habe ich ihn auf seine Funktion getestet. Bei mir funktioniert der Zähler. Wenn er bei dir nicht funktioniert, hast du irgendwo einen Fehler gemacht. Dein Zähler wurde um 0:02 Uhr auf Null gesetzt. Das bedeutet, dass der erste Trigger funktioniert. Das Problem muss also beim zweiten Trigger liegen.
Ich habe dich gebeten, deinen YAML-Code zu posten. Du hast jedoch nur einen Teil davon präsentiert, das Teil mit den Triggern fehlt

Keine Angst, ich ärgere mich nicht über jemanden der mir helfen will!

Jetzt geht bei mir aber gar nichts mehr.
Mein Raspberry hat keine USB Ports mehr.
Muss erstmal sehen wie ich das wieder hinbekomme.
Aber…
Wie meinst Du dies:

Ich habe doch alles eingetragen, was Du mir gezeigt hast.
Im File Editor.
Oder meinst Du, dass unter meinem Code noch was wie Trigger fehlt?
Kann aber zur Zeit nichts mehr aktualisieren, muss erstmals sehen wo ich die USB Ports wieder herbekomme.
Hoffe nicht, das der Raspberry defekt ist.

Ich versuche, es zu erklären. Ich habe ein Bild von dem yaml Codes erstellt. Ich würde den grün markierten Bereich als Triggerteil bezeichnen. Hier werden die Trigger (Auslöser) festgelegt.
Der blau markierte Bereich ist der Deklarations- und Aktionsbereich. Hier wird der Sensor deklariert und festgelegt, was passieren soll, wenn einer der Trigger ausgelöst wird. Du hast nur den blau markierten Teil deines Codes gepostet, der grün markierte Teil fehlt.
Der orange markierte Bereich könnte möglicherweise einen Fehler beinhalten. Da sollte so etwas stehen.
binary_sensor.taster_trigger

Wenn du den Sensornamen richtig eingetragen hast, schaue unter „Entwicklerwerkzeuge” und „Zustände” nach den möglichen Sensorzuständen. In der Regel haben binäre Sensoren die Zustände „on”, „off” oder „true” und „false”.
Eventuell müssen bei dir die beide Zeilen angepasst werden.
from: “off”
to: “on”

In dem letzten Codebeispiel fehlt das +1. Deswegen zählt der Sensor nicht.
Außerdem würde ich |int(0) statt |float(0) verwenden, soll ja ne ganze Zahl angezeigt werden.

1 war nur zur Initialisierung, eigentlich muss es so sein.

{{ zaehler + 1 }}

Das war auch mein Gedanke. int bringt aber eine Fehlermeldung, deswegen float.