Python Forum

Full Version: SyntaxError: invalid syntax
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am trying to set a servo with domoticz on a Raspberry pi.
The script works from the command line.

curl -s "http://127.0.0.1:8080/json.htm?type=devices&rid=59" | jq '.result[0].Level'| tr -d '"'

When i try to get the value from Domoticz i get syntax error.
The link comes from https://www.domoticz.com/wiki/Mindergas.nl

What am i doing wrong ?
import json
from jq import jq
import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BOARD)
GPIO.setup(03, GPIO.OUT)
pwm=GPIO.PWM(03, 50)
pwm.start(0)

hoek=`curl -s "http://127.0.0.1:8080/json.htm?type=devices&rid=59"  | jq '.result[0].Level'| tr -d '"'`

def SetAngle(angle):
        duty = angle / 18 + 2
        GPIO.output(03, True)
        pwm.ChangeDutyCycle(duty)
        sleep(1)
        GPIO.output(03, False)
        pwm.ChangeDutyCycle(0)

SetAngle(hoek)

pwm.stop()
GPIO.cleanup()
[Image: wQmTrT8]
What is the full text of the error message? Specifically, what line is it saying has an index error?

I'm guessing line 10, and that the problem is that Python does not recognize the accent symbol (`), but without the full error text I can't be sure.
The full error message is: link to error message
I'm not clicking on some gibberish link. Copy and paste the error message into a post.
Output:
File "/home/pi/servo.py", line 10 hoek=`curl -s "http://127.0.0.1:8080/json.htm?type=devices&rid=59" | jq '.result[0].Level'| tr -d '"'` ^ SyntaxError: invalid syntax
Yes, the syntax error is because of the accent symbol. However, if you replace it with a quote to make it a string, that's going to cause problems with the other quotes within the string. You would need to escape those quotes:

hoek="curl -s \"http://127.0.0.1:8080/json.htm?type=devices&rid=59\"  | jq '.result[0].Level'| tr -d '\"'"
But that's going to cause other problems. That's a string, but you are passing it to SetAngle as if it's a number. It looks like a system command you would enter on the command line. Are you expecting Python to run it in the OS and get a response back? If so you need tell Python to do that, with something like os.popen. Although it looks like you are doing something with a local json file? You might want to look at the json module so you can parse the file directly.