Python script newbie question :)

Windows, Android, iOS, Linux, Chrome OS, ...
Plaats reactie
Robert Ford
Elite Poster
Elite Poster
Berichten: 1517
Lid geworden op: 12 nov 2005, 18:54
Uitgedeelde bedankjes: 102 keer
Bedankt: 101 keer

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)
Gebruikersavatar
xming
Pro Member
Pro Member
Berichten: 434
Lid geworden op: 06 okt 2005, 10:35
Uitgedeelde bedankjes: 9 keer
Bedankt: 47 keer

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)
gm123
Elite Poster
Elite Poster
Berichten: 1113
Lid geworden op: 08 maa 2009, 22:27
Uitgedeelde bedankjes: 63 keer
Bedankt: 116 keer

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
Gebruikersavatar
AnD
Elite Poster
Elite Poster
Berichten: 4069
Lid geworden op: 18 okt 2003, 12:29
Locatie: Hasselt
Uitgedeelde bedankjes: 431 keer
Bedankt: 115 keer
Provider

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.
Robert Ford
Elite Poster
Elite Poster
Berichten: 1517
Lid geworden op: 12 nov 2005, 18:54
Uitgedeelde bedankjes: 102 keer
Bedankt: 101 keer

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)
butskristof
Elite Poster
Elite Poster
Berichten: 1548
Lid geworden op: 19 dec 2011, 18:42
Locatie: Heist-op-den-Berg
Uitgedeelde bedankjes: 482 keer
Bedankt: 114 keer

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)
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Simplistisch gezien... staat er een ":" op het einde van de regel ga je moeten indenteren nadien.
Robert Ford
Elite Poster
Elite Poster
Berichten: 1517
Lid geworden op: 12 nov 2005, 18:54
Uitgedeelde bedankjes: 102 keer
Bedankt: 101 keer

Allright, weeral wat bijgeleerd. :lol:

Thanks!
Plaats reactie

Terug naar “Software en apps”