Garagentor-Steuerung

Beispiele dazu findet man ja zu Hauf, nur verstehe ich die alle nicht und habe noch keine Idee wie ich das integrieren soll?
Ich habe meinen Antrieb mit einem Shelly Plus UNI smart gemacht. Der UNI steuert über seine 2 Ausgänge jeweils ein Relais, eines für die Garagenbeleuchtung, eines für den Torantriebs-Taster. Die beiden Digitaleingänge vom UNI habe ich mit zwei Reed-Kontakten beschaltet, die jeweils den vollständig geöffneten und geschlossenen Zustand melden.
Theoretisch wäre, wenn die Meldung von beiden “OFF” kommt, das Tor irgendwo in der Mitte am fahren. Den Antrieb kann ich noch über zwei Handsender und einen Wandtaster in der Garage betätigen.

Mein Hauptanliegen war zu erkennen ob das Tor nach Einbruch der Dunkelheit noch offen steht, denn das vergesse ich gern mal. Dann möchte ich gern eine Benachrichtigung auf dem Handy erhalten. Wie kann ich den Zustand, geöffnet/geschlossen/dazwischen als gut sichtbares Symbol auf einem Dashboard erscheinen lassen?

Aber es reizt natürlich die gesamte Steuerung aufzupimpen, aber das Tor ist ein Schwingtor, es irgendwie ohne Sichtkontakt auf- oder zufahren zu lassen ist ein großes Risiko. Es müsste was geben was entlang der Kanten erkennt ob etwas im Schwenkbereich ist. Eine Kamera zu montieren ist keine gute Option für mich da diese direkt auf die Straße und zum Nachbarn ausgerichtet wäre. Da kann ich tausendmal was von Video und nur Torüberwachung hinschreiben, da wäre Ärger vorprogrammiert.

Wenn es einen kleinen Dachüberstand an der Garage gäbe, dann könnte man von oben gerade runter schauen und so quasi nur einen kleinen Bereich direkt vor den Tor sehen. Eine ESP-Cam unter dem Dachüberstand würde wahrscheinlich niemand bemerken.

Ich habe meine Garagentorsteuerung mit einem D1 Mini, zwei Reed-Kontakten und einem 5V Relais realisiert. Allerding habe ich ein Sektionaltor und konnte die Kamera innerhalb der Garage installieren. Ich brauche sie nur für die Überwachung beim Schließen (und was der Paketbote nach dem Ablegen des Paketes sonst so macht). Das Öffnen ist sicherheitstechnisch unkritisch.

Genau dieses Thema gabe es im Forum gerade bereits, siehe Garagentor - wie erkenne ich, dass etwas im Weg ist und “Schließkantensicherung”

Wie bekomme ich bloss einen Input Button Helper so auf ein Dashboard das er wie ein Taster und nicht wie ein Schalter wirkt?

Es gibt einen Helfer “Taste”. Damit sollte es gehen.

Ja habe ich auch gelesen, aber bei mir kommt da immer ei Schalter raus?! Bin ich denn zu blöd?! Es wird ein “input_button…” erstellt, den kann ich einen Namen und ein Icon geben, aber keine Gestalt.

Hm… bist du sicher, daß du tatsächlich einen Helfer “Taste” erstellt hast?

input_button ist richtig. Die Entität kannst du dir dann direkt ins Dashboard holen.

Sorry, ich weiß auch nicht, jetzt hat es auf Anhieb geklappt. Habe ein Symbol und rechts neben steht dann “PRESS”. Dachte ich könnte das Symbol auch klickbar machen, aber egal.

Jetzt würde ich mir einen Template Helper bauen wollen welcher mir den Status des Garagentors anzeigt. Das editieren im UI von YAML finde ich jedoch irgendwie sperrig…

Ich baue mir die Templates immer in den Entwickler-Werkzeugen zusammen, und erst wenn alles funktioniert kopiere ich den Code in die GUI.

Kannst Du mir mal Starthilfe geben wie Du das genau machst? Ich sehe grad den Wald vor lauter Bäumen nicht und möchte vermeiden mit einer falschen Config mein HA zu zerschiessen.

