Hallo,
ich habe zwei Raspberrys miteinander über Winsock verbunden.
Einer überwacht eine Lichtschranke und wenn diese unterbrochenwird soll der
Andere ein Photo machen und mir es über Telegram schicken.
Das Problem ist, der an der Lichtschranke reagiert zwar schnell und schickt
mir eine Nachricht fast ohne Verzögerung, der Andere schickt das Bild aber mit bis
zu 5 Sekunden Zeitverzögerung.
Auf dem ersten, der an der Lichtschranke läuft das Programm:
Python
import telepot
import RPi.GPIO as GPIO
import time
from socket import *
SERVER_PORT = 50007
BUFSIZE = 1024
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN)
bot = telepot.Bot('556342434:AAGU7txxxxxxxxxxxxxxDxf1NdnX4')
chat_id = 48xxxxxx49
while 1:
while GPIO.input(4) == 0:
time.sleep(0.2)
if GPIO.input(4) == 1:
bot.sendMessage(chat_id, 'Lichtschranke!')
# Ein INet Streaming (TCP/IP) Socket erzeugen
s = socket( AF_INET, SOCK_STREAM)
# Zum Server verbinden
s.connect( ("192.168.178.51", SERVER_PORT) )
# Unsere Nachricht senden
s.send( "Kunde" )
# Verbindung trennen
s.close()
time.sleep(5)
Alles anzeigen
Und auf dem Anderen dieses:
Python
import telepot
import RPi.GPIO as GPIO
import time
import picamera
from socket import *
bot = telepot.Bot('556342434:AAxxxxxxxxxxxxYd8m0HIDxf1NdnX4')
chat_id = 4xxxxxx349
ECHO_PORT = 50007
BUFSIZE = 1024
s = socket(AF_INET, SOCK_STREAM) # Socket erstellen und an Port binden
s.bind(('', ECHO_PORT))
s.listen( 1 )
print "Server gestartet"
while 2:
conn, (remotehost, remoteport) = s.accept() # Warte auf eine Verbindung zum Server
print 'Verbunden mit %s:%s' % (remotehost, remoteport)
while 1:
data = conn.recv(BUFSIZE) # Empfange daten vom Client
print "Echo: %s" % (data)
if not data: # Die Verbindung wurde getrennt
break # Abbruch
conn.send(data) # Sende die Daten zurück zum client
cam = picamera.PiCamera()
cam.resolution = (1280, 1024)
cam.start_preview()
time.sleep(5)
cam.stop_preview()
cam.capture('bild.jpg')
cam.close()
bot.sendMessage(chat_id, 'Hier ist der Zero!')
image_path = open('/home/pi/bild.jpg', 'rb')
bot.sendPhoto(chat_id, image_path)
s.close() # Socket schließen
Alles anzeigen
Was läßt sich denn da verbessern und was ist den da eine realistische Reaktionszeit?
Es wäre sicher besser gewesen nur Einen einzusetzen, aber auf Grund der baulichen Gegebenheiten
wäre das schwierig und außerdem will ich ja auch noch was lernen
Gruß Reinhard