Ankündigung

Einklappen
Keine Ankündigung bisher.

Keymatic: ungewollter "Tag der offenen Tür"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Codebeispiel] Keymatic: ungewollter "Tag der offenen Tür"

    Hallo zusammen,

    beim Einbinden meiner Keymatic in openHAB und homegear bin ich auf ein Problem gestoßen:
    immer wenn ich die openHAB items aktualisiere oder openHAB neu starte, erhält die Keymatic den Befehl, die Tür komplett zu öffnen
    Meine items Datei sieht so aus:
    Code:
    Switch itmKeymaticOpen "Haustür"   {homematic="address=JExxxxxxx, channel=1, parameter=OPEN, forceUpdate=true"}
    Switch itmKeymaticState       "Haustürschloss [MAP(keymatic.map):%s]"    {homematic="address=JExxxxxxx, channel=1, parameter=STATE, forceUpdate=true"}
    Über das itmKeymaticOpen Binding lässt sich die Tür komplett öffnen (=Tür springt auf).
    Über das itmKeymaticState Binding lässt sich die Tür verriegeln und entriegeln (=ohne aufzuspringen).

    Offensichtlich wird beim neuladen der items Datei eine Art Grundstatus an itmKeymaticOpen übergeben, was dazu führt, dass eine verriegelte Tür komplett geöffnet wird.
    Dies würde auch bei einem Neustart nach Stromausfall zu einer offenen Tür führen.
    Verständlicherweise nicht akzeptabel.

    Habe lange gesucht, um die Ursache für die sich öffnende Haustür zu finden.
    Erst nachdem ich itmKeymaticOpen aus der items Defintion genommen habe, blieb die Tür zu.
    Ich brauche ein solches Item, weil ich in bestimmten Situation die Tür schon innerhalb einer Rule öffnen möchte. Aber bitte nicht von allein!
    Ich möchte aber wiederrum (allein aus Sicherheitsgründen) auch keinen Knopf zum Türöffnen auf der GUI haben.

    Hat jemand einen Vorschlag, welche Art von Item das richtige wäre, oder kann mir jemand ein Beispiel seiner Implementierung zeigen?

    Danke
    wbuh

    #2
    Da ich vor 2 Tagen meine Keymatic bekommen habe bin ich aktuell damit auch am spielen.
    Kann dieses Verhalten jedoch nicht nachvollziehen. Gerade testweise openhab komplett neu gestartet. Keine "Reaktion" der Keymatic darauf, sprich es ist abgeschlossen geblieben.
    Hier meine Items:
    Code:
    Switch KeyMatic_State    "Haustüre [MAP(HM-Sec-Key-S.map):%s]"    <garagedoor> (EG_Flur) {homematic="address=Mxxxxxxxx, channel=1, parameter=STATE"}
    Switch KeyMatic_Open    "Haustüre öffnen"    <door> (EG_Flur) {homematic="address=Mxxxxxxx, channel=1, parameter=OPEN, forceUpdate=true", autoupdate="false"}
    Betreibe wohl eine CCU2 und kein homegear

    Kommentar


      #3
      Hallo,

      sind Persistence Datenbanken im Einsatz? Falls ja starte doch mal testweise ohne die Datenbanken.

      Kommentar


        #4
        Kommt itmKeymaticOpen denn in einer Rule vor? Eventuell wird diese auch beim starten ausgelöst. Das Problem hatte ich mit meinem Haustürschaltriegelkontakt (KNX). Eine Regel schickt mir eine Email wenn die Tür aufgeschlossen wird. Das passierte immer beim Start (Tür war aufgeschlossen). Ich habe dann die Bedingung der Rule geändert in "rule "haustuer" when Item Haustuer changed then".

        Kommentar


          #5
          Zitat von Brain0verflow Beitrag anzeigen
          Hallo,

          sind Persistence Datenbanken im Einsatz? Falls ja starte doch mal testweise ohne die Datenbanken.
          Benutze rrd. Für
          Code:
          itmKeymaticState : strategy = everyChange, restoreOnStartup
          gibt es eine Strategie. Aber für itmKeymaticOpen hab ich die nicht.
          Problem tritt auch beim Löschen des Persistance EIntrags auf.

          Kommentar


            #6
            Bin dem Rätsel ein Stück näher gekommen:
            Nachdem openHAB die items Datei neu lädt, beginnt ein Feuerwerk an item Initialisierungen.
            Dabei wird bei den zwei Funkfernbedienungen festgestellt:
            Code:
            2015-09-14 07:26:05 - itmFB_Fxxxx_Ch1_PressLong state updated to CLOSED
            2015-09-14 07:26:05 - itmFB_Fxxxx_Ch2_PressShort state updated to CLOSED
            Es drückt aber niemand auf den Knopf.
            Diese Events lösen aber wohl die Rule für den Öffnungsvorgang aus, weil Taste 1 die Tür öffnen soll.

            Die Rule sieht aus wie folgt:
            Code:
            rule "Haus betreten"
            when
                Item itmFB_Lxxxxx_BtnOpen_PressLong received update CLOSED or
                Item itmFB_Fxxxxx_Ch1_PressLong received update CLOSED
            then
                logInfo("verschluss.rules","Haus oeffnen")
                lock.lock() //Vermeiden, dass diese Rule während der Ausführung nochmal aufgerufen wird
                logInfo("verschluss.rules","Beginne Oeffnungsprozedur")
                // Bereich A: Alarmanlage unscharf
                
                // Bereich B: Flurlicht einschalten, falls es dunkel ist
                
                // Bereich C: Tür entriegeln und öffnen
                itmKeymaticOpen.sendCommand(ON)
                
                
                // Bereich C: Anwesenheit
                Anwesend.postUpdate(ON)
                
                
                lock.unlock()
            end
            Und so findet sich im openHAB.log dann auch
            Code:
            2015-09-14 07:26:05.631 [INFO ] [.o.b.w.i.s.WeatherJobScheduler] - Deleting weatherJob-home
            2015-09-14 07:26:05.632 [DEBUG] [a.internal.job.AbstractBaseJob] - Starting Astro DailyJob
            2015-09-14 07:26:05.634 [INFO ] [.o.b.w.i.s.WeatherJobScheduler] - Starting and scheduling weatherJob-home with interval of 30 minutes
            2015-09-14 07:26:05.699 [INFO ] [.model.script.verschluss.rules] - Haus verschliessen
            2015-09-14 07:26:05.725 [ERROR] [o.o.c.s.ScriptExecutionThread ] - Error during the execution of rule 'Haus verlassen': Cannot cast org.openhab.core.types.UnDefType to org.openhab.core.library.types.DecimalType
            2015-09-14 07:26:05.734 [DEBUG] [.b.a.internal.job.JobScheduler] - Scheduled job with name Season at 2015-09-23 10:22:00
            2015-09-14 07:26:05.828 [INFO ] [.model.script.verschluss.rules] - Haus oeffnen
            2015-09-14 07:26:05.835 [INFO ] [.model.script.verschluss.rules] - Haus verschliessen
            2015-09-14 07:26:05.838 [INFO ] [.model.script.verschluss.rules] - Beginne Oeffnungsprozedur
            Also sind die Preisfragen:
            • warum meint openHAB, es sei eine Fernbedienung gedrückt worden?
            • Wie vermeidet man das?
            • Wie kann man der Rule beibringen, sie soll in dieser Situation die Füße stillhalten?


            Die Fernbedienung ist definiert als
            Code:
            Contact itmFB_Fxxxxx_Ch1_PressShort            "Fernbedienung Fxxxxx Kanal 1 kurz"            <switch>    (FBAlle)     {homematic="address=KExxxxxxxx, channel=2, parameter=PRESS_SHORT"}
            Contact itmFB_Fxxxxx_Ch1_PressLong            "Fernbedienung Fxxxxxx Kanal 1 lang"            <switch>    (FBAlle)     {homematic="address=KExxxxxxx, channel=2, parameter=PRESS_LONG"}

            Kommentar


              #7
              Um das noch hinzuzufügen: deaktiviere ich eine der beiden Regeln (Haus verschließen oder Haus öffnen) spricht beim Neuladen der items die verbliebene Regel an und schließt das Schloß bzw. öffnet es.
              Deaktiviere ich beide Regeln, ist Ruhe im Karton.
              Ich mache also etwas bei den Regeln verkehrt.
              Aber was?

              Kommentar


                #8
                Hast du meinen Beitrag von gestern abend gelesen? Dort ist genau dein Problem beschrieben.

                Kommentar


                  #9
                  Zitat von supermaz Beitrag anzeigen
                  Hast du meinen Beitrag von gestern abend gelesen? Dort ist genau dein Problem beschrieben.
                  Hallo supermaz,

                  vielleicht hab ich etwas übersehen, aber ich habe Deinen Ansatz so verstanden, dass bei Dir die rule ausgelöst wurde über eine Statusveränderung der keymatic
                  Code:
                  rule "haustuer"
                  when Item Haustuer changed
                  then
                  Bei mir wird die Tür aber geöffnet, weil die Funktaster auslösen, diese die rule starten und innerhalb der rule dann die Tür geöffnet wird.
                  Unabhängig habe ich die rule auch mal geändert auf
                  Code:
                  rule "Haus verlassen"
                  when
                      Item itmFB_Lxxxxx_BtnLock_PressShort changed to ON or
                      Item itmFB_Fxxxxx_Ch2_PressShort changed to ON
                  then
                  was aber keine Änderung brachte, beide rules (Haus verlassen und Haus betreten werden beim neuladen der items ausgeführt.

                  Oder hab ich noch etwas bei Deinem Tipp übersehen?

                  Kommentar


                    #10
                    Hallo wbuh,

                    ich glaube schon das wir das gleiche Problem haben/hatten. Was mir dabei noch einfällt: Hast du die daten persistent und mit restoreOnStartup?

                    Code:
                    Items {
                        // persist all items once a day and on every change and restore them from the db at startup
                        * : strategy = everyChange, everyDay, restoreOnStartup
                    
                        // additionally, persist all temperature and weather values every hour
                        Temp*, Wind_Dach, Regen_Dach, Lux*, Strom*, Verbrauch*, Heizung_* : strategy = everyHour
                    }
                    Edit: Habe gerade nochmal nachgelesen, du hast schon restoreOnStartup. Den einzigen Unterschied den ich noch sehe ist, das ich MySQL verwende. Seltsam. Ich hatte damals extra die Rule auf "changed" geändert, da meine Rule auch bei jedem Neustart ausgelöst hat.

                    Gruss,

                    Matthias

                    Kommentar


                      #11
                      Hallo wbuh,

                      ich löse das Öffnen der Türe nur aus, wenn der Status der Taster von einem definierten Zustand (OFF) in einen anderen definierten Zustand (ON) wechselt.
                      Wie du erkennst, habe ich meine Taster als SWITCH angelegt.

                      Code:
                      rule "Haustuer öffnen"
                          when
                              Item Taster16_long changed from OFF to ON or
                              Item Taster19_long changed from OFF to ON
                          then
                              HaustuerSchloss_Open.sendCommand(ON)
                      end
                      Vielleicht überprüfst du auch einmal deine Taster-Items.
                      Wie ist deren Status, wenn der Taster NICHT gedrückt ist?
                      Ich vermute CLOSED. Wenn das der Fall ist, müßte die Regel beim Event "changed to OPEN" auslösen oder die Taster-Konfiguration im HM-Konfigurator geändert werden.

                      Gruß,

                      Ralf
                      Zuletzt geändert von gonzo65; 14.09.2015, 20:51.

                      Kommentar


                        #12
                        Zitat von gonzo65 Beitrag anzeigen
                        Hallo wbuh,

                        ich löse das Öffnen der Türe nur aus, wenn der Status der Taster von einem definierten Zustand (OFF) in einen anderen definierten Zustand (ON) wechselt.
                        Hallo Ralf,
                        funktioniert prima. Wusste gar nicht, dass soetwas auch geht. Danke für den Tipp

                        Gruß
                        wbuh

                        Kommentar

                        Lädt...
                        X