Genau dafür sind diese Entwicklerwerkzeuge, damit man erstmal probieren kann.
Also links in der Seitenleiste oberhalb von “Einstellungen” sind die Entwicklerwerkzeuge. Dort dann oben in der Mitte ist “Template”. Da ist ein Block Beispielcode enthalten, den du einfach löschen kannst.
Jetzt kannst in dem nun leeren Feld deinen Code einfügen. Das Ergebnis bzw. die Fehler werden direkt angezeigt.
Wenn alles läuft, einfach alles markieren und in die Zwischenablage kopieren.
Jetzt kannst du in der GUI einen Helfer vom Typ Template erstellen und den Code aus der Zwischenablage einfügen. Speichern - Das war’s.

1 „Gefällt mir“

Ich habe noch eine zweite Option. Bei der Firmware TASMOTA (kann man oft auf shellies aufspielen) gibt es eine Steuerung für Rolladen. Die kann auch mit dem drückerzeug eines Garagentores umgehen und meldet sauber die Position zurück. Dann muss man im HA gar nichts mehr machen. Das TASMOTA ist aber ein wenig nerdy.

Vielen Dank, das hatte ich nicht gewusst und war genau was ich gesucht hatte! Habe meinen Template Sensor nun bauen können. Auch das mit den Button konnte ich lösen, auch wenn ich nicht sicher bin ob ich es nun richtig einsetze, man kann Dinge ja immer auf sehr viele, verschiedene Arten erledigen.

Um dem Button eine Funktion zuzuweisen habe ich ein Script erstellt, welches das drücken einer Taste am Toröffner-Kontakt über den Shelly UNI simuliert, indem es den Ausgang schließt, kurz wartet (1 Sekunde) und wieder öffnet, so wie ein Taster eben:

garagentor_offnen_schliesen:
  sequence:
  - target:
      entity_id: switch.garagedoor_switch_0
    action: switch.turn_on
  - delay: 00:00:01
  - target:
      entity_id: switch.garagedoor_switch_0
    action: switch.turn_off
  alias: Garagentor öffnen/schließen
  description: ''

Diese Sequenz hätte ich auch in eine Automation einbauen können, aber irgendwie dachte ich das ich die so evtl. mehrfach nutzen kann? Oder geht ein “Taster” noch einfacher mit einem Shelly?

Dann habe ich eine Automation dafür erstellt, welche beim Statuswechsel des “Soft-Buttons” im HA dieses Script ausführt:

alias: Garagentor Auf/Zu
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_button.garagentor_taster
conditions: []
actions:
  - action: script.garagentor_offnen_schliesen
    metadata: {}
    data: {}
mode: single

Auch hier zweifle ich ob ich das richtig gemacht habe, oder es noch viel einfacher, besser, richtiger geht?

In der UI sieht das nämlich irgendwie seltsam aus, aber vielleicht störe ich mich auch einfach nur zu sehr an der Optik?

Apropos Optik - was mich jetzt noch umtreibt ist eine schöne Integration im Dashboard. Ich stelle mir vor das ich dort ein touchsensitives Icon eines Garagentors sehe, welches zugleich den Zustand deselben anzeigt. Also z.B. “geschlossen” mit einem Icon welches ein geschlossenes Tor zeigt.
Tippe ich nun auf das Icon, soll das Tor aufgehen und das Icon am besten eine animierte Öffnung zeigen.
Tippe ich währenddessen nochmal, soll das Tor halboffen symbolisiert stehen. Würde ich dann nochmal tippen, geht es wieder zu und zeigt eine entsprechende Schließ-Animation an.
Wate ich bis das Tor ganz auf ist, soll das statische Icon dies auch entsprechend darstellen. Gleiches in Schließrichtung. Also ich möchte klar visuell zwischen einem statischen Zustand und dem während öffnen/schließen unterscheiden können, evtl. auch durch eine besondere Farbgebung des Icons. Sollte ich das Tor in der Bewegung stoppen, sollte das nochmal gesondert mit einem Warnsymbol dargestellt werden. Auch wenn das Tor aufgrund eines Hindernisses stoppt.
Für letzteres habe ich noch keine Erkennung, außer evtl. sowas wie eine zeitgesteuerte Überwachung, also so: Wird das Tor auf- oder zugefahren muss nach einer gewissen Zeit eine der Endpositionen erreicht werden. Ist das nicht der Fall, liegt eine Störung vor.

