Ankündigung

Einklappen
Keine Ankündigung bisher.

KNX update wird bei geschachtelt aufgerufenen Logiken nicht mehr getriggert

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

    KNX update wird bei geschachtelt aufgerufenen Logiken nicht mehr getriggert

    Hallo zusammen,

    Ich habe folgendes Phänomen:

    Seit meinem Wechsel von smarthome.py zu SmarthomeNG funktioniert das automatische Schließen meines Garagentores nicht mehr. Das Komische ist, dass das alles ganz normal funktioniert, wenn ich die GaragenSteuerung über die Visu triggere:

    D.h.
    Visu
    -> triggert Logik “GaragenSteuerung” -> triggert sh.Garage.zielstatus(1) -> Item Garage.Tor.impuls = True via Logic -> triggert KNX 3/3/0 auf ‚1‘ (und 0.5s später wieder auf ‚0‘)
    —> alles ok.

    Logik „Abwesend“
    -> triggert Logik “GaragenSteuerung” -> triggert sh.Garage.zielstatus(1) -> Item Garage.Tor.impuls = True via Logic -> nichts passiert
    —> nicht ok.


    Hab ihr irgendeine Idee, woran das liegen könnte? Kann das irgendwie mit den Prioritäten der threads zu tun haben?

    Vielen Dank,
    //giase
    Zuletzt geändert von Giase; 23.09.2019, 19:24.

    #2
    Woran es liegen könnte weiß ich nicht. Aber vielleicht hilft es ein bisschen logging in update_item des knx-Plugins zu packen. Dann weißt du ob der Workflow bis dahin kommt und was anders ist als beim Triggern per Visu.

    VG
    Thomas

    Kommentar


      #3
      Hi,
      Bis auf debug-level des Items sieht alles gleich aus:

      "Abwesend trigger"

      2019-09-16 22:21:18 CEST DEBUG scheduler logics.HomeStatusNacht Triggering logics.GaragentorSteuerung - by: Item source: {'details': 'Logic:None', 'item': 'Garage.Tor.zielstatus'} dest: None value: 1 -- (scheduler.py:trigger:233)
      2019-09-16 22:21:18 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung Garagentor Steuerung -- (garagentor_steuerung.py:debug_output:19)
      2019-09-16 22:21:18 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung source_item: Garage.Tor.zielstatus -- (garagentor_steuerung.py:debug_output:19)
      2019-09-16 22:21:18 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung Sending 1 Impuls -- (garagentor_steuerung.py:debug_output:19)
      --> 2019-09-16 22:21:18 CEST DEBUG item logics.GaragentorSteuerung Item Garage.Tor.impuls = True via Logic None None -- (item.py:__update:2207)


      --> 2019-09-16 22:21:18 CEST DEBUG item logics.GaragentorSteuerung Item Garage.Tor.impuls = False via Logic None None -- (item.py:__update:2207)


      "Manuell"

      2019-09-16 22:21:44 CEST DEBUG scheduler Main Triggering logics.GaragentorSteuerung - by: Item source: {'details': 'Visu:192.1xx.1xx.xx:xxxxx', 'item': 'Garage.Tor.zielstatus'} dest: None value: 1 -- (scheduler.py:trigger:233)
      2019-09-16 22:21:44 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung Garagentor Steuerung -- (garagentor_steuerung.py:debug_output:19)
      2019-09-16 22:21:44 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung source_item: Garage.Tor.zielstatus -- (garagentor_steuerung.py:debug_output:19)
      2019-09-16 22:21:44 CEST DEBUG garagentor_steuerung logics.GaragentorSteuerung Sending 1 Impuls -- (garagentor_steuerung.py:debug_output:19)
      --> 2019-09-16 22:21:44 CEST DEBUG item logics.GaragentorSteuerung Item Garage.Tor.impuls = True via Logic None None -- (item.py:__update:2207)



      --> 2019-09-16 22:21:44 CEST DEBUG __init__ Main BM': 1.1.11 set X/Y/1 to 01 -- (__init__.pyarse_telegram:339)

      --> 2019-09-16 22:21:44 CEST DEBUG item logics.GaragentorSteuerung Item Garage.Tor.impuls = False via Logic None None -- (item.py:__update:2207)

      --> 2019-09-16 22:21:44 CEST DEBUG __init__ Main BM': 1.1.11 set X/Y/1 to 00 -- (__init__.pyarse_telegram:339)


      knxtool-logging:
      Im oberen Fall passiert nichts, im unteren Fall folgendes

      Write from 0.0.3 to X/Y/0: 01
      Write from 1.1.11 to X/Y/1: 01 (zugehöriger Status)
      Write from 0.0.3 to X/Y/0: 00
      Write from 1.1.11 to X/Y/1: 00

      -> fehlt bei "Abwesend trigger", ist vorhanden bei "Manuell"


      Des Weiteren hat Garage.Tor.impuls folgende config:

      Code:
      Garage:
          Tor:
              impuls:
                  visu_acl: rw
                  enforce_updates: true
                  type: bool
                  knx_dpt: 1
                  knx_send: X/Y/0
                  # knx_listen: X/Y/1
                  knx_listen: X/Y/0
      Fällt euch dazu was ein?

      Gruß und Danke!
      Zuletzt geändert von bmx; 24.09.2019, 10:20.

      Kommentar


        #4
        Wie sieht denn die Logik im Detail aus?

        Kommentar


          #5
          Hi,

          Die Logik befindet sich im Anhang.

          //Christof
          Angehängte Dateien

          Kommentar


            #6
            Ich vermute, das die Logik, von der aus Du triggerst recht lange braucht um fertig zu werden, kann das sein? Wie sieht die Logik die triggert denn aus?

            Du könntest in der Funktion update_item vom knx Plugin eine debugzeile einbauen um zu schauen, ob diese Funktion überhaupt aufgerufen wird durch die 'Abwesend Trigger' --> garagentor logik.

            Zu finden unter plugins/knx/--init__.py Zeile 563
            Zuletzt geändert von bmx; 24.09.2019, 16:48.

            Kommentar


              #7
              Danke für den Hinweis! Die triggernde Logik braucht schon ein bisschen, und lässt auch jede Menge knx-Befehle los. Allerdings ist das Gargentor das letzte, das getriggert wird:

              # Close Garage
              sh.Garage.Tor.zielstatus(1)

              # end of logic


              (sag Bescheid wenn du die ganze Logik sehen willst)

              Wo würde ich denn die update_item-debugzeile einbauen? (also unter welchem Pfad lebt das?)
              Evtl versuche ich mal, einen sleep(X) vor dem Garagentor-trigger einzubauen, nur um zu sehen ob das evtl das Problem behebt.

              Kann mir jemand sagen, ob/wie ich die Priorität des knxtool hochsetzen kann, nur um zu sehen, ob da was passiert.

              Kommentar


                #8
                Update: Ich habe das mit dem time.sleep(3) vor sh.Garage.Tor.zielstatus(1) ausprobiert und siehe da, jetzt funktioniert es.
                Es scheint also, das System ist zu beschäftigt, um den trigger loszuwerden und abzuarbeiten.

                Hat jemand eine Idee wie man das sauber lösen kann?

                Kommentar


                  #9
                  Nur Randüberlegung weil Du schreibst Du hast einiges an knx Befehlen: Welche KNX Schnittstelle nutzt Du denn? Hast Du beim knxd irgendwelche delays gesetzt? (Nicht das Dir die Schnittstelle schlicht überfahren wird)
                  Hat aber mit Deinem Problem oben nicht unbedingt was zu tun.

                  Kommentar


                    #10
                    Das ist eine Siemens IP Schnittstelle 5WG1148-1AB22 (Raspi und Schnittstell im gleichen Netz, per Ethernet). Ich habe für knxd im Prinzip Standard-Config, mir wäre also nix von delays bewusst.
                    [UPDATE]: sehe grade ich habe ein —send-delay=30 in meiner knxd config! -> was ist ein normaler Wert? Ganz weglassen?

                    Wäre aber interessant das besser zu verstehen, könnte ja durchaus sein dass der Garagentor-Impuls nicht das einzige ist, das verloren geht.

                    Was sind denn die Stellschrauben für knxd, an denen ich da mal drehen könnte? Hatte auch überlegt die prio von knxd hochzusetzen, müsste doch auch irgendwie gehen, oder?
                    Zuletzt geändert von Giase; 24.09.2019, 18:55.

                    Kommentar


                      #11
                      Das mit Prio hochdrehen nützt nix, wenn die Schnittstelle das nicht abfrühstücken kann. Es gibt im knxd Unterforum da einige Threads zu finden. Prinzipiell ist es immer eine gute Idee das knx Telegramm aufkommen zu reduzieren wo es geht. Also idealerweise z.B. Jalousien die gleichzeitig funktionieren sollen dann eben zu Gruppen zusammenzufassen und mit einer Gruppenadresse dann alle ansprechen.
                      Einige Logiken kann man verzögert triggern wenn die nicht sofort benötigt werden. Du kannst da einen dt=... Parameter mitgeben um z.B. eine Logik zu triggern zur Ausführung in 15 Sekunden

                      Kommentar


                        #12
                        Ok, Danke für die Tips! Ich habe jetzt das —send-delay von =30 auf =0 gesetzt (ganz weglassen geht wohl nicht). Das funktioniert bis jetzt und löst erstmal das Problem mit dem Garagentor.
                        Ich gebe dir Recht dass ich für diese Fälle versuchen sollte, die load zu minimieren.

                        Danke für deine/eure Hilfe!
                        //giase

                        Kommentar

                        Lädt...
                        X