Pagina 1 van 1

Python script newbie question :)

Geplaatst: 06 okt 2014, 20:34
door Robert Ford
Hallo,

Ik probeer met een Raspberry Pi een sms te laten sturen via een 3G dongle van zodra mijn reed switch geen contact meer geeft (deur gaat open).

Het sturen van de sms in een apart python script lukt. Ik probeer een loop te laten draaien die van zodra de deur open gaat om de 60 seconden een sms stuurt.

De error die ik krijg:



root@raspberrypi:~# python sms.py
File "sms.py", line 14
if io.input(door_pin):
^
IndentationError: expected an indented block





Hier is mijn code:

Code: Selecteer alles

# This is pyserial which is needed to communicate with the dongle
import serial
import time
import RPi.GPIO as io
io.setmode(io.BCM)


door_pin = 23

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate input with PullUp

while True:

if io.input(door_pin):
	dongle = serial.Serial(port="/dev/ttyUSB0",baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
	def sendatcmd(cmd):
	dongle.write('AT'+cmd+'\r')
	sendatcmd('+CMGF=1')
	sendatcmd('+CMGS="+32498123456"')
	dongle.write('Deur is OPEN!!!')
	dongle.write(chr(26))
	dongle.close()
time.sleep(60)

Re: Python script newbie question :)

Geplaatst: 06 okt 2014, 21:25
door xming
white space means something language :/ Probeer eens volgende, let op de spaties/tabs aan het begin van elke regels,

Code: Selecteer alles

# This is pyserial which is needed to communicate with the dongle
import serial
import time
import RPi.GPIO as io
io.setmode(io.BCM)


door_pin = 23

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate input with PullUp

while True:

  if io.input(door_pin):
     dongle = serial.Serial(port="/dev/ttyUSB0",baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
     def sendatcmd(cmd):
     dongle.write('AT'+cmd+'\r')
     sendatcmd('+CMGF=1')
     sendatcmd('+CMGS="+32498123456"')
     dongle.write('Deur is OPEN!!!')
     dongle.write(chr(26))
     dongle.close()
  time.sleep(60)

Re: Python script newbie question :)

Geplaatst: 06 okt 2014, 22:15
door gm123
In python wordt de indentatie gebruikt om statement blokken zoals while, if,... te groeperen. Als je gewend bent van met {..} te werken zoals in de meeste andere talen is dat wel even aanpassen. :p

Re: Python script newbie question :)

Geplaatst: 07 okt 2014, 07:48
door AnD
Zoals vorige poster schrijft, je moet goed opletten met de spaties.
Minimum 4 spaties zetten, als je een loop wil maken, ook in je if loop.
Anders blijft python problemen geven.

Re: Python script newbie question :)

Geplaatst: 07 okt 2014, 09:18
door Robert Ford
Nu krijg ik een soortgelijke error op lijn 17.

Ik vermoed dat het dubbele punt mij nog problemen geeft op lijn 16?

def sendatcmd(cmd):

Code: Selecteer alles

# This is pyserial which is needed to communicate with the dongle
import serial
import time
import RPi.GPIO as io
io.setmode(io.BCM)


door_pin = 23

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate input with PullUp

while True:

  if io.input(door_pin):
     dongle = serial.Serial(port="/dev/ttyUSB0",baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
     def sendatcmd(cmd):
     dongle.write('AT'+cmd+'\r')
     sendatcmd('+CMGF=1')
     sendatcmd('+CMGS="+32498123456"')
     dongle.write('Deur is OPEN!!!')
     dongle.write(chr(26))
     dongle.close()
  time.sleep(60)

Re: Python script newbie question :)

Geplaatst: 07 okt 2014, 09:36
door butskristof
In Python moet je alles indenteren, ook de lijnen na 'def' dus: je definieert immers een nieuwe functie.

Code: Selecteer alles

# This is pyserial which is needed to communicate with the dongle
import serial
import time
import RPi.GPIO as io
io.setmode(io.BCM)


door_pin = 23

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate input with PullUp

while True:

  if io.input(door_pin):
    dongle = serial.Serial(port="/dev/ttyUSB0",baudrate=115200,timeout=0,rtscts=0,xonxoff=0)
    def sendatcmd(cmd):
        dongle.write('AT'+cmd+'\r')
    sendatcmd('+CMGF=1')
    sendatcmd('+CMGS="+32498123456"')
    dongle.write('Deur is OPEN!!!')
    dongle.write(chr(26))
    dongle.close()
  time.sleep(60)

Re: Python script newbie question :)

Geplaatst: 07 okt 2014, 09:39
door ubremoved_539
Simplistisch gezien... staat er een ":" op het einde van de regel ga je moeten indenteren nadien.

Re: Python script newbie question :)

Geplaatst: 07 okt 2014, 09:47
door Robert Ford
Allright, weeral wat bijgeleerd. :lol:

Thanks!