Hallo,
ein Problem habe ich leider noch mit meiner Bottle, die Daten werden erfolgreich übergeben, kommen im Python Programm auch korrekt an, dort kann ich sie aber nicht richtig weg schreiben...
Die Daten werden im JSON Data geschrieben, auf dieses Array möchte ich jetzt von anderen Funktionen aus drauf zugreifen. Wenn ich die Daten direkt in einer Funktion übergebe, dann geht es (kann ich so aber im Programm nicht für alle Funktionen gebrauchen). Die Daten bleiben nur Lokal in der TelemetrieHandler2 Funktion.
Hier die relevanten Teile des Programms:
pwm_servo_unten = 1400
pwm_servo_oben = 1400
pwm_antrieb_var = 50
data = {
'servo_untenlinks': ['servo_untenlinks','400'],
'servo_rechts': ['servo_rechts','400'],
'pwm_antrieb': ['pwm_antrieb','50']
}
def pwm_hauptantrieb(pin1, pin2, dir, l_rangepwm):
GPIO.output(pin2, False)
Antrieb_thread = threading.Thread()
Antrieb_thread = GPIO.PWM(pin1, l_rangepwm)
Antrieb_thread.start(l_rangepwm)
time.sleep(2)
Antrieb_thread.stop()
print (data["pwm_antrieb"])
return (l_rangepwm)
@bottle.route('/data/', method='POST')
def TelemetryHandler2():
printD("Telemetry Request data.")
bottle.response.content_type = 'application/json'
pwm_servo_unten = int(request.json['servo_linksrechts'])
pwm_servo_oben = int(request.json['servo_obenunten'])
pwm_antrieb_var = int(request.json['pwm_antrieb'])
if (pwm_servo_unten <= 2600 and pwm_servo_unten >= 800):
servo_func(PIN_SERVO_UNTEN, pwm_servo_unten)
if (pwm_servo_oben <= 2600 and pwm_servo_oben >= 800):
servo_func(PIN_SERVO_OBEN, int(pwm_servo_oben))
data = [{'servo_linksrechts': pwm_servo_unten} , {'servo_obenunten' : pwm_servo_oben} , {'pwm_antrieb' : pwm_antrieb_var}]
print (json.dumps(data, indent=4))
return json.dumps(data)
@bottle.route('/cmd/<command>')
def CommandHandler(command):
response = ''
printD("Command Request: {}".format(command))
if command == 'PiTEMP':
response = getPiTemperature()
if command == 'pwm_antrieb':
response = pwm_hauptantrieb(PIN_OUT_1, PIN_OUT_2, 3, pwm_antrieb_var)
elif command == 'exit':
response = beenden()
printD("response: %s"% response)
return str(response)
Alles anzeigen
Hier der Konsolen Output:
Telemetry Request data.
add_channel_pulse: channel=0, gpio=13, start=0, width=160
1600
clear_channel_gpio: channel=0, gpio=13
add_channel_pulse: channel=0, gpio=19, start=0, width=160
1600
clear_channel_gpio: channel=0, gpio=19
[
{
"servo_linksrechts": 1600
},
{
"servo_obenunten": 1600
},
{
"pwm_antrieb": 6
}
]
Command Request: pwm_antrieb
['pwm_antrieb', '50']
response: 50
Alles anzeigen
Wie man sehen kann, wird pwm_antrieb im oberen teil auf 6 gesetzt. (Die Zeile print (json.dumps(data, indent=4)) im TelemetrieHandler2)
Unten ist Ausgabe aus der Funktion pwm_hauptantrieb. Die Funktion nutzt den Wert der globalen Variable der Abgleich mit dem JSON funktioniert nicht.
Wie kann ich das am besten realiesieren?