Garagentor Öffnungsgrad über Ultraschallsensor HC-SR04 ermitteln

Hallo,
ich habe in HA für das Öffnen und Schließen meines Garagenschwingtores eine Automation hinterlegt,
welche mir den Öffnungsgrad des Tores anzeigt.
Den passenden Code habe ich hier im Forum gefunden und entsprechend angepasst.
DANKE nochmals für die hilfreichen Infos in diesem Forum.

Auslöser sind die beiden Torendschalter.
Ändert sich der Status startet die Autmation.
Somit habe ich eine Anzeige, egal womit, das Tor betätigt wird. (Smartphone, HA, 433 MHz Sender, Taster in der Garage)

Der Öffnungsgrad wird auf Basis der Öffnungs (12s) - und Schließzeit (17s) ermittelt.
Öffnet sich das Tor, dann wird mittels Template “input.number” der Zähler hochgesetzt, bis 100% erreicht sind.
Beim Schließen entsprechend umgekehrt.

Aber, das ganze passt aber nur dann, wenn das Tor kpl. “AUF” oder “ZU” gefahren wird.
Wird der Taster dazwischen nochmals betätigt, bleibt das Tor stehen, der Zähler läuft aber weiter.

Nun habe ich überlegt,
ob man den Öffnungsgrad nicht auch mittels ESP Modul ESP8266 und dem Ultrasonic HC-SR04 Modul ermitteln kann.
Der Entfernungsmesser könnte an der Führungsschiene im Bereich des Antriebs platziert werden und die Entfernung zum Führungsschlitten messen.
Wird die Entfernung größer = Tor fährt zu, verkleinert sich die Entfernung = Tor fährt auf.
Bleibt das Tor stehen, ändert sich ja an dem Weg nichts mehr und die Anzeige zeigt den aktuellen Status.

Ich habe die Möglichkeit mittels 3D Druck ein passendes Gehäuse/Befestigung zu drucken.

Nun zu meiner Frage:
Hat sich schon jemand daran versucht oder einen Gedanken daran verschwendet bzw. Erfahrungen gemacht?
Ist der Ultraschallsensor dafür geeignet. Der soll ja bis zu 5m Entfernung können. ( Es muss zudem nicht auf den mm genau sein!)

Ich habe noch nicht probiert, sondern nur gelesen: Es gibt Vibrationssensoren, die auch den Neigungswinkel erkennen können.

Aqara DJT11LM
Tuya ZG-103Z

Vielleicht wäre das eine Überlegung wert?

Hallo,
ich habe nun einen Ultraschallsensor HC-SR04 erfolgreich mittels ESPHome und einem SP8266 Board in Home Assistant eingebunden bekommen.
Die Distanzmessung funktioniert am Schreibtisch erst einmal gut,
der richtige Einsatz am Garagentor folgt noch.
Bin daher zuversichtlich!

Sobald der Sensor aktiviert ist werden,
im Moment, alle 125ms Messungen durchgeführt.
Die Intervalzeit muss dann noch geminsam mit der fahrtzeit des Garagentores ermittelt werden, damit die Anzeige auch flüssig läuft!

Auf die Dauer wird mein Raspi damit ja erheblich belastet,
daher soll diese Intervallzeit 125ms nur beim Öffnen und Schließen des Tores erfolgen.
Als Auslöser für die Änderung des Intervalls soll dann einen Statusänderung eines meiner Senoren sein, die den “AUF” oder “ZU” Zustand des Tors anzeigen.
Das ganze kann dann ca. 20 sec mit 125ms erfolgen und danach nur noch jede Stunde!

Ich scheitere aber daran, das passende Script dazu zu erstellen,
weil ich sehr wenig YAML Kenntnisse habe.

Ich würde mich freuen, wenn mir bitte jemand helfen würde.
`Mein Script sieht derzeit so aus:

# configuration entry
sensor: 
  - platform: ultrasonic
    id: distance_sensor
    trigger_pin: GPIO5
    echo_pin: GPIO4
    name: "Ultrasonic_Sensor"
    update_interval: 125ms
    timeout: 2.5m
    accuracy_decimals: 2
    unit_of_measurement: 'm'
    # filters:
    filters:
      - lambda: return x;
      - filter_out: nan
      - median:
          window_size: 5
          send_every: 5
          send_first_at: 1
      - calibrate_linear: 
        - 0.0 -> 0.0
        - 200.0 -> 200.0

  - platform: template
    id: level
    name: Status_Garagentor
    #update_interval: 125ms
### Hier klemmt es mit der Umsetzung zum Update Intervall.
    update_interval: |-
      if (id(binary_sensor.shelly_garage_magnetschalter_switch_100_input).state) on;
        update_interval: 125ms
      } else {
        update_interval: 6000s
      }
    unit_of_measurement: '%'
    lambda: |-
      auto r = (id(distance_sensor).state) * 50;
      if (r > 100) return 100;
      if (r < 0) return 0;
      return r; 

Nun ist der Ultraschallsensor in der Garage verbaut und funktioniert soweit.
Folgendes Script kommt zum Einsatz, falls dies jemandem nutzt:

  # Ultraschallsensor HC-SR04
  - platform: ultrasonic
    id: distance_sensor
    name: Ultrasonic_Sensor    
    trigger_pin: GPIO5 #Kabel blau
    echo_pin: GPIO4    #Kabel weiß
    update_interval: never
    internal: true
    timeout: 3m
    accuracy_decimals: 1
    unit_of_measurement: 'm'
    # filters:
    filters:
      - lambda: return x;
      - filter_out: nan
      - quantile: 
      - calibrate_linear: 
        - 0.023 -> 2.04
        - 2.00 -> 0.00

  # Zeigt im Dashboard den Öffnungsgrads in % vom Garagentor 
  - platform: template
    id: level
    name: Status_Garagentor
    update_interval: never
    unit_of_measurement: '%'
    accuracy_decimals: 0
    lambda: |-
      auto r = (id(distance_sensor).state) * 50;
      if (r > 99.5) return 100;
      if (r < 0.00) return 0;
      return r;

# Binary Sensor aus Homeassistant. Hier werden beide Endschalter des Tores zu einem Sensor zusammengefasst. 
binary_sensor:
  - platform: homeassistant
    name: "Schalter Garage"
    id: schaltergarage
    entity_id: binary_sensor.endschalter_garage
    internal: true

# Wechselt das update_interval auf 125ms, wenn beide Endschalter in der Garage auf "on" sind, also nicht betätigt!
interval:
  - id: dynamic_update_interval_fast
    interval: 125ms
    then:
      - if:
          condition:
                - binary_sensor.is_on:  schaltergarage
          then:
            -  component.update: level
            -  delay: 120ms
            -  component.update: distance_sensor  

  - id: dynamic_update_interval_slow
    interval: 900s
    then:
      - if:
          condition:
                - binary_sensor.is_off:  schaltergarage
          then:
            - component.update: level
            - delay: 300ms
            - component.update: distance_sensor

Den Öffnungsstatus lasse ich in % mittels Gauge im Dashboard anzeigen.
Dies läuft nicht so smooth wie ich erhofft habe, zeigt mir aber an,
wie weit das Tor geffnet oder geschlossen ist und auch wenn es in einer Zwischenstellung steht.

1 „Gefällt mir“