KeyError nach empfangener UDP nachricht
Verfasst: Mittwoch 10. Juli 2019, 09:25
Hallo ich brauche mal wieder etwas Hilfe,
Ich hab schon vor ca einem Jahr ein Python Programm geschrieben um an "rpi und co" UDP befehle, von meiner Smarthome, Steuerung zu empfangen.
Auf einem Organe Pi one läuft das Programm, das senden und empfangen von UDP nachrichten Funktioniert, aber nicht stabil bzw hat Funktions Aussetzer. Nach einem Geräte neustart geht es dann wieder.
Deswegen möchte ich es gegen ein Raspberry pi b3+ tauschen und hab begonnen meine Programme neu für Python3 zuschreiben.
Aber das Neue Programm funktioniert nicht, bzw wenn ich mit PacketSender ein UDP Nachricht sende um einen Funktion auszuführen bekomme ich jetzt immer einen KeyError.
Hier mal der code:
Das passiert beim ausführen bzw nach dem ich "Ausgang1on" sende:
Ich hab den code jetzt auch auf einem Windows Interpreter getestet mit dem selben Ergebnis:
Was muss ich machen damit das Funktioniert?
bzw was könnte ich besser machen?
grüsse
Gerhard
Ich hab schon vor ca einem Jahr ein Python Programm geschrieben um an "rpi und co" UDP befehle, von meiner Smarthome, Steuerung zu empfangen.
Auf einem Organe Pi one läuft das Programm, das senden und empfangen von UDP nachrichten Funktioniert, aber nicht stabil bzw hat Funktions Aussetzer. Nach einem Geräte neustart geht es dann wieder.
Deswegen möchte ich es gegen ein Raspberry pi b3+ tauschen und hab begonnen meine Programme neu für Python3 zuschreiben.
Aber das Neue Programm funktioniert nicht, bzw wenn ich mit PacketSender ein UDP Nachricht sende um einen Funktion auszuführen bekomme ich jetzt immer einen KeyError.
Hier mal der code:
Code: Alles auswählen
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import socket
import sys
import time
from time import sleep
bufsize = 8192 # 8 kByte
receive = ("", 8020 )
send = ("10.10.11.2", 8021 )
UDPSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
UDPSock.bind(receive)
print( "UDPServer Waiting for client on port", receive )
def Ausgang1on():
UDPSock.sendto(b"Ausgang1 on", send)
print( "Ausgang1 on" )
def Ausgang1off():
UDPSock.sendto(b"Ausgang1 off", send)
print( "Ausgang1 off" )
options = { "Ausgang1on" : Ausgang1on,
"Ausgang1off" : Ausgang1on,
}
while True:
try:
dataFromClient, addr = UDPSock.recvfrom(bufsize)
options[dataFromClient]()
print( dataFromClient)
print( options)
except KeyError:
print( dataFromClient)
print( "KeyError")
UDPSock.sendto(b"KeyError", send)
Code: Alles auswählen
pi@door:~/skripte $ sudo python3 tets1.py
UDPServer Waiting for client on port ('', 8020)
b'Ausgang1on'
KeyError
Code: Alles auswählen
UDPServer Waiting for client on port ('', 8020)
b'Ausgang1on'
KeyError
b'Ausgang1off'
KeyError
b'falscheszeichen'
KeyError
bzw was könnte ich besser machen?
grüsse
Gerhard