Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: probleemmet python script  (gelezen 863 keer)

probleemmet python script
« Gepost op: 2012/12/26, 11:14:38 »
hey
ik ben nieuw op dit forum ik zit namelijk met een probleem
ik heb een python script welke er voor zorg dat ik in/uitgangen kan schakelen via een app.

het probleem is alleen zodra ik het script start en verbinding maak werkt alles perfect,
wanneer ik de app. afsluit stopt het script ook!
en hij moet natuurlijk blijven werken

is er iemand die mij kan vertellen wat ik verkeert doe
ps: script is niet helemaal door mijn gemaakt, heb alleen wat dingen toegevoegd

#! /usr/bin/python

# Echo server program
import socket
import RPi.GPIO as GPIO

#####################################################################
#### SETUP IOs ######################################################
#####################################################################
# to use Raspberry Pi board pin numbers
GPIO.setmode(GPIO.BCM)
# For LED1 we use pin 4 according BCM pin count
# (see https://projects.drogon.net/raspberry-pi/wiringpi/pins/)
LED1 = 4
LED2 = 17
LED3 = 2
LED4 = 22
LED5 = 10
LED6 = 9
LED7 = 11
LED8 = 18


# For Switch input we use pin 17 according BCM pin count
SWITCH1 = 25
# set up GPIO output channel
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)
GPIO.setup(LED3, GPIO.OUT)
GPIO.setup(LED4, GPIO.OUT)
GPIO.setup(LED5, GPIO.OUT)
GPIO.setup(LED6, GPIO.OUT)
GPIO.setup(LED7, GPIO.OUT)
GPIO.setup(LED8, GPIO.OUT)

# set up GPIO input with pull-up control
#   (pull_up_down be PUD_OFF, PUD_UP or PUD_DOWN, default PUD_OFF)
GPIO.setup(SWITCH1, GPIO.IN, pull_up_down=GPIO.PUD_UP)


#####################################################################
#### SETUP SOCKET INTERFASE #########################################
#####################################################################
HOST = ''                 # Symbolic name meaning the local host
PORT = 54321              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
#####################################################################
#### Continous loop, that waits for new data and acts depending  ####
#### on data content on it                                       ####
#####################################################################
while 1:
    data = conn.recv(1024)
    print 'New Receive', data
    if not data: break
    print 'Received Data:', data
    if data == 'LED1 on\n':
        conn.send('on')
        GPIO.output(LED1, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED2 on\n':
        conn.send('on')
        GPIO.output(LED2, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED3 on\n':
        conn.send('on')
        GPIO.output(LED3, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED4 on\n':
        conn.send('on')
        GPIO.output(LED4, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED5 on\n':
        conn.send('on')
        GPIO.output(LED5, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED6 on\n':
        conn.send('on')
        GPIO.output(LED6, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED7 on\n':
        conn.send('on')
        GPIO.output(LED7, GPIO.HIGH)
        print 'On empfangen'
    if data == 'LED8 on\n':
        conn.send('on')
        GPIO.output(LED8, GPIO.HIGH)
        print 'On empfangen'
    elif data == 'LED1 off\n':
        conn.send('off')
        GPIO.output(LED1, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED2 off\n':
        conn.send('off')
        GPIO.output(LED2, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED3 off\n':
        conn.send('off')
        GPIO.output(LED3, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED4 off\n':
        conn.send('off')
        GPIO.output(LED4, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED5 off\n':
        conn.send('off')
        GPIO.output(LED5, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED6 off\n':
        conn.send('off')
        GPIO.output(LED6, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED7 off\n':
        conn.send('off')
        GPIO.output(LED7, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'LED8 off\n':
        conn.send('off')
        GPIO.output(LED8, GPIO.LOW)
        print 'Off empfangen'
    elif data == 'get status\n':
        print 'Input Status:', GPIO.input(SWITCH1)
        if GPIO.input(SWITCH1):
           conn.send('off')   # inverted logic here: pullup force to true with open switch
           print 'Read GIOP 0 result On'
        else:
           conn.send('on')    # inverted logic here: Switch switchs to ground -> false
           print 'Read GIOP 0 result Off'
        # ende if
    else:
        conn.send('unknown command')
        print 'Unknown command:', data
    # continue with while 1
conn.close()


Offline commandoline

  • LoCo-contact
    • marten-de-vries
    • Marten-de-Vries.nl
Re: probleemmet python script
« Reactie #1 Gepost op: 2012/12/26, 14:02:37 »
Je roept socket.listen() en socket.accept() maar één keer aan, waardoor de server niet meerdere clients aankan en dus na één verbinding sluit. Bron: http://docs.python.org/2/library/socket.html#example . Een loopje zou geloof ik genoeg moeten zijn, maar http://docs.python.org/2/library/socketserver.html is misschien mooier.

Re: probleemmet python script
« Reactie #2 Gepost op: 2012/12/26, 23:09:41 »
ik had al een beetje begrepen dat ik een loop er in moest zetten
alleen ik weet niet hoe, heb al zo'n beetje alles uitgeprobeerd

wat moet ik daarvoor toevoegen