Kamera steuert Garagentor an

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
Rob69
Beiträge: 73
Registriert: 26. Feb 2021 07:38
Answers: 0

Kamera steuert Garagentor an

Beitrag von Rob69 »

Hallo an alle,

Ich brauch mal wieder eure Hilfe

Ich bin momentan am überlegen, ob ich von meiner Kamera in der Einfahrt das Gargentor öffnen zu lassen.
Das heißt wenn wir mit dem Auto in die Einfahrt Richtung Garage fahren wird das Auto von der Kamera erfasst und das Tor fährt automatisch hoch!
Damit es nur auffährt wenn es "ZU" ist habe ich einen Magnetkontakt an das Tor gebaut, welcher anzeigt ob das Tor "ZU" oder "AUF" ist.
Ob dies wirklich Praktikabel ist wird erst später Zeigen!
Nun zu meinem Problem!
Meine Sorge ist das Garagentor welches über einen Impuls angesteuert wird, eventuell unkontrolliert stoppt oder zufährt
Denn bei jedem Impuls geht es auf-stoppt oder geht wieder zu.
Deshalb würde ich gerne diese Rule ( am besten das Item ) nach Betätigung für einige Zeit blockieren!
Zu Versuchszwecken wird momentan ein Relais eines Shellys ( Solarthermie Warmwasser) an, welches ich nicht brauche,
Vielleicht hat ja jemand eine Idee .

Meine ersten Versuche mit einer Rule

Code: Alles auswählen

 rule  "Kamera schaltet Garagentor"
          when
          Item Einfahrt_KameraCarAlarm   changed from OFF to ON  
                 then 
               if (Garagentor_ueberwachung .state == ON)   
                     {sendCommand(Solarthermie_Warmwasser, ON)}
                     createTimer(now.plusSeconds (5)) 
                     [|
                  {sendCommand(Solarthermie_Warmwasser , OFF)} 
                ]         

           end 
Vorab besten dank Rob69

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Kamera steuert Garagentor an

Beitrag von udo1toni »

Du brauchst einen Impuls zum ansteuern des Torantriebs. Die einfachste Variante wäre, das im Shelly einzustellen.
Weiterhin musst Du sicherstellen, dass der Shelly nur einmal innerhalb eines bestimmten Zeitfensters ausgelöst wird.
Dieses Zeitfenster ergibt sich zum einen aus der Laufzeit des Motors, um das Tor von vollständig geschlossen nach vollständig offen zu bewegen, zum anderen durch Zeit, welche Dir maximal bleiben soll, um mit dem Auto das Tor zu passieren :)
Eine einfache Rule hierfür könnte so aussehen:

Code: Alles auswählen

var Timer tTor = null

rule "Tor öffnen"
when
    Item Einfahrt_KameraCarAlarm changed from OFF to ON
then
    if(Garagentor_ueberwachung .state != ON)    // Tor nicht geschlossen -> Abbruch
        return;
    if(tTor !== null)                           // Timer läuft -> Abbruch
        return;
    Solarthermie_Warmwasser.sendCommand(ON)     // OFF-Command im Shelly
    tTor = createTimer(now.plusSeconds(180), [| // Starte Timer 3 Minuten
        tTor = null                             // Lösche Zeiger auf Timer 
    ])
end
Die Kamera erkennt das Auto und startet die Rule. Das Tor ist geschlossen, was durch den Zustand ON signalisiert wird. Ist das Tor nicht geschlossen, bricht die Rule ab.
Die zweite Bedingung prüft, ob der Zeiger auf den Timer ungleich null ist (weil hier mit null verglichen wird, lautet der Vergleich !==, nicht !=). Ist das der Fall, so läuft der Timer noch und die Rule bricht ab.
Danach ist klar, dass das Tor geöffnet werden muss, der Shelly bekommt den ON-Befehl. Im Shelly ist programmiert, dass z.B. nach einer Sekunde das Relais wieder abfällt.
Außerdem wird der Timer gestartet. Damit ist die Rule beendet.

Für die folgenden drei Minuten kann diese Rule den Shelly nicht mehr ansteuern, weil die Bedingung tTor !== null erfüllt ist, solange der Timer läuft.

Um den Shelly automatisch auf OFF zu setzen, kannst Du dem Item Solarthermie_Warmwasser auch über die Metadaten einen Expiration Timer hinzufügen, den Du mit 1s, commmand=OFF parametrierst. Dadurch wird automatisch eine Sekunde nach jedem ON-Befehl ein OFF-Befehl gesendet.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Rob69
Beiträge: 73
Registriert: 26. Feb 2021 07:38
Answers: 0

