Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Frage zu eval

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

    - √ - Frage zu eval

    Irgendwie werde ich mit der eval Syntax nicht warm bzw. verstehe das ganze Verhalten immer noch nicht.

    Der Sachverhalt:

    Das aktuelle EnOcean-Plugin liefert beim Drücken eines Tasters "True" und beim loslassen "False". In meiner alten Version des Plugins hatte ich einfach im Plugin nur das "True" ans item senden lassen.

    Würde man jetzt direkt ein Licht damit verknüpfen dann brennt das Licht nur so lange wie man den Schalter drückt. Nach True kommt gleich das False.

    Das eval im Licht-item soll eigentlich nichts weiter machen als den aktuellen Status zu invertieren falls ein "True" vom EnOcean Taster kommt.

    Ich dachte an irgendwas wie:

    if value == True:
    not (sh.eno.licht())

    Aber ohne zusätzliche Logic oder Hilfsitem. Geht das?

    Code:
    [eno]
        [[sw]]
        enocean_rx_id = 00226037
        enocean_rx_eep = F6_02_02
            [[[A0]]]
                type = bool
                enocean_rx_key = A0
                visu_acl = ro
                enforce_updates = true
            [[[A1]]]
                type = bool
                enocean_rx_key = A1
                visu_acl = ro   
                enforce_updates = true
            [[[B0]]]
                type = bool
                enocean_rx_key = B0
                visu_acl = ro
                enforce_updates = true
            [[[B1]]]
                type = bool
                enocean_rx_key = B1
                visu_acl = ro   
                enforce_updates = true
    
            
        [[licht]]
            type = bool
            knx_send = 1/2/40
            knx_init = 1/2/41
            knx_dpt = 1
            eval_trigger = eno.sw.A0
            eval = ???
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    #2
    Just for the record:

    Conditional Expression ... habs nun auch gefunden.

    Macht nichts weiter als (Doku PEP308) "X if C else Y"

    Beispiel:

    Code:
    eval = not(sh.eno.licht()) if sh.eno.sw.A0() else None
    X ---> not(sh.eno.licht()) #Status von sh.eno.licht invertieren wenn ...
    C ---> sh.eno.sw() #...sh.eno.sw.A0 auf True gesetzt wird, sonst ...
    Y----> None #...tue nichts.

    Wichtig ist vor allem dass es ein else gibt, sonst gibts Ärger bzw. funktioniert es nicht. Brauch man kein Else nimmt man eben "None".
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #3
      Da würde ich mich gleich mit einer eher belanglosen Frage anschließen:

      Wenn man ein eval wie es JuMi beschrieben hat oder ähnlich aufgebaut einsetzt, wird kein Wert zurück gegeben, im log taucht dann immer eine Info auf:
      Code:
      INFO     xy-eval Item xy: evaluating xyz(0) returns None
      Das ist zwar nur eine Info, kein Warning oder ein Error, aber bekomme ich die Info irgendwie weg? Oder ist JuMis Beispiel doch eher ein Fall für eine Logik?

      Ich habe u.a. für die Steuerung meiner mpds mehrerer solcher evals im Einsatz und das log zeigt entsprechend viele solcher (für mich) unwichtigen Infos...

      Kommentar


        #4
        Hi,

        mach einfach statt None den alten Wert wieder hin, also beim obigen Beispiel:
        Code:
        eval = not(sh.eno.licht()) if sh.eno.sw.A0() else sh.eno.licht()
        Dann gibt es auch keine log messages...

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Viel schlimmer als zu viele Debug-Infos sind eher falsche .

          Wäre schön wenn man im Log sehen würde was wirklich zurückgegeben wurde. Bei "None" denkt man natürlich erstmal an einen Fehler im eigenen eval. Oder anders ausgedrückt, man wundert sich dass keine Ausgabe im Erfolgsfall kommt.

          Ich würde mir in der smarthome/lib/item.py eher folgendes Wünschen:

          Code:
              def __run_eval(self, value=None, caller='Eval', source=None, dest=None):
                  if self._eval:
                      sh = self._sh  # noqa
                      try:
                          value = eval(self._eval)
                      except Exception as e:
                          logger.warning("Item {}: problem evaluating {}: {}".format(self._path, self._eval, e))
                      else:
                          [COLOR="Red"]logger.debug("Item {}: evaluating {} returns {}".format(self._path, self._eval, value))[/COLOR]
                          self.__update(value, caller, source, dest)
          Damit gibts die Ausgabe auch im Erfolgsfall und nur als Debug-Meldung. Ob Info oder Debug ist mir persönlich aber egal. Lieber eine Sache mehr geloggt als eine zu wenig.
          Umgezogen? Ja! ... Fertig? Nein!
          Baustelle 2.0 !

          Kommentar


            #6
            Moin! also, ich habe das gleiche Problem und bei mir schaltet alles ein bzw. aus...

            Meine Konfiguration ist ein 4-fach taster. Über klare logiken klappt es, aber mit eval irgendwie nicht...
            Hinweis: Das Item "AUS" soll auschließlich eine "0" bekommen, das "TV_Steckdose" ausschließlich eine "1"

            Die items:
            Code:
            [Schlafzimmer]
                     [[Aus]]
                     type = bool
                     knx_dpt = 1
                     visu = rw
                     enforce_updates = yes
                     knx_send = 13/0/0
                     eval_trigger = ENO.Schlafzimmer.A0
                     eval = not(sh.Schlafzimmer.Aus()) if sh.ENO.Schlafzimmer.A0() else not(sh.Schlafzimmer.Aus())
            
                     [[Licht_Decke]]
                     type = bool
                     knx_dpt = 1
                     visu = rw
                     knx_listen = 13/1/11
                     knx_send = 13/1/10
                     eval_trigger = ENO.Schlafzimmer.B0
                     eval = not(sh.Schlafzimmer.Licht_Decke()) if sh.ENO.Schlafzimmer.B0() else sh.Schlafzimmer.Licht_Decke()
            
                     [[Steckdose]]
                     type = bool
                     knx_dpt = 1
                     visu = rw
                     knx_listen = 13/1/21
                     knx_send = 13/1/20
                     eval_trigger = ENO.Schlafzimmer.B1
                     eval = not(sh.Schlafzimmer.Steckdose()) if sh.ENO.Schlafzimmer.B1() else sh.Schlafzimmer.Steckdose()
                             [[[Dimmer]]]
                             type = num
                             knx_dpt = 5
                             visu = rw
                             knx_init = 13/2/21
                             knx_listen = 13/2/21
                             knx_send = 13/2/20
            
                     [[TV_Steckdose]]
                     type = bool
                     knx_dpt = 1
                     visu = rw
                     knx_listen = 13/1/31
                     knx_send = 13/1/30
                     eval_trigger = ENO.Schlafzimmer.A1
                     eval = (sh.Schlafzimmer.TV_Steckdose()) if sh.ENO.Schlafzimmer.A1() else sh.Schlafzimmer.Steckdose()
            
                     [[Nacht]]
                     type = bool
                     knx_dpt = 1
                     visu = rw
                     knx_listen = 13/0/200
                     knx_send = 13/0/200
                     eval_trigger = ENO.Schlafzimmer.A1B1
                     eval = not(sh.Schlafzimmer.Nacht()) if sh.ENO.Schlafzimmer.A1B1() else sh.Schlafzimmer.Nacht()
            Das Debug (Auszug):
            Code:
             enocean      enocean: received header with data_length = 7 / opt_length = 0x07 / type = 1 -- __init__.py:run:349
            2014-12-15 17:06:39,707 DEBUG    enocean      enocean: accepted package with type = 0x01 / len = 21 / data = [0x55, 0x00, 0x07, 0x07, 0x01, 0x7a, 0xf6, 0x00, 0xfe, 0xfe, 0x23, 0x8e, 0x20, 0x01, 0xff, 0xff, 0xff, 0xff, 0x59, 0x00, 0x3d]! -- __init__.py:run:357
            2014-12-15 17:06:39,713 INFO     enocean      enocean: radio message: choice = f6 / payload = [0x00] / sender_id = FEFE238E / status = 32 / repeat = 0 -- __init__.py:_process_packet_type_radio:230
            2014-12-15 17:06:39,719 INFO     enocean      enocean: radio message with additional info: subtelnum = 1 / dest_id = FFFFFFFF / signal = -89dBm / SecurityLevel = 0 -- __init__.py:_process_packet_type_radio:237
            2014-12-15 17:06:39,726 DEBUG    enocean      enocean: Sender ID found in item list -- __init__.py:_process_packet_type_radio:240
            2014-12-15 17:06:39,732 DEBUG    enocean      enocean: processing F6_02_02: Rocker Switch, 2 Rocker -- __init__.py:_parse_eep_F6_02_02:171
            2014-12-15 17:06:39,738 INFO     enocean      enocean: radio message results = {'A0B0': False, 'A1B1': False, 'A1': False, 'A0': False, 'B0': False, 'B1': False} -- __init__.py:_process_packet_type_radio:247
            2014-12-15 17:06:39,746 DEBUG    enocean      Triggering Schlafzimmer.Aus - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:39,755 DEBUG    enocean      Triggering Schlafzimmer.TV_Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:39,761 DEBUG    Schlafzimmer.Aus Item Schlafzimmer.Aus = True via Eval ENO.Schlafzimmer.A0 None -- item.py:__update:363
            2014-12-15 17:06:39,769 DEBUG    enocean      Item ENO.Schlafzimmer.B0 = False via EnOcean FEFE238E None -- item.py:__update:363
            2014-12-15 17:06:39,787 DEBUG    enocean      Triggering Schlafzimmer.Licht_Decke - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:39,799 DEBUG    Main         knx: 0.0.0 set 13/0/0 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:39,807 DEBUG    enocean      Triggering Schlafzimmer.Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:39,846 DEBUG    Main         knx: 1.1.6 set 13/1/21 to True -- __init__.py:parse_telegram:190
            2014-12-15 17:06:39,849 DEBUG    enocean      Triggering ENO_Schlafzimmer_A0B0 - by: Item source: ENO.Schlafzimmer.A0B0 dest: None value: False -- scheduler.py:trigger:162
            2014-12-15 17:06:39,869 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:39,881 DEBUG    enocean      Triggering Schlafzimmer.Nacht - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1B1', 'val -- scheduler.py:trigger:162
            2014-12-15 17:06:39,895 INFO     ENO_Schlafzimmer_A0B0 ENOCEAN_Empfangen -- ENO_Schlafzimmer_A0B0.py:<module>:2
            2014-12-15 17:06:39,930 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:39,950 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 255 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:39,968 DEBUG    Main         Item Schlafzimmer.Steckdose.Dimmer = 255 via KNX 1.1.6 13/2/21 -- item.py:__update:363
            2014-12-15 17:06:41,892 DEBUG    Main         knx: 1.1.11 set 13/5/1 to 21.3 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:41,900 DEBUG    Main         Item Temperatur.Schlafzimmer = 21.3 via KNX 1.1.11 13/5/1 -- item.py:__update:363
            2014-12-15 17:06:43,796 DEBUG    Main         knx: 1.1.13 set 11/5/1 to 21.0 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:43,809 DEBUG    Main         Item Temperatur.Kind_Sued = 21.0 via KNX 1.1.13 11/5/1 -- item.py:__update:363
            2014-12-15 17:06:44,242 DEBUG    enocean      enocean: received header with data_length = 7 / opt_length = 0x07 / type = 1 -- __init__.py:run:349
            2014-12-15 17:06:44,248 DEBUG    enocean      enocean: accepted package with type = 0x01 / len = 21 / data = [0x55, 0x00, 0x07, 0x07, 0x01, 0x7a, 0xf6, 0x50, 0xfe, 0xfe, 0x23, 0x8e, 0x30, 0x01, 0xff, 0xff, 0xff, 0xff, 0x58, 0x00, 0x9b]! -- __init__.py:run:357
            2014-12-15 17:06:44,255 INFO     enocean      enocean: radio message: choice = f6 / payload = [0x50] / sender_id = FEFE238E / status = 48 / repeat = 0 -- __init__.py:_process_packet_type_radio:230
            2014-12-15 17:06:44,261 INFO     enocean      enocean: radio message with additional info: subtelnum = 1 / dest_id = FFFFFFFF / signal = -88dBm / SecurityLevel = 0 -- __init__.py:_process_packet_type_radio:237
            2014-12-15 17:06:44,267 DEBUG    enocean      enocean: Sender ID found in item list -- __init__.py:_process_packet_type_radio:240
            2014-12-15 17:06:44,273 DEBUG    enocean      enocean: processing F6_02_02: Rocker Switch, 2 Rocker -- __init__.py:_parse_eep_F6_02_02:171
            2014-12-15 17:06:44,279 INFO     enocean      enocean: radio message results = {'A0B0': False, 'A1B1': False, 'A1': False, 'A0': False, 'B0': False, 'B1': True} -- __init__.py:_process_packet_type_radio:247
            2014-12-15 17:06:44,287 DEBUG    enocean      Triggering Schlafzimmer.Aus - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:44,296 DEBUG    enocean      Triggering Schlafzimmer.TV_Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:44,301 DEBUG    Schlafzimmer.Aus Item Schlafzimmer.Aus = False via Eval ENO.Schlafzimmer.A0 None -- item.py:__update:363
            2014-12-15 17:06:44,309 DEBUG    enocean      Triggering Schlafzimmer.Licht_Decke - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:44,328 DEBUG    enocean      Item ENO.Schlafzimmer.B1 = True via EnOcean FEFE238E None -- item.py:__update:363
            2014-12-15 17:06:44,350 DEBUG    enocean      Triggering Schlafzimmer.Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:44,344 DEBUG    Main         knx: 0.0.0 set 13/0/0 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:44,364 DEBUG    enocean      Triggering ENO_Schlafzimmer_A0B0 - by: Item source: ENO.Schlafzimmer.A0B0 dest: None value: False -- scheduler.py:trigger:162
            2014-12-15 17:06:44,370 DEBUG    Schlafzimmer.Steckdose Item Schlafzimmer.Steckdose = True via Eval ENO.Schlafzimmer.B1 None -- item.py:__update:363
            2014-12-15 17:06:44,380 INFO     ENO_Schlafzimmer_A0B0 ENOCEAN_Empfangen -- ENO_Schlafzimmer_A0B0.py:<module>:2
            2014-12-15 17:06:44,390 DEBUG    Main         knx: 1.1.6 set 13/1/21 to False -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,378 DEBUG    enocean      Triggering Schlafzimmer.Nacht - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1B1', 'val -- scheduler.py:trigger:162
            2014-12-15 17:06:44,415 DEBUG    ENO_Schlafzimmer_A0B0 Triggering Schlafzimmer.Steckdose-eval - by: Logic source: None dest: None value: {'dest': None, 'source': None, 'caller': -- scheduler.py:trigger:162
            2014-12-15 17:06:44,420 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:44,444 DEBUG    Schlafzimmer.Steckdose-eval Item Schlafzimmer.Steckdose = False via Logic None None -- item.py:__update:363
            2014-12-15 17:06:44,451 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:44,460 DEBUG    Schlafzimmer.Steckdose-eval Item Schlafzimmer.Steckdose = True via KNX 1.1.6 13/1/21 -- item.py:__update:363
            2014-12-15 17:06:44,468 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 0 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,483 DEBUG    Main         Item Schlafzimmer.Steckdose.Dimmer = 0 via KNX 1.1.6 13/2/21 -- item.py:__update:363
            2014-12-15 17:06:44,498 DEBUG    Main         knx: 0.0.0 set 13/1/20 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:44,511 DEBUG    Main         knx: 0.0.0 set 13/1/20 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:44,559 DEBUG    Main         knx: 1.1.6 set 13/1/21 to True -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,565 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:44,575 DEBUG    Schlafzimmer.Steckdose-eval Item Schlafzimmer.Steckdose = False via KNX 1.1.6 13/1/21 -- item.py:__update:363
            2014-12-15 17:06:44,598 DEBUG    Main         knx: 1.1.7 set 13/1/11 to False -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,604 DEBUG    Main         Triggering Schlafzimmer.Licht_Decke-eval - by: KNX source: 1.1.7 dest: 13/1/11 value: {'dest': '13/1/11', 'source': '1.1.7', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:44,639 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:44,683 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 255 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,690 DEBUG    Main         Item Schlafzimmer.Steckdose.Dimmer = 255 via KNX 1.1.6 13/2/21 -- item.py:__update:363
            2014-12-15 17:06:44,709 DEBUG    Main         knx: 1.1.6 set 13/1/21 to False -- __init__.py:parse_telegram:190
            2014-12-15 17:06:44,714 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:44,725 DEBUG    Schlafzimmer.Steckdose-eval Item Schlafzimmer.Steckdose = True via KNX 1.1.6 13/1/21 -- item.py:__update:363
            2014-12-15 17:06:44,734 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:48,068 DEBUG    enocean      enocean: received header with data_length = 7 / opt_length = 0x07 / type = 1 -- __init__.py:run:349
            2014-12-15 17:06:48,075 DEBUG    enocean      enocean: accepted package with type = 0x01 / len = 21 / data = [0x55, 0x00, 0x07, 0x07, 0x01, 0x7a, 0xf6, 0x00, 0xfe, 0xfe, 0x23, 0x8e, 0x20, 0x01, 0xff, 0xff, 0xff, 0xff, 0x58, 0x00, 0x28]! -- __init__.py:run:357
            2014-12-15 17:06:48,081 INFO     enocean      enocean: radio message: choice = f6 / payload = [0x00] / sender_id = FEFE238E / status = 32 / repeat = 0 -- __init__.py:_process_packet_type_radio:230
            2014-12-15 17:06:48,087 INFO     enocean      enocean: radio message with additional info: subtelnum = 1 / dest_id = FFFFFFFF / signal = -88dBm / SecurityLevel = 0 -- __init__.py:_process_packet_type_radio:237
            2014-12-15 17:06:48,093 DEBUG    enocean      enocean: Sender ID found in item list -- __init__.py:_process_packet_type_radio:240
            2014-12-15 17:06:48,099 DEBUG    enocean      enocean: processing F6_02_02: Rocker Switch, 2 Rocker -- __init__.py:_parse_eep_F6_02_02:171
            2014-12-15 17:06:48,105 INFO     enocean      enocean: radio message results = {'A0B0': False, 'A1B1': False, 'A1': False, 'A0': False, 'B0': False, 'B1': False} -- __init__.py:_process_packet_type_radio:247
            2014-12-15 17:06:48,113 DEBUG    enocean      Triggering Schlafzimmer.Aus - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:48,122 DEBUG    enocean      Triggering Schlafzimmer.TV_Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:48,128 DEBUG    Schlafzimmer.Aus Item Schlafzimmer.Aus = True via Eval ENO.Schlafzimmer.A0 None -- item.py:__update:363
            2014-12-15 17:06:48,135 DEBUG    enocean      Triggering Schlafzimmer.Licht_Decke - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B0', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:48,141 DEBUG    Schlafzimmer.TV_Steckdose Item Schlafzimmer.TV_Steckdose = True via Eval ENO.Schlafzimmer.A1 None -- item.py:__update:363
            2014-12-15 17:06:48,157 DEBUG    enocean      Item ENO.Schlafzimmer.B1 = False via EnOcean FEFE238E None -- item.py:__update:363
            2014-12-15 17:06:48,170 DEBUG    Main         knx: 0.0.0 set 13/0/0 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:48,188 DEBUG    enocean      Triggering Schlafzimmer.Steckdose - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.B1', 'value -- scheduler.py:trigger:162
            2014-12-15 17:06:48,219 DEBUG    enocean      Triggering ENO_Schlafzimmer_A0B0 - by: Item source: ENO.Schlafzimmer.A0B0 dest: None value: False -- scheduler.py:trigger:162
            2014-12-15 17:06:48,212 DEBUG    Main         knx: 0.0.0 set 13/1/30 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:48,233 DEBUG    Main         knx: 1.1.6 set 13/1/21 to True -- __init__.py:parse_telegram:190
            2014-12-15 17:06:48,242 INFO     ENO_Schlafzimmer_A0B0 ENOCEAN_Empfangen -- ENO_Schlafzimmer_A0B0.py:<module>:2
            2014-12-15 17:06:48,239 DEBUG    enocean      Triggering Schlafzimmer.Nacht - by: EnOcean source: FEFE238E dest: None value: {'source': 'ENO.Schlafzimmer.A1B1', 'val -- scheduler.py:trigger:162
            2014-12-15 17:06:48,246 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:48,276 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 255 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:48,297 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 01 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:48,317 DEBUG    Main         knx: 1.1.8 set 13/1/31 to True -- __init__.py:parse_telegram:190
            2014-12-15 17:06:48,323 DEBUG    Main         Triggering Schlafzimmer.TV_Steckdose-eval - by: KNX source: 1.1.8 dest: 13/1/31 value: {'dest': '13/1/31', 'source': '1.1.8', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:48,340 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 255 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:48,370 DEBUG    Main         knx: 1.1.7 set 13/1/11 to True -- __init__.py:parse_telegram:190
            2014-12-15 17:06:48,375 DEBUG    Main         Triggering Schlafzimmer.Licht_Decke-eval - by: KNX source: 1.1.7 dest: 13/1/11 value: {'dest': '13/1/11', 'source': '1.1.7', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:49,122 DEBUG    Main         knx: 1.1.9 set 0/7/8 to 2.21 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:49,142 DEBUG    Main         Item Wind.Staerke = 2.21 via KNX 1.1.9 0/7/8 -- item.py:__update:363
            2014-12-15 17:06:49,153 DEBUG    Main         knx: 1.1.8 set 13/1/30 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:49,165 DEBUG    Main         knx: 1.1.9 set 0/7/9 to False -- __init__.py:parse_telegram:190
            2014-12-15 17:06:49,183 DEBUG    Main         knx: 1.1.6 set 13/1/21 to False -- __init__.py:parse_telegram:190
            2014-12-15 17:06:49,189 DEBUG    Main         Triggering Schlafzimmer.Steckdose-eval - by: KNX source: 1.1.6 dest: 13/1/21 value: {'dest': '13/1/21', 'source': '1.1.6', ' -- scheduler.py:trigger:162
            2014-12-15 17:06:49,211 DEBUG    Main         knx: 1.1.6 set 13/1/20 to 00 -- __init__.py:parse_telegram:181
            2014-12-15 17:06:49,232 DEBUG    Main         knx: 1.1.18 set 7/5/1 to 21.1 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:49,240 DEBUG    Main         Item Temperatur.Wohnbereich = 21.1 via KNX 1.1.18 7/5/1 -- item.py:__update:363
            2014-12-15 17:06:49,256 DEBUG    Main         knx: 1.1.6 set 13/2/21 to 0 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:49,263 DEBUG    Main         Item Schlafzimmer.Steckdose.Dimmer = 0 via KNX 1.1.6 13/2/21 -- item.py:__update:363
            2014-12-15 17:06:50,132 DEBUG    Main         knx: 1.1.8 set 0/1/50 to 326.88 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:50,140 DEBUG    Main         Item Lueftung.Strom = 326.88 via KNX 1.1.8 0/1/50 -- item.py:__update:363
            2014-12-15 17:06:56,129 DEBUG    Main         knx: 1.1.8 set 0/1/50 to 330.88 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:56,137 DEBUG    Main         Item Lueftung.Strom = 330.88 via KNX 1.1.8 0/1/50 -- item.py:__update:363
            2014-12-15 17:06:56,512 DEBUG    Main         knx: 1.1.4 set 12/5/3 to 74.11764705882354 -- __init__.py:parse_telegram:190
            2014-12-15 17:06:56,519 DEBUG    Main         Item Heizung.Kind_Nord.Stellgroesse = 74.11764705882354 via KNX 1.1.4 12/5/3 -- item.py:__update:363
            Interessant: definiere ich nur ein Item mit eval und eval_trigger funktioniert es super....

            Kommentar


              #7
              Ich gehe davon aus dass du "enforce_updates" auch in den ENO-items hast. Das führt dazu dass beim Druck auf einen Taster mit dem aktuellen Plugin alle Taster/items aktualisiert werden und damit alles durch eval und eval_trigger läuft.

              Ich hab das im entsprechenden Plugin-Thread schon angesprochen dass mir die aktuelle Implementierung an dieser Stelle nicht gefällt. In meiner ersten Version des Plugins hatte ich daher nur True als "sendefähige" Werte definiert. Je nach Nutzung der Taster aber auch nicht immer sinnvoll.

              Anbei mal meine funktionsfähigen Varianten.

              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
              Also das enforce_updates bei den Tastern raus. Damit gibt es eine Zustandsänderung nur nach dem Drücken einer Taste und nicht beim drücken jeder anderen Taste.

              A1 schaltet bei mir Licht auf 15% und A0 auf 0%, also aus. B1 und B0 sind jeweils UM-Schalter für schaltbare Steckdosen. Ich habe der Übersicht halber eine eigene enocean.conf. Damit erkennt man besser die Zusammenhänge zwischen Taster und Aktion. Man hätte das sicherlich auch in der og.conf einhängen können aber für die Übersicht spendiere ich gern eine Zeile mehr.

              Grüße
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #8
                Ja, so langsam kommt es...

                aber benötige ich enforce_Update überhaupt?

                Das soll ja bewirken das bei jedem Senden des Items die Funktion entsprechend angestoßen wird...

                Im std. nur bei Wertänderung. Da aber der Taster immer seinen Wert ändert (drücken = 1 / loslassen = 0) wird das doch eigentlich nicht benötigt...

                Kommentar


                  #9
                  Hi Marian,

                  das ist vollkommen richtig. Das enforce_updates macht an manchen Stellen Sinn, wenn man davon ausgeht, dass bei Enocean auch mal Nachrichten verloren gegangen sein könnten und somit eine vorangegangene Zustandsänderung nicht erfolgt ist. Will man auf jeden Fall (auch ohne Zustandsänderungen) Logiken etc. triggeren, sollte enforce_updates=True setzen. Benötigt man das Verhalten nicht, kann das es weggelassen werden

                  Grüße

                  Kommentar


                    #10
                    So nach einigem probieren... Irgendwie läuft das nicht...
                    Wenn ich mit eval und trigger arbeite, dann kann ich in der VISU nichts mehr steuern. Über Logik habe ich das problem das bei watch_Item die Logik mehrfach hintereinander aufgerufen wir.

                    Wie kann ich denn eine logik gezielt mit einere "1" aufrufen?
                    "ENO.Schalter.A0 = True"

                    Also quasi ein watch_item welches nur auf die steigende flanke reagiert.

                    Gruß Marian

                    Kommentar


                      #11
                      Hi,

                      ohne enforce_updates wird eine logik nur beim Zustandswechsel aufgerufen.
                      Wenn du in der Logik am Anfang noch ein
                      If value:
                      machst, wird noch zusätzlich auf 1 geprüft. Da die Logik nur bei einem Zustandswechsel gerufen wurde, ist es genau der Fall, den du willst: 0->1.
                      Gruß Waldemar
                      OpenKNX www.openknx.de

                      Kommentar

                      Lädt...
                      X