Python Problem :)

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Python Problem :)

Beitrag von Hightech »

Ich habe Daten auf einem zweiten Raspi die ich verarbeiten will.
Die Daten kommen per tcpcom auf den Client.

Wie kann ich die weiter verarbeiten, bzw wo in dem Script unten läuft die Schleife?
An welcher Stelle kann ich die Daten verarbeiten oder in eine globale Variable senden?

Hier der code:

Code: Alles auswählen

from tcpcom import TCPClient
import time

IP_ADDRESS = "192.168.1.100" # PC on same IP segment
IP_PORT = 22000
a = 0
def onStateChanged(state, msg):
    
    global isConnected
    if state == "CONNECTING":
       print "Client:-- Waiting for connection..."
    elif state == "CONNECTED":
       print "Client:-- Connection estabished."
    elif state == "DISCONNECTED":
       print "Client:-- Connection lost."
       isConnected = False
    elif state == "MESSAGE":
        print "Client:-- Received data:", msg
        if int(msg) < 0: 
                print "Einspeisung"

                print a 
        if int(msg) > 0: 
                print "Verbrauch"

client = TCPClient(IP_ADDRESS, IP_PORT, stateChanged = onStateChanged)
rc = client.connect()

if rc:
    isConnected = True
    while isConnected:
        client.sendMessage("pwmVer")
        time.sleep(2)
    print "Done"
else:
    print "Client:-- Connection failed"
Kenakapheus
Beiträge: 173
Registriert: Fr 1. Jan 2016, 20:43
Wohnort: Freie Feldlage (Ja, da wo das Treffen ist))

Re: Python Problem :)

Beitrag von Kenakapheus »

Die Schleife läuft im Hintergrund, wenn Daten ankommen wird die Funktion

Code: Alles auswählen

onStateChanged

aufgerufen.
Bei

Code: Alles auswählen

elif state == "MESSAGE":
        print "Client:-- Received data:", msg
Wird die Gerade ampfangende Nachricht ausgegeben.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Python Problem :)

Beitrag von Hightech »

Kann ich onStateChanged einen Wert zur Rückgabe über Return mitgeben, so das ich den Wert an einer anderen Stelle verarbeiten kann ?
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Python Problem :)

Beitrag von Fritzler »

Die Funktion für den Callback der Funktion TCPClient muss so definiert sein, dass diese nichts zurückgibt.
Aber selbst wenn du der Funktion onStateChanged ein return gibst, so bekommt den Wert dann TCPClient.

Wenn du was aus der Funktion onStateChanged raussenden willst, dann nimm Messageqeues.
https://docs.python.org/2/library/queue.html

Oder hab ich das Anliegen falsch verstanden?
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Python Problem :)

Beitrag von Hightech »

Mein Anliegen ist:

Ich habe auf dem RASPI1 ein Programm laufen in dem die Variable $Watt ständig aktualisiert wird.
Diesen Wert der Variable möchte ich auf dem RASPI2 zeitnah verarbeiten.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Python Problem :)

Beitrag von Fritzler »

Dann machs ruhig so wie ich sagte.
Im state == "MESSAGE" wird das empfangene in die Messagequeue oder FIFO gepackt und ein andeer Thread parst das.
Ich empfehle ein JSON um die Variable zu packen (das werden garantiert noch mehr ;)).
Dann ist das gut parsebar und nichts wird verwechselt.
https://docs.python.org/2/library/json.html

Mitm Wireshark sind die Nachrichten dann auch lesbar im Netzwerk debugbar :geek:
Benutzeravatar
Kuddel
Beiträge: 5074
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Noch ein Python Problem :)

Beitrag von Kuddel »

Ich kapere mal diesen Tread, weil ich auch ein Python Probleme habe.
Für einen Kollegen im Nachbarwerk habe ich ein Python-script geschrieben. Nix großes, knapp 400 Zeilen incl. Kommentare und Formulargestalung. Das Programm sucht und fügt ein paar pdf-Dateien zusammen. Auf meinem Rechner wurde Python 3.4 von unserer IT installiert. Die Zusatzmodule pypdf (verbindet zwei pdf) und fpdf (macht aus txt eine pdf) konnte ich ohne Admin nachinstallieren.

Das Programm lief soweit, und nun musste auf dem Rechner von dem Kollegen zuerst Python installiert werden. Dazu im Mai ein Ticket geschrieben. Nach einem Monat und ein paar anrufen endlich ein Kontakt zur IT. Die Kollegin vor Ort rief mich an und fragte nach den Kosten für dieses "Python". Ich erklärte Ihr, dass es Open Source und damit eine Art Freeware ist. Sie bedanke sich für die Info. Dann kehrte wieder Ruhe ein. nach einem weiteren Monat und mehreren Telefonaten war endlich Python 3.6 und zusätzlich 3.7 drauf. Warum beide, weiß ich nicht, ist aber auch egal, hoffe ich.

ich musste nun nur noch mit pip install pypdf die Module nachinstallieren. Dies scheitete. Der hinzugerufene ITler besteätigte, es liege wohl an der Firewall. Daran kann er nichts ändern. Bitte ein neues Ticket schreiben. *klack* aufgelegt.

Ich habe nun 3 Möglichkeiten:
a) Weitere 2-3 Monate komplpizierte Gesprche mit dem Ticketsysetm der IT führen.
b) Das Programm komplett neu mit C# schreiben (sehe ich derzeit als einfachste Lösung)
c) Die Module manuell herunterladen und installieren.

Meine Frage betrifft Punkt c): Geht das irgendwie?

Danke und Gruß
Kuddel
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Python Problem :)

Beitrag von Fritzler »

zu c)

Paket als zip oder Ordner runterladen.
Mit der Kommandozeile in den Ordner (nach dem unzippen) reinnavigieren und dann:
python setup.py install
Die setup.py fliegt da immer irgendwo rum bei Modulen.
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Python Problem :)

Beitrag von Hightech »

Mit wget von Github ziehen?
Benutzeravatar
Kuddel
Beiträge: 5074
Registriert: Fr 28. Jun 2013, 10:56
Wohnort: Denk immer an St. Alamo!

Re: Python Problem :)

Beitrag von Kuddel »

Geil, manuelles runterladen und installieren funktioniert. Danke für die Hilfe. Letztendlich auch ein kleiner Krampf, weil die Datei an der richtigen Stelle stehen muss. Und das Modul nur für die eine Python-version funktioniert. Und der Kollege kein Zugriff auf die benötigten Ordner mit den entsprechenden pdfs hat. Und wir somit doch noch ein Ticket schreiben müssen.
Aber egal, ich brauche es (noch) nicht neu schreiben. *freu*
Danke und Gruß
Kuddel
Antworten