Für die externe Hinderniserkennung habe ich mir inzwischen mal eine ESP32-CAM zugelegt. Erste Experimente damit, z.B. Einbindung über ESPHome im HA, waren schon erfolgreich. Was jetzt noch fehlen würde wäre eine Objekterkennung, also nach Montage oberhalb vom Garagentor (Schwingtor) eine Funktion mit der man über die Kamera beim auslösen des Öffnen/Schließen Tasters abfragen kann ob sich ein Objekt in einem bestimmten Erfassnungsbereich, dem Schwenkbereich, des Tores befindet. Ich habe noch keine Ahnung wo und wie ich eine solche Erkennung hinbekomme, meine Vorstellung wäre das ich diese “trainiere” indem ich ein Bild mache in dem der Schwenkbereich frei ist und wann immer ein Bild von der CAM angefordert wird die Software erkennen kann ob da was drin ist was nicht hin gehört?
Ich brauche ja keine permanente Überwachung, soll ja keine Bewegungserkennung sein. Es reicht ja völlig vor und während der Fahrt des Tores immer wieder ein Bild anzufordern (alle 0,2 - 0,5 Sekunden)?

Ich habe eine sehr ähnliche Situation (segmenttor) und habe es wie folgt gelöst: ein shelly 1 mini habe ich an den Taster Eingang der Torsteuerung (novoferm) angeschlossen. Am segmenttor habe innen eine magneten vom shelly door-window angeklebt und jeweils einen door-window sensor an die offen bzw. Geschlossen endpunkte platziert sodass die Positionen ganz offen und ganz geschlossen erkannt werden. Im Home assistant habe ich im dashboard eine chipcard mit den farben rot = offen, grün = zu, Orange = irgendwo dazwischen sowie Benachrichtigung wenn tor länger als 15 Minuten offen ist…nur mal so als Beispiel

Ja, eine eindeutige Farbgebung (Hintergrundfarbe) fände ich auch klasse. Ich blicke nur noch nicht durch was die richtige Card wäre? Mushroom, Button-Card, …?! Es muss was sein wo man mittels Template die Hintergrundfarbe dynamisch zuordnen kann.

Ja, es handelt sich um eine Mushroom Chip Card: Folgender Code für das Symbol:

{% if (is_state('binary_sensor.fensterkontakt_1_window', 'on') and
is_state('binary_sensor.fensterkontakt_16_window', 'on')) %}
  mdi:garage-alert
{% elif is_state('binary_sensor.fensterkontakt_1_window', 'off') %}
  mdi:garage
{% else %}
  mdi:garage-open
{% endif %}    

und folgender Code für die Farbe:

{% if (is_state('binary_sensor.fensterkontakt_1_window', 'on') and
is_state('binary_sensor.fensterkontakt_16_window', 'on')) %}
  orange
{% elif is_state('binary_sensor.fensterkontakt_1_window', 'off') %}
  green
{% else %}
  red
{% endif %}

Im Dashboard sieht das dann so aus (s. Garagensymbol).

Noch ein Hinweis zum Thema Sicherheit: Der Home Assistant wird ja mit quasi zu einer Art Schlüssel für die Garage (und die Shelly App übrigens auch). Also aufpassen: Fall jemand Dein Handy in die Finger bekommt, sind sprichwörtlich Tür und Tor geöffnet. Im HA habe ich das so gelöst, dass ich NICHT auf das Icon klicken kann, sondern an einer bestimmten Stelle eine weitere Chip-Karte (schwarzes Icon auf schwarzem Untergrund) auf das man lange (“Verhalten bei Festhalten”) drücken muss, damit die Aktion ausgeführt wird. Ist sicher nicht perfekt, aber zumindest mal nicht ganz so offensichtlich Wenn jemand eine bessere Idee hat würde es mich freuen

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

Dein Handy mit einem PIN schützen?! Wenn Du dein Handy ungeschützt lässt (geht das heutzutage überhaupt noch?) Ist das Garagentor wohl das geringste Problem…

