Ankündigung

Einklappen
Keine Ankündigung bisher.

Logik Programmierung mit Eclipse und Remote Debug auf SH

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

    Logik Programmierung mit Eclipse und Remote Debug auf SH

    EDIT 22.10.2014:
    Die Anleitung ist jetzt im smarthome Wiki abgelegt. Die Anleitung hier wird nicht mehr gepflegt:

    https://github.com/mknx/smarthome/wi...f-Smarthome.py


    Da ab und zu hier im Forum schon nach IDE, Code Validierung und Debuging gefragt wurde, nachfolgend ein kleines Tutorial wie Logiken in Eclipse PyDev geschrieben werden können und als Remote Debug Process auf dem SH.py ausgeführt werden können.

    Warum?
    - smarthome.py läuft auf Raspberry Pi und ist im Schaltschrank eingebaut. Zugriff nur über SSH
    - Code Entwicklung über Windows Laptop im Notepad++. Hat zwar Syntax Highlighting, zeigt aber keine Syntax Fehler an
    ==> 3/4 meiner Zeit verschwendet weil Punkt, Komma oder Strich fehlen.

    Lösung:
    - Verwendung von Eclipse, einer genialen IDE und auch noch kostenlos
    - Pydev Plugin für Python

    Voraussetzungen:
    Damit der Remote Debugger pydevd später funktioniert müssen folgende Voraussetzungen erfüllt sein:
    - Auf Debug Server und Client muss die gleiche minor Version von Python laufen, momentan python 3.2
    - Auf Debug Server und Client muss die Source Code Datei exakt den gleichen Inhalt haben
    - Java, Eclipse und Python laufen bei mir als 32bit auf der Windows Maschine. Mischen geht nicht, das hat mich einige Gläser Rotwein gekostet

    Achtung
    Die Schritte im Teil 1 und Teil 2 beschränken sich auf den Client. Da kann man nichts kaputt machen.
    Unter Teil 3 muss aber dann mittels Shell auf smarthome gearbeitet werden. Hier also vorsichtig sein und lieber mal ein Backup fahren.


    Los gehts:
    1. Downloads
      --> Python 3.2 32Bit MSI
      --> Eclipse Standard

      ACHTUNG
      Eclipse gibt es auch schon als fertiges Eclipse PyDev Paket zum Download. Das hat bei mir aber Fehler verursacht. Daher Eclipse Standard und das PyDev Plugin selbst installieren, wie beschrieben.
    2. Installation Python
      Installer ausführen und am besten nach C:\python32 installieren.
      Unbedingt beachten, dass der Installationspfad keine Leerzeichen enthält, also z.B. nicht nach "Program Files" da sonst PyDev nicht läuft.
    3. Installation Eclipse
      Zip File entpacken, Eclipse muss nicht installiert werden. Sollte Eclipse beim Start eine Fehlermeldung liefern, dann fehlt der Pfad zur Java in der Windows Pfadvariablen und muss nachgetragen werden.
      Auch hier darauf achten, dass keine Leerzeichen im Installationspfad enthalten sind.
      Eclipse muss zur Installation von Plugins als Administrator ausgeführt werden!
    4. Installation Pydev
      In Eclipse unter "Help" --> "Install new Software" die Installationsmaske laden.
      Rechts auf Add und folgendes Repository hinzufügen.

      Name: PyDev Nightly Extension
      Location: http://pydev.org/nightly

      Warten bis Eclipse die installierbaren Pakete anzeigt und dann unter PyDev "PyDev for Eclipse 3.2.1.20140109...." anhaken.

      Durchs Menü hangeln und warten bis Eclipse das PyDev Update installiert hat

      Achtung
      Nicht das http://pydev.org/update Repository verwenden, die 2013 Versionen liefern mit Python 3.2 einen Syntax Error
    5. Eclipse Konfigurieren
      --> "Window" --> "Preferences" --> "Pydev" --> "Interpreter" --> "Python Interpreter"
      - auf new klicken und die installiere python.exe auswählen
      - darauf hin werden automatisch einige PYTHONPATH Pfade ergänzt
    6. Erstmal Lokal Testen
      Jetzt ist Eclipse so konfiguriert, dass Lokal in Python programmiert und getestet werden kann.

      Neues Projekt:
      "File" --> "New" --> "Project"
      Unter PyDev "PyDev Project" auswählen.
      Name vergeben und Interpreter auswählen.

      Neues Module:
      "File" --> "New" --> "Other"
      - "Pydev Module" auswählen.
      - Dateiname ohne Endung ".py" wählen.
      - Template "Empty" wählen.

      Testprogramm:
      Code:
      #!/usr/bin/env python
      #
       
      x = 0
       
      while x<100 :
          print(x)
          x = x+1
      Jetzt wird man schon schnell merken, dass Eclipse immer sofort auf Fehler im Code hinweist. Das Leben kann so schön sein.

      Jetzt einfach mal auf "Run" drücken und dann sollten im Console Fenster die Zahlen 0 - 99 auftauchen.

      Weiter gehts im Teil 2.

    #2
    Weitergehts mit Teil 2.
    1. Lokale Installation des Debuggers auf dem Windows Client

      Der Debugger pydevd wird automatisch mit PyDev mitgeliefert. Es muss nur noch ein PYTHONPATH auf das Folder gesetzt werden.

      - pydevd.py im Ordner Eclipse/plugins suchen und Dateipfad kopieren
      - z.B. bei mir unter: F:\eclipse\plugins\org.python.pydev_3.2.1.20140109 1857\pysrc
      --> "Window" --> "Preferences" --> "Pydev" --> "Interpreter" --> "Python Interpreter" öffnen
      - unter PYTHONPATH auf "New Folder" und den Pfad zur pydevd.py eintragen.

    2. Debugger Testen
      --> "Windows" --> "Open Perspective" -->"Other" eine Debug Perspektive öffnen
      - im Script muss der Debugger zunächst mit "import pydevd" geladen werden.
      - ein breakpoint setzt man mit der Anweisung "pydevd.settrace("IP des Client")"

      Code sollte dann so aussehen:
      Code:
      #!/usr/bin/env python
      #
      
      import pydevd
      
      x = 0
      
      while x<100 :
          print(x)
          pydevd.settrace("192.168.2.31")
          x = x+1
      Jetzt den Debuger mit einem Klick auf das Käfersymbol starten und testen. Step over, into, etc.
      Zusätzliche Breakpoints einfach mit einem weiteren pydevd.settrace an einer anderen Stelle einfügen.

      Achtung!
      Hier ist die IP des Rechners auf dem Eclipse läuft gemeint. Der Debugger warted dann später auf Befehle von Smarthome mit einem TCP Listen

    Kommentar


      #3
      Teil 3:
      1. Installation des Debuggers auf dem Smarthome Server

        Hierzu hab ich mich eigentlich weitestgehend an dieses Tutorial gehalten.
        Da mich das dennoch mehrere Stunden gekostet hat, nachfolgend einige Kommentare:

        - Als erstes muss das komplette pysrc Folder welches den pydevd enthält, per WinSCP oder über die Samba Freigabe auf den Raspberry kopiert werden.

        Dann alles erst mal ins dist-packages verzeichnis kopieren:
        Code:
        sudo cp -R pysrc/* /usr/local/lib/python3.2/dist-packages/
        Alle weiteren Schritte aus dem Tutorial waren bei mir gar nicht mehr notwendig.

        Achtung
        Wie schon erwähnt, müssen die zu untersuchenden Python Scripte den gleichen Dateinamen und gleichen Source Code besitzen. Daher also immer sicherstellen, dass remote und lokal die gleiche Datei liegt.
      2. Einbau des Debugers in die Logik

        - als letztes muss nur noch der Debuger in das Logikscript geladen werden, das geht genau gleich wie im Teil 2 bereits beschrieben. Erst import pydevd und dann pydev.settrace. Wieder sicherstellen, dass die IP des Windows Clients verwendet wird.
        - also script im Ordner logics öffnen, Programm schreiben, speichern und dann alles in die Datei im Eclipse Workspace kopieren. Das pydev module bekommt den gleichen Dateinamen wie die Logik auf smarhome.

        Testprogramm:
        Code:
        #!/usr/bin/env python
        #
        import re
        import pydevd
        
        for item in sh :
        	
        	for child in item :
        		
        		for gadget in child :
        			print (gadget.id())
        			rolloRegex = re.match(r".*Roll", gadget.id())
        			if rolloRegex is not None :
        				print ("Sollte ein Rolladen sein!")
        				pydevd.settrace("192.168.2.31")
      3. Debuggen
        Als erstes den Debug Server starten. Hierzu in Eclipse in die Debug Perspektive wechseln und dann unter "Pydev"-->"Start Debug Server" den Server Starten.
        Der Server startet und hört auf Port 5678

        Als nächstes Smarthome stoppen und im Debug Modus neu starten damit das Logikscript eingelesen wird.

        Dann die Logik triggern.

        Jetzt sollte Eclipse automatisch reagieren.

        Wählt man jetzt in Eclipse im Debug Fenster die Zeile "module" an, kann man rechts im Variablen Fenster schön den kompletten Aufbau von sh erkennen.
        Auch Steps sind möglich. Manipulation von Variablen hab ich noch nicht getestet.

        hab mal ein Bildchen angehängt.

        Hoffe geholfen zu haben.

        Gruß







      Angehängte Dateien

      Kommentar


        #4
        Dickes Danke für die Anleitung. Wenn ichs mit Pycharm nicht hinbekomme, dann werde ich Eclipse eine Chance geben.
        Sonos

        Kommentar


          #5
          Hallo,

          danke auch von meiner Seite!
          Ich bin gerade dabei es auszuprobieren, dazu ein paar Fragen:
          1) Die /usr/local/lib/python3.2/dist-packages/pydevd_file_utils.py musstest du nicht anpassen? Sprich: Auf dem raspi hast du nix gemacht, außer die Dateien aus dem Eclipse Plugin rüber kopiert?
          2) Ich nehme an, du hast nicht von allen plugins zwei Versionen (eine auf dem raspi und eine in Windows, sondern arbeitest mit einer Datei, die auf dem Raspi per samba geteilt sind?
          3) Kannst du kurz erklären, wie du die Plugins in eclipse importiert/angelegt hast?

          Ich habe ein neues Projekt anlegen wollen in \\homeserver\smarthome\. Das wollte eclipse aber nicht, da es hier schon ein Projekt gefunden hat. Ich solle es importieren. Das hab ich gemacht, aber eclipse meckert, dass der interpreter python3.2 nicht gefunden wurde (der ist aber installiert und der test aus deinem Tutorial lief auch).

          Wen ich jetzt ein neues Modul anlegen möchte, kann ich weder SourceFolder noch Package wählen (ok ist Grau, siehe Screenshot).

          Ich nehme an, du machst das grundlegend anders?
          Kannst du das kurz schildern?

          Gruß,
          Hendrik
          Angehängte Dateien

          Kommentar


            #6
            Logik Programmierung mit Eclipse und Remote Debug auf SH

            Hab das Remote-Debuggen gerade mit Pycharm unter Linux hinbekommen. Wenn Bedarf besteht, könnte ich ein kleines How-To posten.


            Gesendet von meinem iPad mit Tapatalk
            Sonos

            Kommentar


              #7
              1. im ersten Versuch hatte ich die Pfade zu den Logik Dateien eingetragen, da hatte ich aber noch eine andere pydev Version in Verwendung, welche Syntax Fehler geliefert hab. Danach hab ich wie beschrieben auf die nightly Version umgestellt und vergessen die pydevd_file_utils.py anzupassen. Hat also ohne Modifikationen geklappt.

              2. ja, das geht. Allerdings muss der Eclipse Workspace dann auf dem Smarthome liegen. Eclipse legt aber immer einen Projekt Ordner an, deshalb müssen die Files dann mit symbolischen Links im Logik Verzeichnis abgelegt werden. Hab das ganze mal als kurzes Video aufgezeichnet, sonst schreib ich mir dir Finger wund.

              Video

              3. Wie beschrieben arbeite ich nur mit einem "logic_develop.py" Source Datei. Ich teste und wenn alles klappt kopiere ich den Source Code in das eigentliche Plugin.

              Ja, hört sich alles noch nicht ganz rund an, bin aber froh überhaupt mal einen Einblick in die Struktur von sh zu haben.

              Kommentar


                #8
                @pfischi
                Hast du das mit der Community Version hinbekommen?
                Aber wie auch immer eine Anleitung für Linux wäre ganz hilfreich...

                Kommentar


                  #9
                  Zitat von panzaeron Beitrag anzeigen
                  @pfischi

                  Hast du das mit der Community Version hinbekommen?

                  Aber wie auch immer eine Anleitung für Linux wäre ganz hilfreich...

                  Ich habe die Pro-Version. Aber ich denke, das müsste mit der Community-Edition auch gehen. Ich werde das How-To im Laufe der Woche erstellen.

                  Ich bin auch dafür , das Eclipse-Tutorial mit in die Wiki vom Smarthome.py-Projekt aufzunehmen.


                  Gesendet von meinem iPad mit Tapatalk
                  Sonos

                  Kommentar


                    #10
                    Zitat von pfischi Beitrag anzeigen
                    Ich bin auch dafür , das Eclipse-Tutorial mit in die Wiki vom Smarthome.py-Projekt aufzunehmen.
                    +1!

                    Das kann jeder mit einem github-Account editieren.

                    Bis bald

                    Marcus

                    Kommentar


                      #11
                      kein thema, bevor ich das howto dort einstelle würde ich aber noch gerne ein wenig feedback abwarten. Klappt das bei euch wie beschrieben?

                      Derweil zeichnet sich dann doch ein kleines Problem ab.

                      Wenn eine Logik ausgeführt wird, die den pydevd importiert, wird mein smarthome in der debug console mit "Ctrl+C" nicht mehr sauber gekillt. Da hilft dann nur noch ein explizites "smarthome --stop" in einer zweiten ssh Session.

                      Kommentar


                        #12
                        großes Lob auch von mir! Damit sollte man aber auch Plugins debuggen könne, oder?

                        Das würde die Entwicklung sicherlich extrem erleichtern und ich würde bestimmt wieder mehr an sh.py rumspielen. Denn ewig print Orgien um Fehler im Plugin zu finden stehen mir Oberkante Unterlippe
                        Mit freundlichen Grüßen
                        Niko Will

                        Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                        - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                        Kommentar


                          #13
                          Also ich kann zumindestens mit Pycharm alles debuggen...Smarthome als solches, Plugins, Logiken etc. Macht es echt komfortabel. Dazu noch Pre-Debug Events wie das Hoxhladen der geaenderten Projektdateien.

                          Gesendet von meinem GT-N7000 mit Tapatalk
                          Sonos

                          Kommentar


                            #14
                            Dazu noch Pre-Debug Events wie das Hoxhladen der geaenderten Projektdateien.
                            Was ist denn damit gemeint?
                            Kann man Plugins laden ohne SH neu zustarten.

                            Ich würd pycharm auf jeden Fall auch mal testen. Aber dazu wäre ein kleines Howto schön. Möchte mich nicht noch einen ganzen Tag durch irgendwelche Foren wühlen. Soviel Rotwein hab ich nicht.

                            großes Lob auch von mir! Damit sollte man aber auch Plugins debuggen könne, oder?
                            Ja, Plugins debuggen geht super.

                            Kommentar


                              #15
                              Mit den Preevents iat gemeint, das ich vor dem Debuggen automatisch die Projektdateien auf das Pi laden kann. Soweit ich das sehe, kann man beliebige Befehle (z.B. Terminal Befehle) remote ausfuehren. So koennte man ein automatischen Neustart von sh.py durchfuehren vor dem debuggen.
                              Am WE werd ich mal versuchen, das HowTo fertig zu machen. Neben Frau und Kind nimmt much auch noch das Sonos-Plugin / Server in Beschlag. Aber ich denke, HowTos fuer die Entwicklungsumgebung haben fast den Vorrang


                              Gesendet von meinem GT-N7000 mit Tapatalk
                              Sonos

                              Kommentar

                              Lädt...
                              X