Seite 2 von 2

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 10:04
von Sirius3
@mollyman: dann schau Dir nochmal genau an, was Du da machst:

Code: Alles auswählen

def rf_modul():
    print (" start rf modul")
    _thread.start_new_thread(receive, ())
    receive()

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 10:34
von mollyman
Upps * sich schäm*

Verstanden

Aber bevor das doppelte receive kommt, kommt ein print, das wird aber auch nicht geschrieben.

Ich korrigiere es und probiere es erneut

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 11:30
von mollyman
Habe den 2. receive Aufruf entfernt. es hat aber nix verändert.

Mir ist aber aufgefallen, dass wenn cih das Fenster schließe dann der receive startet.

Code: Alles auswählen

GUI()
rf_modul()
die Reihenfolge ist wohl schuld daran.
ein Tausche der Reihenfolge bringt einen neuen Fehler, der aber darauf hindeutet, dass dass das receive arbeitet:

Code: Alles auswählen

signal.signal(signal.SIGINT, exithandler)
ValueError: Signal only works in main thread.
Daraus entnehme ich dass ich das receive Script nicht in einen Thread auslagern kann.
Die GUI kann ich aber auch nicht auslagern.
Jetzt bin ich ziemlich ratlos

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 11:49
von Sirius3
@mollyman: wie schon ganz am Anfang geschrieben: Signale sind nicht die richtige Methode um "Aufzuräumen".

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 11:59
von mollyman
Mist.

Ich habe keine Ahnung vom parsen .
Leider verstehe ich anhand der jeweiligen Doku weder wie das receive script funktioniert noch was Signal eigentlich wirklich darin macht.

Tja, dann muss ich mir was einfallen lassen.
Dann geht es nicht mit der 433 MHz Lösung.

Danke für eure Hilfe.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Montag 12. März 2018, 13:00
von __deets__
Das ist Unfug. Natuerlich geht das. Nur eben nicht mit dem aufeinanderkloppen von Skripten, die du nicht verstehst, und die Dinge machen wie zB Kommandozeilen Argumente parsen oder Fehlerbehandlung durchzufuehren auf (in DEINEM FALL) ungeeignete Art und Weise.

Du brauchst weder eine flexible Angabe des verwandten GPIOs (womit der Argument-Parser rausfaellt), noch willst du dein Skript per Ctrl-C abbrechen und danach schoen aufraeumen. Womit die Signal-Behandlung entfaellt.

Alles was du brauchst ist das RFDevice. Vergiss *ALLES* andere. Es ist ein beliebter Anfaengerfehler, alles auf einmal in einem riesen Klumpatsch zum laufen zu bringen.

Starte nur zum ausprobieren mit einem NEUEN Skript, in dem ausser den Zeilen

Code: Alles auswählen

from rpi_rf import RFDevice

def receive():
      pass
      
if __name__ == "__main__":
      receive()
nix steht. Und arbeite dich dahin, das du das zum funktionieren bekommst. Naechster Schritt: receive im Hintegrund-Thread starten. OHNE das "verbotene" Modul _thread, sondern mit dem dafuer gedachten Modul threading.

Dann hast du eine Grundlage, das in deine bestehende GUI einzubauen.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Dienstag 13. März 2018, 13:21
von mollyman

Code: Alles auswählen

def receive():
    rfdevice = RFDevice(27)
    rfdevice.enable_rx()
    timestamp = None
    while True:
        if rfdevice.rx_code_timestamp != timestamp:
            timestamp = rfdevice.rx_code_timestamp
            rec_num = (str(rfdevice.rx_code))
            if rec_num == "16404":
                time.sleep(2)
                start()
        time.sleep(0.01)
Das funktioniert jetzt.

das auch:

Code: Alles auswählen

def rf_modul():
    tr = Thread(target = receive)
    tr.start()

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Dienstag 13. März 2018, 14:01
von __deets__
Na sieht doch gut aus :!: Ich wuerde das time.sleep(2) noch entfernen, und stattdessen in start verschieben, weil das mE eine Entscheidung ist, die da getroffen werden sollte, und mit dem eigentlichen Empfang nichts zu tun hat. Ist aber Kuer.

Dann bau das doch mal in dein Tool ein und schau, ob's besser wird.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Dienstag 13. März 2018, 16:17
von mollyman
das receive funktioniert im Tool,auch das threading.
Das time Sleep ist noch ein überbleibsel des testens und ist jetzt auch noch rausgeflogen.

Wenn jetzt noch die letzten Einstellungen gespechert werden, wäre das toll.
Ich habe mal mit dem configparser gespielt, aber der scheint nicht so richtig zu funktionieren bei mir.
Seit dem ich die vielen Globals rausgenommen habe scheint die Logik auch nicht mehr zu funktionieren.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Dienstag 13. März 2018, 17:32
von __deets__
Ich habe ja auch nicht gesagt du sollst die rausnehmen. Ich habe gesagt das du teilweise unsinnige hast (auf modul-Ebene), und das dir in vielen Funktionen welche *fehlen*.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Mittwoch 14. März 2018, 07:40
von mollyman
ok, dann hatte ich das völlig falsch verstanden

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Mittwoch 14. März 2018, 12:45
von mollyman
ich glaube so richtig habe ich das noch nicht verstanden mit dem Globalen Variabelen.
Das ist das, wass ich bisher verstanden habe:
  • Variabelen auf Modulebene OHNE "global" mit Werten versehen gelten nur auf Modulebene
    Variabelen auf Modulebene MIT "global" mit Werten versehen gelten auf Modulebeneund in den Funktionen
    Variabelen in einer Funktion OHNE "global" mit Werten versehen gelten nur in der Funktion
    Variabelen in einer Funktion müssen MIt "global" in der Funktion deklariert werden, bevor sie einen Wert bekommen, damit die sie als die Variabe auf Modulebene erkannt werden.
Ansonsten habe ich die globals wieder eingefügt und und das programm läuft jetzt auch Grundsätzlich.

Re: Python2 /Python 3; Adafruit 16-Kanal PCA9685 und rpi-rf

Verfasst: Mittwoch 14. März 2018, 14:04
von __deets__
Der zweite Satz ist Unsinn. global auf Modul-Ebene ist wirkungslos. Da ist alles immer global. Das global Schlüsselwort entfaltet nur IN einer Funktion eine Wirkung.