Wie ist es, wenn jemand den Haustürschlüssel in die Finger bekommt? Hat der auch eine zusätzliche PIN als Schutz oder sperrt man den in solchen Fällen Remote?

Einen Schlüssel kann man in wenigen Sekunden kopieren. Häufig reicht schon ein gutes Foto. :wink:

Ich denke ich sollte für den Zustand meines Garagentors irgendwie einen Sensor erzeugen. Dieser sollte dann anhand der vorhandenen Endschalter ausgeben in welchem Zustand sich mein Tor gerade befindet.

Reizvoll wäre natürlich die gesamte Chamberlain Motorlift ML700 Steuerung auszukoppeln und den Motor direkt über einen entsprechenden Shelly oder was auch immer anzusteuern. Zum einen könnte man da die Fahrtrichtung klar vorgeben (so muss man immer ein wenig raten) zum anderen sollen bestimmte Motorsteuerungen sogar in der Lage sein eine Wunschposition anzufahren (wobei mir noch nicht klar ist wie genau die das machen wollen, ohne Positionssensor?). So könnte man auch eine Automation “Entlüften” erzeugen, welche das Tor, wenn man das Auto z.B. nach einem starken Regenguß in der Garage abgestellt wird, für eine Zeitlang noch einen Spalt offen lässt.

Einzig eine kraftbasierende Hinderniserkennung hat eine solche Steuerung wohl nicht. Ggf. könnte man über integrierte Stromsensoren zumindest einen rudimentären Schutz herstellen (wenn Tor blockiert, dann zieht es mehr Strom als üblich). So einfach ist das aber auch nicht, da die Stromabnahme nicht linear über den Laufweg des Tores ist. Besser wäre natürlich es so zu machen wie Chamberlain mit seiner eigenen Steuerung. Da sind Hall-Sensoren um das Kettenrad, die nehmen Drehrichtung und Drehimpuls auf. Zusätzlich sind Stromsensoren verbaut. Dreht sich der Antrieb also nicht weiter obwohl der müsste, liegt eine Störung vor. Gleiches bei zu hoher Stromabnahme. Zusätzlich zu dieser Sicherung brauche ich aber eh noch eine Hinderniserkennung für den Fahrtweg.

In der Doku von HA habe ich die “Cover” Integration entdeckt, welche auch wohl für Garagentorsteuerungen vorgesehen ist. Mit “Cover” wird wohl alles bezeichnet was einer beweglichen Abdeckung dient, also vom Rolladen, über Jalousie bis zur Toren und Türen.

Wenn ich es richtig verstanden habe kann diese Integration einen Sensor abfragen welcher folgende Status liefert:

  • opening: The cover is in the process of opening to reach a set position.
  • open: The cover has reached the open position.
  • closing: The cover is in the process of closing to reach a set position.
  • closed: The cover has reached the closed position.
  • unavailable: The entity is currently unavailable.
  • unknown: The state is not yet known.

Für meine Begriffe fehlt da aber noch ein Status, nämlich stopped? Die Integration geht ja sonst davon aus das sich das Cover entweder im Endzustand befindet, oder auf dem Weg dahin. Aber man kann es ja auch zwischendrin stoppen?

Falls vorhanden kann man der Integration wohl auch eine Position mit angeben, welche sich zwischen 0 und 100 befindet. Um eine Schwenktor-Position abzufragen könnte man einen Drehwinkel-Encoder (einfachste Variante wäre ein Potentiometer) an einem der Lager des Tores befestigen. Das wäre natürlich die Premium-Variante.

Unabhängig davon würde ich nun versuchen einen Template-Sensor zu erstellen welcher abhängig von den Endschaltern und des letzten Tor-Status den aktuellen Status gemäß der Cover-Integration liefert.

Die Endpositionsschalter habe ich an einem Shelly-UNI als Digitaleingänge verkabelt und den Shelly so eingestellt das die Eingänge als “Switch” und “Detached” sind, also unabhängig von den Relais arbeiten. Ist das Tor geschlossen meldet der als “garagedoor-position-closed” benamte Eingang den Zustand “ON”:

Öffne ich nun das Tor, geht er auf “OFF” (mit ein wenig prellen, heißt das er einige Male zwischen ON und OFF hin und her wechselt bis der Magnet weit genug weg gefahren ist, das macht es etwas tricky!).
Sobald das Tor vollständig geöffnet ist, geht der Eingang “garagedoor-position-opened” auf “ON”.

