Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik schaltet Item aus aber KNX wieder ein

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

    Logik schaltet Item aus aber KNX wieder ein

    Moin.
    Ich taste mich gerade an das ENOCEAN-Plugin. Nun habe ich eine Logik die entsprechend schaltet:
    Code:
    # ENOCEAN Logik
    logger.info("ENOCEAN_Empfangen")
    
    if sh.ENO.Schlafzimmer.B0():
             if not sh.Schlafzimmer.Licht_Decke():
                     sh.Schlafzimmer.Licht_Decke('1')
             else:
                     sh.Schlafzimmer.Licht_Decke('0')
    Allerdings beim "Aus" wird das Item durch den Bus wieder eingeschaltet:
    Code:
    2014-12-07 16:28:22,371 INFO     ENO          ENOCEAN_Empfangen -- eno.py:<module>:2
    2014-12-07 16:28:22,382 DEBUG    Main         Item Schlafzimmer.Licht_Decke = False via KNX 1.1.7 13/1/11 -- item.py:__update:363
    2014-12-07 16:28:22,521 DEBUG    Main         knx: 1.1.7 set 13/1/11 to True -- __init__.py:parse_telegram:190
    2014-12-07 16:28:22,529 DEBUG    Main         Item Schlafzimmer.Licht_Decke = True via KNX 1.1.7 13/1/11 -- item.py:__update:363
    Jemand eine Idee?

    Gruß Marian

    #2
    ich bin schon näher drann... vermute das die Logik zu schnell hinter einander aufgerufen wird...

    Plan ist der Folgende:
    Die Logik wird getriggert mit Watch_Item = ENO.*

    Die Items senden aber immer alle 4 Werte und ich möchte nicht für jede Wippe (A0, A1, B1, B0)eine Logik programmieren.

    Ggf hat jemand eine Idee wie man es gut lösen kann. Habe schon im Forum einen Ansatz gefunden, kann dem aber noch nicht so ganz folgen.

    Kommentar


      #3
      Schwer zu sagen was da genau passiert ohne die item.conf zu kennen oder genau zu wissen was das aktuelle enocean-plugin genau sendet.

      Ich denke Du meinst diesen Thread: https://knx-user-forum.de/smarthome-...trigger-2.html

      Vielleicht aber auch nicht und es hilft Dir beim Lösungsansatz.
      Umgezogen? Ja! ... Fertig? Nein!
      Baustelle 2.0 !

      Kommentar


        #4
        Hilfe bei Logik zu ENOCEAN Plugin

        Alsoo....

        Ich habe viel getestet in letzter Zeit aber irgendwie bekomme ich keine sauber Schaltfolge hin... ich trigger also meine Logik über:
        Code:
        #ENOCEAN
        [ENO_Schlafzimmer]
                 filename = eno_Schlafzimmer.py
                 watch_item = ENO.Schlafzimmer.*
        Also wird sie Aufgrund der enforce_Updates im Item bei jedem Tastendruck und Loslassen 4* angestoßen.

        die einzelnen Funktionen haben diese Logik:
        Code:
        #B0
        if sh.ENO.Schlafzimmer.B0():
             if not sh.Schlafzimmer.Licht_Decke():
                      sh.Schlafzimmer.Licht_Decke('1')
             else:
                      sh.Schlafzimmer.Licht_Decke('0')
        Wenn ich also nun drücke, dann schaltet er mal sauber, mal nicht... lampe blinkt, geht an oder aus etc...

        mit eval am Item habe ich schon alles versucht, aber ohne Erfolg, ähnliches Verhalten und die Visu klappt nicht mehr richtig...

        Der Vollständigkeit die ganze Logik:
        Code:
        #ENOCEAN Logik Schlafzimmer
        logger.warning("ENOCEAN Logik Schlafzimmer")
        
        #A0
        if sh.ENO.Schlafzimmer.A0():
             not sh.Schlafzimmer.Aus('0')
        
        
        #B0
        if sh.ENO.Schlafzimmer.B0():
             if not sh.Schlafzimmer.Licht_Decke():
                      sh.Schlafzimmer.Licht_Decke('1')
             else:
                      sh.Schlafzimmer.Licht_Decke('0')
        
        #A1
        if sh.ENO.Schlafzimmer.A1():
             sh.Schlafzimmer.TV_Steckdose('1')
        
        
        #B1
        if sh.ENO.Schlafzimmer.B1():
          if not sh.Schlafzimmer.Steckdose():
                      sh.Schlafzimmer.Steckdose('1')
             else:
                      sh.Schlafzimmer.Steckdose('0')
        
        
        #A0B0
        if sh.ENO.Schlafzimmer.A0B0():
              logger.warning("ENOCEAN keine Funktion A0B0")
        
        
        #A1B1
        if sh.ENO.Schlafzimmer.A1B1():
             if not sh.Schlafzimmer.Nacht():
                      sh.Schlafzimmer.Nacht('1')
             else:
                      sh.Schlafzimmer.Nacht('0')
        Vieleicht hat ja jemand schon etwas in Funktion...

        Gruß Marian

        Kommentar


          #5
          Ich habs ja hier schonmal erklärt: https://knx-user-forum.de/444349-post7.html

          Code:
          [eno]
              [[switch1]]
              enocean_rx_id = 00226037
              enocean_rx_eep = F6_02_02
                  [[[A0]]]
                      type = bool
                      enocean_rx_key = A0
                      
                      [[[[licht_decke_bruno]]]]
                          type = num
                          knx_dpt = 5001
                          knx_send = 1/2/53
                          knx_listen = 1/2/53
                          eval_trigger = eno.switch1.A0
                          eval = 15 if sh.eno.switch1.A0() else None
                          enforce_updates = True
                  
                  [[[A1]]]
                      type = bool
                      enocean_rx_key = A1
          
                      [[[[licht_decke_bruno]]]]
                          type = num
                          knx_dpt = 5001
                          knx_send = 1/2/53
                          knx_init = 1/2/53
                          eval_trigger = eno.switch1.A1
                          eval = 0 if sh.eno.switch1.A1() else None
                          enforce_updates = True
          
                  [[[B0]]]
                      type = bool
                      enocean_rx_key = B0
                      
                       [[[[steckdose_nachtlicht_bruno]]]]
                          type = bool
                          knx_dpt = 1
                          knx_send = 2/2/51
                          knx_init = 2/2/52
                          eval_trigger = eno.switch1.B0
                          eval = not(sh.og.bruno.std_nachtlicht.switch()) if sh.eno.switch1.B0() else None
                          enforce_updates = true
          
                  [[[B1]]]
                      type = bool
                      enocean_rx_key = B1
                          
                      [[[[steckdose_fenster_bruno]]]]
                          type = bool
                          knx_dpt = 1
                          knx_send = 2/2/54
                          knx_init = 2/2/55
                          eval_trigger = eno.switch1.B1
                          eval = not(sh.og.bruno.std_fenster.switch()) if sh.eno.switch1.B1() else None
                          enforce_updates = true
          Mit einem Item das auf den KNX hört/sendet wird das nix. Ebenso ist das Käse dass ein Tastendruck eine Logik 4-mal aufruft.

          Enforce Updates raus aus den ENO-Tastern. Wenn Du drückst wirds TRUE, beim loslassen FALSE -> Du hast beim nächsten Drücken wieder eine Zustandsänderung und braucht dort kein enforce updates!

          Für Dich würde die Items.conf dann so aussehen:

          Code:
          #ENOCEAN
          [ENO_Schlafzimmer]
              enocean_rx_id = 00226037
              enocean_rx_eep = F6_02_02
                  [[B0]]
                      type = bool
                      enocean_rx_key = B0
                      
                      [[[Licht_Decke]]]]
                          type = bool
                          knx_dpt = 1
                          knx_send = y/y/y
                          knx_listen = y/y/y
                          eval_trigger = ENO_Schlafzimmer.B0
                          eval = not(sh.Schlafzimmer.Licht_Decke()) if sh.ENO_Schlafzimmer.B0() else None
                          enforce_updates = True
                  
                  [[B1]]
                      type = bool
                      enocean_rx_key = B1
                      
                      [[[Licht_Decke]]]]
                          type = bool
                          knx_dpt = 1
                          knx_send = x/x/x
                          knx_listen = x/x/x
                          eval_trigger = ENO_Schlafzimmer.B1
                          eval = not(sh.Schlafzimmer.Steckdose()) if sh.ENO_Schlafzimmer.B1() else None
                          enforce_updates = True
          
          
          #AUSSERHALB ENOCEAN ALS BEISPIEL
          [Schlafzimmer]
              [[Steckdose]]
                  type = bool
                  knx_dpt = 1
                  knx_send = x/x/x
                  knx_init = x/x/x
              [[Licht_Decke]]
                  type = bool
                  knx_dpt = 1
                  knx_send = y/y/y
                  knx_init = y/y/y
          Testen konnte ich das ganze jetzt nicht, sollte aber so in der Form funktionieren. Keine Logik - nur eval.

          Änderst Du über EnOcean die Zustände geht das über das "Hilfsitem" ENO_Schlafzimmer.XX.XXXXXXXXXX auf den KNX. Dein "Standard-item" Schlafzimmer.XXXXXX ändert den Zustand dann auch entsprechend. Ohne mir jetzt stundenlang den Kopf über das Warum bei Dir zerbrochen zu haben tippe ich einfach auf zeitliche Diskrepanzen zwischen den Rückmeldungen vom KNX und der Ausführung der Logiken. Mal wird der eine schneller sein, mal der andere. Du greifst da innerhalb von Sekundenbruchteilen auf KNX-GAs, sh.py-items, Plugins und Logiken zurück.

          Aus meiner Sicht hast Du folgenden Vorteil in der von mir vorgeschlagenen Weise:
          - Eno komplett in einer eigenen config abgefrüstückt
          - keine komplexe Logik, das versteht man nach wenigen Sekunden auch in 6 Monaten wieder
          - keine 4-fach aufgerufene Logik
          - funktioniert hier seit ?-Wochen mit dem Schalter am Bett vom Kind (siehe mein Beispiel)
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Also, Danke für die Erklärung.
            Das mit Eval hatte ich gemacht aber... nicht in dieser Struktur sondern im Eigentlichen Item des Schlafzimmers...

            Habe das nun mal 1:1 nachgebaut und ich musste mehrmals lesen, da du im eval auf die "Hauptitems" verlinkst. Macht aber letztendlich Sinn und es läuft!

            Vielen Vielen Dank!

            Gruß Marian

            Kommentar

            Lädt...
            X