Re: Kamera steuert Garagentor an

Beitrag von Rob69 »

Guten Morgen,

Erstmal danke!

Ich habe es gestern Abend mal mit meiner Rule ( Befehl auf das Garagentor bezogen) probiert.
Dabei habe ich bemerkt , das die Rückmeldung " Tor offen" vom Shelly Eingang ( Garagentorüberwachung) obwohl das Tor schon auffährt mit
mehreren Sekunden Verzögerung kommt!
Deshalb wollte ich auch diese Rule sperren.

Hier meine Rule von Gestern

Code: Alles auswählen

       rule  "Kamera schaltet Garagentor"
          when
          Item Einfahrt_KameraCarAlarm   changed from OFF to ON  
                 then 
               if (Garagentor_ueberwachung .state == ON)   
                    sendCommand (Garagentor, ON)
                       

           end 
Das Auto Off hatte ich schon immer im Shelly hinterlegt!

Wer dies erstmal ausprobieren.

Besten dank wie immer an Udo1Toni

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Kamera steuert Garagentor an

Beitrag von udo1toni »

Nein, das ist unnötig.

Die eine Rule ist hier völlig ausreichend. Ist das Tor zu, wird ja nicht einfach der Auf-Befehl gesendet, sondern zunächst geprüft, ob der Timer läuft. Dieser wird unmittelbar nach dem Startbefehl gestartet.

In dem Zusammenhang ist es evtl. noch wichtig zu erwähnen, dass seit openHAB 3 jede Rule (egal, wie sie angelegt wurde) exakt einen Thread zur Verfügung hat. Das bedeutet, eine Rule kann nicht gleichzeitig mehrfach ausgeführt werden.
Die Rule führt aber zwingend nach dem sendCommand auch den Timerstart aus, und erst wenn der Timer bereits angelegt ist endet die Ausführung der Rule. Selbst wenn die Rule also mehrfach getriggert werden sollte (dann wird sie auch mehrfach ausgeführt, aber eben nacheinander, nicht parallel), wird beim zweiten Durchlauf der Timer bereits aktiv sein und die Rule wird abgebrochen, probiere es gerne aus. :) (zum Testen könntest Du mehrere Trigger zuordnen und dann versuchen, diese Trigger möglichst zeitgleich auszulösen, damit die Rule mehrfach ausgeführt wird)
Hier eine erweiterte Version der Rule:

Code: Alles auswählen

var Timer tTor = null

rule "Tor öffnen"
when
    Item Einfahrt_KameraCarAlarm changed from OFF to ON or
    Item Test1 received update or
    Item Test2 received update
then
    logInfo("tor","Rule gestartet")
    if(Garagentor_ueberwachung .state != ON) {   // Tor nicht geschlossen -> Abbruch
            logInfo("tor","Torkontakt meldet offen, Abbruch")
        return;
    }
    if(tTor !== null) {                          // Timer läuft -> Abbruch
        logInfo("tor","Timer vorhanden, Abbruch")
        return;
    }
    logInfo("tor","Startbefehl wird gesendet")
    Solarthermie_Warmwasser.sendCommand(ON)     // OFF-Command im Shelly
    tTor = createTimer(now.plusSeconds(180), [| // Starte Timer 3 Minuten
        logInfo("tor","Timer hat Zielzeit erreicht. Torsteuerung freigegeben")
        tTor = null                             // Lösche Zeiger auf Timer 
    ])
end
Nachdem die Rule eingelesen wurde, ist die Variable tTor null, dann kannst Du die Rule beliebig oft innerhalb beliebig kurzer Zeit starten. Du wirst für jeden Trigger eine Zeile erhalten, dass die Rule gestartet wurde, aber nur eine Meldung, dass der Startbefehl gesendet wurde, ab dem zweiten Start bekommst Du die Meldung, dass der Timer vorhanden ist, sobald der Türkontakt den Offen-Zustand meldet, bekommst Du diese Meldung, nach drei Minuten bekommst Du exakt eine Meldung, dass die Torsteuerung wieder freigegeben ist.

Wichtig, im Hinterkopf zu behalten: die globale Variable tTor wird beim Einlesen der Datei initialisiert, auch wenn der Timer bereits gestartet wurde. Beim initialisieren geht der Inhalt verloren und der Timer könnte ein zweites Mal gestartet werden. Du solltest also nicht mit dem Auto durch das Tor fahren, während Du die Rules-Datei lädst (aber dieser Zusammenhang dürfte eher selten auftreten ;) )
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten