ftrobopy Anfänger Fragen

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Grau
Beiträge: 115
Registriert: 03 Jan 2015, 17:21

ftrobopy Anfänger Fragen

Beitrag von Grau » 08 Jan 2017, 13:10

Hallo ich habe einige Anfänger Fragen zu ftrobopy:

1. Verbindung aufnehmen:
Wenn ich mit der Python IDE auf dem PC Programme testen möchte und diese später auf den TXT übertragen möchte wie ist die Richtige Verbindung?
-------------------
a) Geht auf dem TXT aber nicht im Online (WLAN) Betrieb:

txt_ip = os.environ.get('TXT_IP') # IP Adresse aus Umgebungsvariablen in txt_ip speichern.
if txt_ip == None: txt_ip = "localhost" # Wenn keine IP verwende localhost
try:
txt = ftrobopy.ftrobopy(txt_ip, 65000) # Versuche Verbindung aufzubauen und txt zuweisen
except:
txt = None
--------------------
b) Geht im Online Betrieb aber nicht auf dem TXT:

txt=ftrobopy.ftrobopy('192.168.5.80', 65000) # WLAN

--------------------

2. Online Betrieb
Wann sollen die Funktionen startOnline() und stopOnline() verwendet werden?
a) Nur wenn das Programm mit der Python IDE gestartet wird.
b) Wenn das Programm Online gestartet wird und wenn das Programm mit der Python IDE gestartet wird.

txt.startOnline() # Onlinebetrieb starten
txt.stopOnline() # Onlinebetrieb stoppen

--------------------
3. Programm beenden
Gibt es eine Funktion die man am Ende aufruft?
--------------------
4. Kamera
Ich habe die Kamera mit txt.startCameraOnline() gestartet.
Wenn ich im Browser iP:65001 aufrufe, erhalte ich kein Bild.
--------------------
5. Version
Gibt es eine Funktion um die Version von ftrobopy abzufragen?

Gruß Grau

richard.kunze
Administrator
Beiträge: 583
Registriert: 26 Dez 2015, 23:49
Wohnort: Rhein-Main-Gebiet

Re: ftrobopy Anfänger Fragen

Beitrag von richard.kunze » 08 Jan 2017, 16:03

Hallo,
Grau hat geschrieben: 1. Verbindung aufnehmen:
Wenn ich mit der Python IDE auf dem PC Programme testen möchte und diese später auf den TXT übertragen möchte wie ist die Richtige Verbindung?
-------------------
a) Geht auf dem TXT aber nicht im Online (WLAN) Betrieb:

txt_ip = os.environ.get('TXT_IP') # IP Adresse aus Umgebungsvariablen in txt_ip speichern.
if txt_ip == None: txt_ip = "localhost" # Wenn keine IP verwende localhost
try:
txt = ftrobopy.ftrobopy(txt_ip, 65000) # Versuche Verbindung aufzubauen und txt zuweisen
except:
txt = None
--------------------
Das sollte eigentlich sowohl auf dem TXT als auch Online funktionieren. Allerdings musst Du dafür im Online-Betrieb auch die Environment-Variable "TXT_IP" auf den passenden Wert (nach Deinem anderen Beispiel bei dir wohl '192.168.5.80') setzen, sonst wird automatisch 'localhost' versucht, und das klappt natürlich nur, wenn das Programm auch direkt auf dem TXT läuft.

Wie genau Du eine Environment-Variable für ein Python-Programm setzen kannst, hängt von Deinem Betriebssystem (auf dem PC) bzw (wenn Du das Programm direkt aus der IDE startest) von der verwendeten IDE ab.
Grau hat geschrieben: 2. Online Betrieb
Wann sollen die Funktionen startOnline() und stopOnline() verwendet werden?
a) Nur wenn das Programm mit der Python IDE gestartet wird.
b) Wenn das Programm Online gestartet wird und wenn das Programm mit der Python IDE gestartet wird.

txt.startOnline() # Onlinebetrieb starten
txt.stopOnline() # Onlinebetrieb stoppen
Die beiden Funktionen brauchst Du im Normalfall nicht selbst aufrufen, das macht ftrobopy.ftrobopy() (für startOnline()) bzw. der Destruktor des entsprechenden Objekts (für stopOnline()) für Dich.
Grau hat geschrieben: 3. Programm beenden
Gibt es eine Funktion die man am Ende aufruft?
Das kommt drauf an, wie endgültig das "Ende" ist. Wenn Du mit dem txt-Objekt fertig bist, aber Dein Programm ansonsten noch weiterlaufen soll, dann kannst Du mit "del txt" die belegten Resourcen (d.h. im wesentlichen die Verbindung mit dem TXT) wieder freigeben. Beispiel:

Code: Alles auswählen

import ftrobopy
txt_ip = os.environ.get('TXT_IP') # IP Adresse aus Umgebungsvariablen in txt_ip speichern.
if txt_ip == None: txt_ip = "localhost" # Wenn keine IP verwende localhost
txt = ftrobopy.ftrobopy(txt_ip, 65000)  # Versuche Verbindung aufzubauen und txt zuweisen
# ... Dein Code, der txt verwendet
del txt
Wenn Du das ganze Programm beendest, kannst Du Dir das aber auch sparen und einfach Python für dich "aufräumen" lassen.

Torsten
Beiträge: 310
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: ftrobopy Anfänger Fragen

Beitrag von Torsten » 08 Jan 2017, 21:01