Beide Eingänge liefere ich als Entitäten zu HA, wo sie als “binary_sensor” verfügbar sind. Schaue ich über die Developer tools den Status nach, sehe ich ihn auch exakt so wiedergegeben:

Nun erzeuge ich in der configuration.yaml (ich habe es in eine separate Datei ausgelagert):

template:
  - sensor
    - name: garagedoor_status
      state: >-
        {% if is_state('binary_sensor.garagedoor_garagedoor_position_opened', 'on') %}
          {{ 'open' }}
        {% elif is_state('binary_sensor.garagedoor_garagedoor_position_closed', 'on') %}
          {{ 'closed' }}
        {% else %}
          {{ 'unknown' }}
        {% endif %}

Damit bekomme ich schonmal die Endpositionen. Ein Zustand in dem beide Sensoren “ON” liefern ist technisch nicht möglich, das wäre wenn eine Fehlerzustandsabfrage. Aber wenn beide “OFF” sind kann das bedeuten “Tor fährt auf” oder “Tor fährt zu” oder “Tor steht in einer Zwischenposition”.

Zum entprellen der Reed-Kontakte kann man wohl die “for:” Anweisung nutzen, die besagt das eine Zustandsänderung eines Sensors erst nach einer gewissen Weile, wenn dieser Zustand stabil bleibt, von HA verarbeitet wird. Es heißt: “In Home Assistant, the is_state condition in an automation can be “debounced” or “filtered” to prevent it from triggering too frequently due to minor fluctuations in the state of an entity. This is achieved by using the for: parameter within the is_state condition. Essentially, you specify a duration for which the state must be stable before the automation is triggered.”

Ich sehe aber nicht wie ich eine Debounce-Zeit mittels dem “for:” attribute in das is_state() Kommando einfügen könnte?
So wie es aussieht muss ich wohl einen neuen, entprellten Sensor auf Basis der vorhandenen Reed-Sensoren erstellen.

Natürlich kann man die Torsteuerung beliebig komplex gestalten aber ich habe das ganz einfach im ESPHome-Teil gemacht mit Debouncing über „filters“ und zwei Events (“on_release:” und “on_press:”) und bin zufrieden damit. „Gestoppt“ wird leider nicht angezeigt aber damit kann ich leben. Wichtig ist mir, dass „Offen“ und „Geschlossen“ korrekt angezeigt werden.

binary_sensor:
# Reed-Kontakt für Tor vollständig geöffnet
  - platform: gpio
    name: "Garage Rolltor Offen"
    device_class: garage_door
    id: garagentor_tor_open_sensor
    pin: 
      number: D5
      inverted: true
    filters:
      - delayed_off: 500ms      
      - delayed_on: 100ms      
    on_release:
      - text_sensor.template.publish:
          id: garagentor_tor_status
          state: "Geöffnet"
      - script.execute: door_opened
    on_press:
      - text_sensor.template.publish:
          id: garagentor_tor_status
          state: "Tor schließt sich"
      - script.execute: door_closing

# Reed-Kontakt für Tor vollständig geschlossen
  - platform: gpio
    name: "Garage Rolltor geschlossen"
    device_class: garage_door
    id: garagentor_tor_closed_sensor
    pin: 
      number: D6
      inverted: true
    filters:
      - delayed_off: 500ms      
      - delayed_on: 100ms      
    on_release:
      - text_sensor.template.publish:
          id: garagentor_tor_status
          state: "Geschlossen"
      - script.execute: door_closed
    on_press:
      - text_sensor.template.publish:
          id: garagentor_tor_status
          state: "Tor öffnet sich"
      - script.execute: door_opening


text_sensor:
  - platform: template
    name: "Garagentor Tor-Status"
    id: garagentor_tor_status
    lambda: |-
      if(!id(garagentor_tor_closed_sensor).state){
        return {"Geschlossen"};
      } else if (!id(garagentor_tor_open_sensor).state){
        return {"Geöffnet"};
      } else {
        return {"In Bewegung"};
      }
    update_interval: 10s