Udp Client mit Terminal Befehl ausgabe

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
ToB204
User
Beiträge: 2
Registriert: Freitag 26. Juli 2013, 01:34

Hallo Python Forum

ich möchte gerne per udp Befehle versenden die dann in meinem kleinen Raspberry pi empfangen werden und bestimmte Befehle im Terminal auslösen. Der Grund ist das meinen Beamer, der per Rs232 an meinem Raspberry pi hängt, gerne in meine Hausautomatisierung einbinden möchte. Der Sender der udp Befehle ist mein Loxone-Miniserver. Im dortigen Forum hab ich ein Python Script aufgegabelt (Link), dass ich nun mit meinen bescheiden pyhton Kenntnissen (gleich null) geändert habe.

Code: Alles auswählen

#!/usr/bin/python
import socket
import os

UDP_IP = "192.168.2.4" # IP der Loxone
UDP_PORT = 50007 # UDP Port der Loxone

sock = socket.socket (socket.AF_INET,
                      socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP,UDP_PORT))

while True:
        data, addr = sock.recvfrom( 1024 ) # buffer size is 1024 bytes
        print "received message:", data
if data == "Beamer_starten" : # UDP-Befehl von der Loxone
        os.system('echo "PWR ON" >/dev/ttyUSB0') # Terminal Befehl
        print "Beamer gestartet"
Jetzt bekomme ich leider beim Skript start diese Meldung

Code: Alles auswählen

pi@raspberrypi ~ $ ./skript.py
Traceback (most recent call last):
  File "./skript.py", line 10, in <module>
    sock.bind((UDP_IP,UDP_PORT))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address
Ich würde mich freuen wenn mir jemand helfen könnte!

Vielen Dank im Voraus!!!!!
BlackJack

@ToB204: Ich bin ein klein wenig verwirrt. Wenn der Beamer am Raspi hängt, dann müsste dieses Skript ja auf dem Raspi laufen, denn das ist ja der Befehlsempfänger der das dann an den Beamer weiterleitet. Bei der IP steht aber im Kommentar das sei die IP von der Loxone‽ Das muss schon die, beziehungsweise eine, lokale IP auf dem Rechner sein, wo das Skript läuft. Oder Du nimmst einfach '' (leere Zeichenkette) oder '0.0.0.0', dann sollte er auf allen lokalen IPs lauschen.

`os.system()` erscheint mir hier als Hack. Man kann mit Python problemlos Dateien öffnen und dort etwas hinein schreiben, ohne eine externe Shell zu starten die das für einen erledigt.
ToB204
User
Beiträge: 2
Registriert: Freitag 26. Juli 2013, 01:34

@BlackJack Hab ich wohl falsch verstanden. Danke für den Tip mit der IP das Skript startet jetzt :D
sobald ich den udp Befehl sende kommt auch die Nachricht

Code: Alles auswählen

received message: Beamer_starten
nur der Beamer startet leider nicht. Was kann ich noch probieren?
BlackJack

@ToB204: Du könntest ein Python-Tutorial durcharbeiten, damit Du die Grundlagen verstehst. Zum Beispiel was es mit Einrückung in Python auf sich hat, und warum Dein Quelltext falsch eingerückt ist.
Antworten