Ankündigung

Einklappen
Keine Ankündigung bisher.

Bitte kleine Hilfe in Python - stehe gaaaaaanz am Anfang

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

    Bitte kleine Hilfe in Python - stehe gaaaaaanz am Anfang

    Hallo,

    irgendwie blicke ich noch nicht durch ... Ich habe mir mal eine klitzekleine Testlogik gebaut und die wird wohl auch ausgeführt, aber ich sehe einfach kein Ergebnis.

    Eigentlich soll nur mal (als Test) ein Binärwert negiert auf eine andere GA gesendet werden. Als Code dachte ich mir:

    Code:
    #!/usr/bin/env python
    #
    logger.info("testlogik1 ausgeführt")
    if Ktest.Test1 == 1:
       Ktest.Test2 = 0
    elif Ktest.Test1 == 0:
       Ktest.Test2 = 1
    Wenn ich auf das Item Ktest.Test1 einen Wert schicke (über die ETS) wird auch in smarthome.py erkannt, dass das Objekt vorhanden ist und etwas darauf gesendet wurde (smarthome.py mit -d gestartet):

    Code:
    2016-04-18 23:10:32,644 DEBUG    Main         knx: 0.0.0 set 12/5/1 to True -- __init__.py:parse_telegram:190
    2016-04-18 23:10:32,650 DEBUG    Main         Item Ktest.Test1 = True via KNX 0.0.0 12/5/1 -- item.py:__update:363
    2016-04-18 23:10:47,976 DEBUG    Main         knx: 0.0.0 set 12/5/1 to False -- __init__.py:parse_telegram:190
    2016-04-18 23:10:47,982 DEBUG    Main         Item Ktest.Test1 = False via KNX 0.0.0 12/5/1 -- item.py:__update:363
    Auf die GA 12/5/1 hatte ich also erst eine 1 und dann eine 0 gesendet. Danach tut sich dann aber leider nichts mehr ....

    ... aber warum bekomme ich keine logger.info??
    ... und warum wird da keine Antwort aus der Logik gesendet?

    Also irgendwie kann das doch nicht so schwer sein ... bestimmt habe ich irgendetwas klitzekleine übersehen --- aber was? Über eine Antwort würde ich mich sehr freuen.

    Viele Grüße,

    Stefan
    Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

    #2
    Hi Stefan,

    was hast Du denn in der logic.conf eingetragen bzgl. der Logik und dem Watchitem, Cron oder ähnlichem, sprich was ist der Trigger?

    Cheers,
    Oliver

    Kommentar


      #3
      Hi, dein Problem ist die Klammersetzung: Wert abfragen: Ktest.Test1() Wert zuweisen: Ktest.Test2(n) Gruß Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #4
        Sorry, von handy klappt das mit der Formatierung nicht... Gruß Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Müsste es nicht sh.Ktest.test1() heissen?

          Kommentar


            #6
            Natürlich, vergesse ich immer... Gruß Waldemar
            OpenKNX www.openknx.de

            Kommentar


              #7
              Hi,

              bin jetzt am Laptop, hier nochmal Dein Beispiel vollständig:

              Code:
              if sh.Ktest.Test1() == 1:
                  sh.Ktest.Test2(0)
              elif sh.Ktest.Test1() == 0:
                 sh.Ktest.Test2(1)
              oder noch einfacher
              Code:
              sh.Ktest.Test2(not sh.Ktest.Test1())
              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #8
                Oh manomann - da dachte ich, ich schicke am Abend mal 'ne Frage - und dann kommen gleich so viele Antworten.

                @Oliver: ich glaube, der Trigger funktioniert, schaue heute abend aber nochmal nach.
                Waldemar und henfri: danke - ich vermute, da liegt wirklich der Hund begraben. Ich tue mich in der Tat noch sehr schwer mit einigen Besonderheiten der Syntax. Ich habe auch versucht, das Beispiel einer Syntaxkontrolle mittels Eclipse nachzubauen, aber da scheitere ich auch irgendwo - und Eclipse ist ja an sich auch schon mal eine riesen Nummer.

                Vielen Dank schon mal ... ich versuche das heute abend nochmals und melde mich dann.

                Viele Grüße,

                Stefan
                Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

                Kommentar


                  #9
                  Hi Stefan,

                  das mit der Syntax ist auch mein Problem, vor allem, wenn man das nicht täglich macht. Deswegen versuche ich, möglichst wenig mit Logiken zu machen. Dein Beispiel mit Items:

                  Code:
                  [Ktest]
                      [[Test1]]
                          type = bool
                          knx_dpt = 1
                          knx_cache = 12/5/1
                      [[Test2]]
                          type = bool
                          knx_dpt = 1
                          knx_status = 12/5/2
                          knx_reply = 12/5/2
                          eval = not sh.Ktest.Test1()
                          eval_trigger = Ktest.Test1
                  Aber wahrscheinlich willst Du was komplizierteres mit Logik machen und das war nur ein erster Test...

                  Gruß, Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    #10
                    Na ja - eine richtig komplizierte Logik will ich erst mal nicht angehen, sondern für eine Freundin eine einfach zu verstehende Schattierungssteuerung machen. Es gbit ja schon viele Ansätze, aber die sind mir meist viel zu speziell und/oder zu kompliziert. Im allerersten Schritt will ich nur über Azimut und Elevation schauen, ob das Fenster beschienen wird - und entsprechend bei Sonne schattieren.

                    Also - auch mit der Logik selbst ... die lautet jetzt (testlogik.conf):
                    Code:
                    #!/usr/bin/env python
                    #
                    logger.info("testlogik1 ausgeführt")
                    if sh.Ktest.Test1() == 1:
                        sh.Ktest.Test2(0)
                    elif sh.Ktest.Test1() == 0:
                       sh.Ktest.Test2(1)
                    Das item ist immer noch:
                    Code:
                    [Ktest]
                        [[Test1]]
                            type = bool
                            visu_acl = rw
                            knx_dpt = 1
                            knx_listen = 12/5/1
                            knx_send = 12/5/1
                            sqlite = no
                        [[Test2]]
                            type = bool
                            visu_acl = rw
                            knx_dpt = 1
                            knx_listen = 12/5/2
                            knx_send = 12/5/2
                            sqlite = no
                    und der Eintrag in der logik.conf lautet:
                    Code:
                    [Testlogik1]
                        filename = testlogik1.py
                        watch_item = Ktest.test1
                    Was mir nun auffälllt, ist aber, dass auch die Logger.info nicht ausgeführt wird. Wenn ich also einen Wert über die ETS schicke (12/5/1), wird zwar das Item (zumindest teilweise) erkannt, aber die Logik wohl nicht ausgeführt - oder? Anbei ein Ausschnitt aus dem Debug-Protokoll (smarthome.py mit -d gestartet):
                    Code:
                    2016-04-19 21:45:24,631 DEBUG    Main         knx: 0.0.0 set 12/5/1 to False -- __init__.py:parse_telegram:190
                    2016-04-19 21:45:47,003 DEBUG    Main         knx: 0.0.0 set 12/5/1 to False -- __init__.py:parse_telegram:190
                    2016-04-19 21:45:53,422 DEBUG    Main         knx: 0.0.0 set 12/5/1 to True -- __init__.py:parse_telegram:190
                    2016-04-19 21:45:53,427 DEBUG    Main         Item Ktest.Test1 = True via KNX 0.0.0 12/5/1 -- item.py:__update:363
                    2016-04-19 21:45:47,003 DEBUG    Main         knx: 0.0.0 set 12/5/1 to False -- __init__.py:parse_telegram:190
                    2016-04-19 21:45:53,422 DEBUG    Main         knx: 0.0.0 set 12/5/1 to True -- __init__.py:parse_telegram:190
                    2016-04-19 21:45:53,427 DEBUG    Main         Item Ktest.Test1 = True via KNX 0.0.0 12/5/1 -- item.py:__update:363
                    Ich habe also 2xfalse, 1xtrue, 1xfalse 1xtrue geschickt ... aber nur manchmal wird " Item Ktest.Test1 = True " angezeigt.

                    Erkennt jemand meinen Fehler?

                    Viele Grüße,

                    Stefan
                    Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

                    Kommentar


                      #11
                      Zitat von lobo Beitrag anzeigen
                      und der Eintrag in der logik.conf lautet:
                      Code:
                      [Testlogik1]
                      filename = testlogik1.py
                      watch_item = Ktest.[B]test[/B]1
                      case sensitiv?
                      Gruss
                      GLT

                      Kommentar


                        #12
                        Hi,

                        bei Deinem watch_item in der logic.conf muss es Ktest.Test1 heißen (großes T). Ferner muss die logik.conf in logic.conf umbenannt werden (c statt k).
                        Deinen log verstehe ich nicht. Ist das immer so, dass das False nicht ankommt, oder war das eine Ausnahme?

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Mann - sowas doofes musste es doch echt gewesen sein --- und ich habe bereits gedacht, ich hätte alles kontrolliert Vielen Dank!

                          Also der Trigger wird jetzt ausgeführt - die Logger-Info kommt und auch die invertierte Adresse (12/5/2) wird geschrieben!!! Suppper!


                          Aaaaber: Wenn ich jetzt mehrmals hintereinander eine 1 an die 12/5/1 sende, kommt nur beim ersten Mal eine 0 bei 12/5/2 an - sprich: wenn sich das Objekt nicht ändert, wird es auch nicht neu gesendet. Das könnte aber zu Problemen führen. Beispielsweise wenn immer wieder eine Szene aufgerufen werden soll. Bisher habe ich mit Linknx gearbeitet - und da gibt es das Flag "f" ... ich vermute, bei smarthome.py ist das das "enforce_updates = on" in der Item-Definition?

                          Ich teste
                          Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

                          Kommentar


                            #14
                            Waldemar: hat sich gerade mit meinem Post überschnitten: die logic.conf heisst schon richtig ... da bin ich mit meiner Bezeichnung der Testlogik durcheinander gekommen. Ich teste jetzt erst mal die Numer mit dem envorce_updates und melde mich dann

                            Vielen Dank schon mal
                            Mein Sammelsurium: TS2, Zennio Z38, Siemens LOGO!, Medeodata 140 S, Weinzierl KNX ENO 620, Eibmarkt IP Router, MDT KNX IP IF, Wiregate, Node-Red mit KNX Ultimate, MDT Smart II, diverse Aktoren verschiedener Hersteller ...

                            Kommentar


                              #15
                              Hast du ein eibd der auf Router gestellt ist? Vielleicht hast du ja ein Probelm mit Telegrammwiederholungen die es da manchmal gibt.

                              Kommentar

                              Lädt...
                              X