Ankündigung

Einklappen
Keine Ankündigung bisher.

ByteCode Logikbaustein (opt. Lizenzprüfung)

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

    #31
    diese datei:

    C:\Dokumente und Einstellungen\All Users\Dokumente\HS+FS Experte\logic\12234_ColorConvert_V0.8.hsl


    mit diesem header:

    Code:
    # -*- coding: iso8859-1 -*-
    ## -----------------------------------------------------
    ## ColorConvert   ### V0.8
    ##
    ## erstellt am: 2010-03-11 22:15
    ## -----------------------------------------------------

    du schreibst experte 2.32. geht das mit 2.40 nicht mehr?
    danke für deinen beistand!

    Kommentar


      #32
      Zip mal deine hsl und häng sie hier an
      Nils

      aktuelle Bausteine:
      BusAufsicht - ServiceCheck - Pushover - HS-Insight

      Kommentar


        #33
        hier bitte.
        habe auch ein testprojekt und die fehlermeldung beigepackt.
        Angehängte Dateien

        Kommentar


          #34
          Hmm, also der Baustein funzt bei mir ohne Probleme, ich hab jedoch auch keine 2.4er.

          Ich nutze den Baustein selber auch nicht, daher hilft es vielleicht die Frage nochmal hier https://knx-user-forum.de/hsfusion/8...rbauswahl.html zu stellen. Bei fast 60 Downloads gibts doch bestimmt auch aktive Nutzer.
          Nils

          aktuelle Bausteine:
          BusAufsicht - ServiceCheck - Pushover - HS-Insight

          Kommentar


            #35
            Zitat von SebastianFey Beitrag anzeigen
            du schreibst experte 2.32. geht das mit 2.40 nicht mehr?
            danke für deinen beistand!
            Der Baustein läuft unter 2.40. Aktuell ist zwar V.09, hat aber mit der FW nichts zu tun.

            Kommentar


              #36
              Uwäää, der war aber nu doch schon sehr sehr alt die Umfrage hat den nur nach oben geholt

              hier die Lösung
              https://knx-user-forum.de/120970-post37.html

              Ist bei manchen 2.4er/2.5er Versionen so., liegt aber wohl am Experten.
              Nils

              aktuelle Bausteine:
              BusAufsicht - ServiceCheck - Pushover - HS-Insight

              Kommentar


                #37
                Logikgenerator / Zugriff auf Listen und Klassen

                Hallo, am vergangenen Wochenende habe ich den Logikgenerator ausprobiert und wollte gar nicht mehr aufhören. Einfach nur klasse. Ich habe zwar alle Beiträge zum LG studiert, aber zwei Fragen sind dabei noch offen geblieben.

                1. Aus den Codeblöcken ist ja problemlos der direkte Zugriff auf die Listen AN, AA, AC etc. möglich. Wie aber kann ich aus der eigenen Klasse (ohne Verwendung von 5012-Formelzeilen) auf diese Listen zugreifen?

                2. Lassen sich zwei Klassen (z. A und B) so implementieren, dass Klasse A zur Laufzeit eine Instanz von Klasse B ezeugen kann.

                Bin für jeden Tipp dankbar.

                Gruß
                Peter

                Kommentar


                  #38
                  Hi Peter,

                  sorry für die späte Antwort.


                  zu 1.
                  Code:
                  class KNXUF_demoClass:
                      def __init__(self,logik):
                          ## hier die aktuelle Logik übergeben
                          self.logik = logik
                          self.writesomething()
                  
                  
                      def writesomething(self):
                          self.sendout(1,"Das ist der Demobaustein")
                  
                      ## Senden auf die Ausgänge aus dem Thread heraus
                      def sendout(self,out,wert):
                          ## Der Index der Ausgänge fängt bei 0 und nicht bei 1 an daher -1 um die gewohnte Ausgangsnummer zu verwenden
                          out=out-1
                          ## Auf iKO's schreiben
                          try:
                              for iko in self.logik.Ausgang[out][1]:
                                  try:
                                      iko.setWert(out,wert)
                                      iko.checkLogik(out)
                                  except:
                                      pass
                  
                              ## Logiken ausführen
                              ## FixME hier kann es manchmal zu Fehlern kommen
                              ## im Zweifelsfall einfach ein iKO dazwischen hängen
                              for logik in self.logik.Ausgang[out][3]:
                                  try:
                                      logik[0].LogikItem.calc(logik[0],logik[1],wert,0,__import__('time').time())
                                  except:
                                      pass
                          except AttributeError:
                              pass
                  
                  ## pItem ist die jetzige Logik
                  5012|1|"OC[1]"|"KNXUF_demoClass(pItem)"|""|0|0|1|0
                  zu 2.
                  Da du innerhalb der Logik NICHT global definierst verschwinden die Klassendefinitionen innerhalb der Logik wieder. Du musst also die zu erzeugende Klasse entweder innerhalb der Klasse definieren, oder die Klasse mit übergeben.

                  Code:
                  class A:
                      def __init__(self,wert):
                         self.wert=wert
                      def getWert():
                         return self.wert
                  class B:
                      def __init__(self,A_Class)
                         self.myClassA = A_Class("Das ist der Wert")
                         print self.myClassA.getWert()
                  
                  
                  5012|1|"OC[1]"|"B(A)"|""|0|0|1|0

                  ps: ich verwende immer OC[1] statt EI, da man so den HS "retten" kann wenn die Logik den HS sonst grillen würde

                  Code:
                  ## 20Sek Verzögerung zum starten der Logik falls sich der HS aufhängt beim Entwickeln
                  5012|1|"EI"|"1"|"20"|0|1|0|0
                  Nils

                  aktuelle Bausteine:
                  BusAufsicht - ServiceCheck - Pushover - HS-Insight

                  Kommentar


                    #39
                    Hallo Nils,

                    keine Entschuldigung nötig. Schließlich ist das hier doch alles freiwilliges Engagement und nicht selbstverständlich. Also erst einmal besten Dank für die ausführliche Beschreibung. Ich hatte schon alles mögliche ausprobiert, aber bis dato leider ohne Erfolg. Am kommenden Wochenende werd' ich das mal in Ruhe testen.

                    Ich hab' da noch ein kleines, bisher ungelöstes Problem. Hast Du da evtl. noch eine Idee? Ist auch nicht sehr eilig. Und zwar geht es um die Objekte OC[x] und ON[x]. Der lesende Zugriff auf diese Listen innerhalb eines Codeblocks ist kein Problem. Ich habe aber noch keine Möglichkeit gefunden, aus einem Codeblock heraus einen Timer zu starten. Wie gesagt, ist nicht eilig, aber grundsätzlich würde mich schon interessieren, wie und ob das überhaupt möglich ist.

                    Grüße aus Hattingen
                    Peter

                    Kommentar


                      #40
                      Helft mir bitte mal auf die Sprünge.....

                      Ich hab mir das jetzt schon sich mal durchgelesen und steig nicht dahinter was es mit dem LogigGenerator Template auf sich hat. Ist es richtig dass man dieses nur anpassen muss und diese Datei dann zusammen mit der hsl ins Logikverzeichniss kopiert?
                      Wie funktioniert das überhaupt mit dem Import?
                      Dacom hat doch in der Doku nur 4 Phyton Bibliotheken die freigegeben sind hinterlegt.
                      Wie funktioniert das dann genau? Ich seh die Zusammenhänge nicht richtig. :-(

                      Kommentar


                        #41
                        Hallo,

                        bitte sorgfältig die bereits vorhandenen Beiträge lesen. Im Prinzip ist alles wichtige bereits niedergeschrieben worden. Evtl. ist es ein wenig schwierig, den roten Faden zu finden.

                        Ich versuche mal, dir einen kleinen Überblick zu verschaffen:

                        Voraussetzung für den Einsatz des LGs ist eine Python Laufzeitumgebung in der Version 2.4.4 auf dem Entwicklungsrechner. Der LG ist, wie der Name schon sagt, ein Generator, der, wenn er denn vorher entsprechend mit Leben gefüllt wurde, eine hsl-Datei und die dazu passende html-Datei generiert. Darüber hinaus bietet er den großen Vorteil, nicht nur einzeilige Logikzeilen (5012-Zeilen), sondern auch komplexere Logikstrukturen abbilden zu können. Dazu dienen die sogenannten Codeblöcke.

                        Aktuelle Version des LGs ist meinens Wissens die V1.9. Für den Einstieg empfehle ich die Übernahme eines vorhanden, kleinen Bausteins in den LG.

                        Schritt 1:
                        Erzeugen einer leeren Vorlage (z.B. BS-ID:10050, BS-Name:Testbaustein):

                        Aufruf: python.exe logikgenerator.py --new=10050:Testbaustein

                        Schritt 2:
                        Öffnen der neuen Datei 10050_Testbaustein.py. Jetzt, wie gewohnt, die Bausteinkonfiguraton vornehmen (Bereich 5000 -5004). Fürs erste würde ich die beiden Test-Codeblöcke (die beginnen jeweils mit code.append) auskommentieren. In den POSTLOGIK-Block müssen die 5012er Formelzeilen eingetragen werden. Die 5012er Musterzeilen bitte auch auskommentieren.
                        Das war's schon.

                        Schritt 3:
                        Generieren der Logik-Dateien.
                        Aufruf: python.exe 10050_Testbaustein.py

                        FERTIG.

                        Dafür bräuchte man den LG allerdings nicht. Das ging auch schon vorher. Aber jetzt weisst du schon mal, wie das Ding tickt.

                        Wenn du dich ein wenig mit dem LG vertraut gemacht hast, kannst du jetzt nach und nach versuchen, die 5012er-Zeilen innerhalb der Codeblöcke abzubilden. Dort kann man die Logikzeilen komfortabel in Python schreiben. Mit if, elif, else-, mit while- und mit for-Strukturen. Und es stehen alle Bibliotheken zur Verfügung, die auf dem HomeServer verfügbar sind. Nicht nur 4 oder 5. Und jetzt wird schnell klar, wo die Vorteile des LGs liegen.

                        Achtung! Keine sleeps verwenden und keine loops programmieren. Denn sonst steht die gesamte HS-Logik still!!!

                        Viel Erfolg.

                        Gruß
                        Peter

                        Kommentar


                          #42
                          Danke für die Ausführliche Antwort!

                          Ich hatte die ganze zeit die Version 2.2.
                          Nach der Installation von 2.4.4 hats einwandfrei funktioniert.
                          Ich bin mal gespannt ob mein Plan, einen Baustein zur Auswertung von IP-Telegrammen und zum Senden von IP-Telegrammen zu generieren.
                          Müsste ja eigentlich mit "Socket" machbar sein. :-)

                          MFG Andi

                          Kommentar


                            #43
                            Solche gibt es ja bereits. Da kannst du ja mal Anschauungsunterricht nehmen
                            Gruß Matthias
                            EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                            - PN nur für PERSÖNLICHES!

                            Kommentar


                              #44
                              Werd ich machen...

                              Wenn es wirklich so ist, dass man so alle Python-Funktionen einbinden kann, dann müsste es ja auch möglich sein den HS Modbusfähig zu machen!?

                              Kommentar


                                #45
                                Klar
                                Gruß Matthias
                                EIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
                                - PN nur für PERSÖNLICHES!

                                Kommentar

                                Lädt...
                                X