2014-05-09 3 views
0

RaspberryPi를 실험하고 싶지만 .py 코드는 작동하지 않습니다. 그것은 나에게 많은 오류를 준다.RaspberryPi webiopi 스크립트 오류가 작동하지 않습니다.

  • 공간 오류
  • 들여 쓰기 오류 : expected an indented block " global VELUX_STATE, AUTO_mode "

는 난 단지 다른 사람들을 위해 작동하는 공식 포럼에서 코드를 복사.

링크 : http://egrasland.blogspot.fr/2014/01/control-your-velux-roller-shutter-with.html

내가 코드를 복사하여 "sudo는 나노 script.py"내가 잘못합니까 무엇

에 붙여 넣기?

또한, RaspberryPi의 공식 webiopi 코드는 저에게 맞지 않습니다. 디버그 오류가 발생하고 프로그램이 시작되지 않습니다.

링크 : 답변에 대한 https://code.google.com/p/webiopi/wiki/Tutorial_Basis

+0

공백은 파이썬에서 중요합니다. 모든 들여 쓰기를 복사하거나 다운로드/체크 아웃 된 파일에서 오류가있는 경우 수정하십시오. – CoDEmanX

+0

실행중인 실제 코드를 게시 할 수 있으며 오류가 발생합니까? –

+0

webiopi를 설치하셨습니까? –

답변

0

감사합니다.

내가 사용하는 코드는 다음과 같습니다

파이썬 서버 스크립트 :

import webiopi import datetime 

GPIO = webiopi.GPIO  
VELUX_UP = 17 # GPIO pin using BCM numbering VELUX_DOWN = 18 # GPIO pin using BCM numbering VELUX_STOP = 27 # GPIO pin using BCM numbering  
VELUX_STATE = 0 # DOWN AUTO_MODE = 1  
HOUR_UP = 9 # Turn Velux UP at HOUR_DOWN = 19 # Turn Velux Down at  
# setup function is automatically called at WebIOPi startup 
def setup(): global VELUX_STATE, AUTO_MODE  
    # set the GPIO used for VELUX command to output 
    GPIO.setFunction(VELUX_UP, GPIO.OUT) 
    GPIO.setFunction(VELUX_DOWN,GPIO.OUT) 

    # STOP function not used at this time 
    GPIO.setFunction(VELUX_STOP,GPIO.OUT) 
    GPIO.digitalWrite(VELUX_STOP, GPIO.LOW) 

    # retrieve current datetime now = datetime.datetime.now()  
    if (AUTO_MODE==1): 
     # test time 
     if ((now.hour >= HOUR_UP) and (now.hour < HOUR_DOWN)): 
      GPIO.digitalWrite(VELUX_UP, GPIO.HIGH) 
      webiopi.sleep(0.2) 
      GPIO.digitalWrite(VELUX_UP, GPIO.LOW) 
      VELUX_STATE = 1 
     else: 
      GPIO.digitalWrite(VELUX_DOWN, GPIO.HIGH) 
      webiopi.sleep(0.2) 
      GPIO.digitalWrite(VELUX_DOWN, GPIO.LOW) 
      VELUX_STATE = 0 

# loop function is repeatedly called by WebIOPi 
def loop(): global VELUX_STATE, AUTO_MODE  
    # retrieve current datetime now = datetime.datetime.now()  
    if (AUTO_MODE==1): 
     # toggle VELUX UP all days at the correct time 
     if ((now.hour == HOUR_UP) and (now.minute == 0) and (VELUX_STATE == 0)): 
      GPIO.digitalWrite(VELUX_UP, GPIO.HIGH) 
      webiopi.sleep(0.2) 
      GPIO.digitalWrite(VELUX_UP, GPIO.LOW) 
      VELUX_STATE = 1 #UP 

     # toggle VELUX DOWN all days at the correct time 
     if ((now.hour == HOUR_DOWN) and (now.minute == 0) and (VELUX_STATE == 1)): 
      GPIO.digitalWrite(VELUX_DOWN, GPIO.HIGH) 
      webiopi.sleep(0.2) 
      GPIO.digitalWrite(VELUX_DOWN, GPIO.LOW) 
      VELUX_STATE = 0 #DOWN 
      # gives CPU some time before looping again webiopi.sleep(1) 

# destroy function is called at WebIOPi shutdown 
def destroy(): 
    GPIO.digitalWrite(VELUX_UP, GPIO.LOW) 
    GPIO.digitalWrite(VELUX_DOWN, GPIO.LOW) 
    GPIO.digitalWrite(VELUX_STOP, GPIO.LOW) 


@webiopi.macro def getHours(): 
    return "%d;%d" % (HOUR_UP, HOUR_DOWN) 

@webiopi.macro def setHours(on, off): 
    global HOUR_UP, HOUR_DOWN 
    HOUR_UP = int(on) 
    HOUR_DOWN = int(off) 
    return getHours() 

@webiopi.macro def getAutoMode(): 
    return "%d" % (AUTO_MODE) 

@webiopi.macro def setAutoMode(): 
    global AUTO_MODE 

    if AUTO_MODE: 
     AUTO_MODE=0 
    else: 
     AUTO_MODE=1 
    return getAutoMode() 
내 라즈베리 파이와 브라우저 : 그러나 첫째을 늦추기 위해 자사에 있기 때문에

가 디버그 내가 여기에 게시 할 수 없습니다 그가주는 오류는 코멘트 VELUX으로 dubble 공간입니다 UP "HOUR_UP = 9 # UP에서 벨 룩스를 돌려"나는이 문제를 해결하지만, 다음 오류 "데프 설정() : 글로벌 VELUX_STATE, AUTO_MODE"입니다

,

왜?

감사합니다.