Hallo Grau,
Grau hat geschrieben:Wenn ich mit der Python IDE auf dem PC Programme testen möchte und diese später auf den TXT übertragen möchte wie ist die Richtige Verbindung?
seit Version 1.56 kennt ftrobopy den 'auto'-Modus, bei dem automatisch die richtige Verbindungseinstellung gewählt wird. Ausserdem gibt es den (optionalen) Zusatzparameter "special_connection", der die IP-Adresse eines TXT im lokalen Netzwerk enthält (die 'special_connection'-IP wird nur im OnlineModus "ausprobiert"):

Code: Alles auswählen

import ftrobopy
txt=ftrobopy.ftrobopy('auto', special_connection='192.168.5.80')
Grau hat geschrieben:2. Online Betrieb
Wann sollen die Funktionen startOnline() und stopOnline() verwendet werden?
a) Nur wenn das Programm mit der Python IDE gestartet wird.
b) Wenn das Programm Online gestartet wird und wenn das Programm mit der Python IDE gestartet wird.

txt.startOnline() # Onlinebetrieb starten
txt.stopOnline() # Onlinebetrieb stoppen
Die "startOnline()"-Funktion wird innerhalb des Konstruktors von ftrobopy.ftrobopy automatisch aufgerufen und muss nicht "von Hand" aufgerufen werden.
Grau hat geschrieben: 3. Programm beenden
Gibt es eine Funktion die man am Ende aufruft?
Python räumt automatisch am Ende alles wieder auf. Im Prinzip muss man deshalb am Ende selbst keine spezielle Funktion mehr aufrufen. Allerdings ist es empfehlenswert, am Ende eines ftrobopy-Programmes die folgenden Befehle abzusetzen:

Code: Alles auswählen

txt.stopOnline()
time.sleep(0.1)
Damit wird der ftrobopy-Kommunikations-Prozess (der die Daten zwischen PC und TXT oder zwischen TXT-Linux und TXT-Motorplatine hin- und her schickt) ordentlich beendet und noch einen kurzen Moment geartet. Es kann sonst manchmal passieren, das zuerst das Hauptprogramm beendet wird und dann erst der Kommunikations-Prozess von Python "aufgeräumt" wird. In diesem Fall erhält man dann eine unschöne Fehlermeldung (die man nicht weiter beachten muss), weil der Kommunikations-Prozess nicht mehr auf die Daten des Hauptprogramms zugreifen kann.
Grau hat geschrieben: 4. Kamera
Ich habe die Kamera mit txt.startCameraOnline() gestartet.
Wenn ich im Browser iP:65001 aufrufe, erhalte ich kein Bild.
Nachdem der startCameraOnline-Prozess gestartet wurde, werden die JPEG-Bilder der Kamera direkt hintereinander auf den Port 65001 geschickt (ohne HTML-Code dazwischen). Man kann die Bilder nicht direkt mit einem Webbrowser anschauen, sondern sollte sie unter Python (mit txt.getCameraFrame()) abfragen und dann weiterverarbeiten. Das Kamera-Bild kann z.B. folgendermassen in eine Datei gespeichert werden:

Code: Alles auswählen

txt.startCameraOnline()
time.sleep(2.5) # es kann bis zu 2.5 Sekunden dauern, bis die Kamera anfängt ordentliche Bilder zu senden
jpegBild = txt.getCameraFrame()
with open('TXTBild1.jpg', 'wb') as f:
    f.write(bytearray(jpegBild))
Grau hat geschrieben:5. Version
Gibt es eine Funktion um die Version von ftrobopy abzufragen?
Die ftrobopy-Versionsnummer kann mit folgendem Befehl abgefragt werden:

Code: Alles auswählen

print("ftrobopy-Version: ", ftrobopy.version())
Viele Grüße
Torsten

Grau
Beiträge: 115
Registriert: 03 Jan 2015, 17:21

Re: ftrobopy Anfänger Fragen

Beitrag von Grau » 09 Jan 2017, 17:45

Hallo,
danke für die schnellen Antworten.
Wenn ich die Befehle probiere bekomme ich immer die angehängte Fehlermeldung.
Ich habe es mit der Version 1.62 probiert.

import ftrobopy
txt=ftrobopy.ftrobopy('auto', special_connection='192.168.5.80')


Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
=============== RESTART: C:\_FT_PYTHON\_APPS_PYTHON\Lampe3.py ===============
Programm startet!
Traceback (most recent call last):
File "C:\_FT_PYTHON\_APPS_PYTHON\Lampe3.py", line 14, in <module>
txt=ftrobopy.ftrobopy('auto', special_connection='192.168.5.80') # Versuche Verbindung auzubauen und txt zuweisen
AttributeError: module 'ftrobopy' has no attribute 'ftrobopy'
>>>
-------------------------------------------------------------------
Mit der Version geht die alte Methode auch nicht.

import ftrobopy
txt=ftrobopy.ftrobopy('192.168.5.80', 65000)

Traceback (most recent call last):
File "C:\_FT_PYTHON\_APPS_PYTHON\Lampe3.py", line 10, in <module>
txt=ftrobopy.ftrobopy('192.168.5.80', 65000) # WLAN
AttributeError: module 'ftrobopy' has no attribute 'ftrobopy'

Gruß Grau

Torsten
Beiträge: 310
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: ftrobopy Anfänger Fragen

Beitrag von Torsten » 09 Jan 2017, 21:10

Hallo Grau,

vielen Dank für die Rückmeldung.
Grau hat geschrieben:import ftrobopy
txt=ftrobopy.ftrobopy('auto', special_connection='192.168.5.80')
[...]
AttributeError: module 'ftrobopy' has no attribute 'ftrobopy'
Dies war tatsächlich noch ein Problem, das immer dann auftrat, wenn ftrobopy in einem Unterverzeichnis installiert war. Die neue (gefixte) Version auf github ist jetzt die 1.63.

Viele Grüße
Torsten

Antworten