Re: Python and Cors
Deve Krehbiel <[email protected]> Sun, 27 Aug 2017 15:11:51 -0500
| Newsgroups | gmane.comp.python.twisted.web |
|---|---|
| Message-ID | <CADfFrhS=yOwmm7pjbwP+vhFLcOtMuuUkE6qyxhfGEvTUXsC4VQ@mail.gmail.com> |
--===============3567542855432498418== Content-Type: multipart/alternative; boundary="f403045f2f9cf292370557c1c98a" --f403045f2f9cf292370557c1c98a Content-Type: text/plain; charset="UTF-8" WOW! That did it. I am amazed! Thank you so much! My next chore is to figure out how to make sliders for this so that I can move the servos in 1 degree increments. On to that task! I am so appreciative! Thank you Donal! Deve On Sun, Aug 27, 2017 at 2:43 PM, Donal McMullan <[email protected]> wrote: > Ah sorry Deve - I failed to paste the first like of the render_GET method. > > # Import necessary files > > import serial > > from twisted.web.resource import Resource > > # Setup Arduino at correct speed > > try: > > arduino = serial.Serial('/dev/ttyACM0', 9600) > > except: > > arduino = serial.Serial('/dev/ttyACM1', 9600) > > > > class MoveServo(Resource): > > isLeaf = True > > permitted_origins = ('http://192.168.1.122:9000',) > > > > def render_GET(self,request): > origin = request.getHeader('Origin') > > if origin in (self.permitted_origins): > > request.setHeader('Access-Control-Allow-Origin', origin) > > try: > > # Send value over serial to the Arduino > > arduino.write(request.args['value'][0]) > > return 'Success' > > except: > > return 'Failure' > > > > resource = MoveServo() > > On 27 August 2017 at 19:01, Deve Krehbiel <[email protected]> wrote: > >> This is what I get without your code: >> index1.html:1 XMLHttpRequest cannot load http://192.168.1.122:81/servos >> .rpy?value=70P. No 'Access-Control-Allow-Origin' header is present on >> the requested resource. Origin 'http://192.168.1.122:9000' is therefore >> not allowed access. >> jquery.min.js:4 XHR failed loading: GET "http://192.168.1.122:81/servo >> s.rpy?value=70P". >> >> This is what I get with it: >> jquery.min.js:4 GET http://192.168.1.122:81/servos.rpy?value=100P >> send @ jquery.min.js:4 >> ajax @ jquery.min.js:4 >> r.(anonymous function) @ jquery.min.js:4 >> move @ index1.html:54 >> onclick @ index1.html:17 >> index1.html:1 XMLHttpRequest cannot load http://192.168.1.122:81/servos >> .rpy?value=100P. No 'Access-Control-Allow-Origin' header is present on >> the requested resource. Origin 'http://192.168.1.122:9000' is therefore >> not allowed access. *The response had HTTP status code 500.* >> jquery.min.js:4 XHR failed loading: GET "http://192.168.1.122:81/servo >> s.rpy?value=100P". >> >> I appreciate your efforts and if you have any other ideas... Thank You! >> >> Deve >> >> On Sun, Aug 27, 2017 at 12:48 PM, Deve Krehbiel <[email protected]> >> wrote: >> >>> Thank you for the response. In trying that code, it made it so the LAN >>> cannot move the buttons either. Here is the error list I got: >>> >>> *web.Server Traceback (most recent call last):* >>> exceptions.NameError: global name 'origin' is not defined >>> /usr/lib/python2.7/dist-packages/twisted/web/server.py:189 in process >>> 188 self._encoder = encoder >>> 189 self.render(resrc) >>> 190 except: >>> /usr/lib/python2.7/dist-packages/twisted/web/server.py:238 in render >>> 237 try: >>> 238 body = resrc.render(self) >>> 239 except UnsupportedMethod as e: >>> /usr/lib/python2.7/dist-packages/twisted/web/resource.py:250 in render >>> 249 raise UnsupportedMethod(allowedMethods) >>> 250 return m(request) >>> 251 >>> /usr/local/www/servos.rpy:15 in render_GET >>> 14 def render_GET(self,request): >>> 15 if origin in (self.permitted_origins): >>> 16 request.setHeader('Access-Control-Allow-Origin', origin) >>> exceptions.NameError: global name 'origin' is not defined >>> >>> Deve >>> >>> On Sun, Aug 27, 2017 at 12:03 PM, Donal McMullan < >>> [email protected]> wrote: >>> >>>> Perhaps you just need to set the 'Access-Control-Allow-Origin' header? >>>> Something like this might work: >>>> >>>> >>>> # Import necessary files >>>> >>>> import serial >>>> >>>> from twisted.web.resource import Resource >>>> >>>> # Setup Arduino at correct speed >>>> >>>> try: >>>> >>>> arduino = serial.Serial('/dev/ttyACM0', 9600) >>>> >>>> except: >>>> >>>> arduino = serial.Serial('/dev/ttyACM1', 9600) >>>> >>>> >>>> >>>> class MoveServo(Resource): >>>> >>>> isLeaf = True >>>> >>>> permitted_origins = ('http://192.168.1.122:9000',) >>>> >>>> >>>> >>>> def render_GET(self,request): >>>> >>>> if origin in (self.permitted_origins): >>>> >>>> request.setHeader('Access-Control-Allow-Origin', origin) >>>> >>>> try: >>>> >>>> # Send value over serial to the Arduino >>>> >>>> arduino.write(request.args['value'][0]) >>>> >>>> return 'Success' >>>> >>>> except: >>>> >>>> return 'Failure' >>>> >>>> >>>> >>>> resource = MoveServo() >>>> >>>> On 27 August 2017 at 17:10, Deve Krehbiel <[email protected]> wrote: >>>> >>>>> First post so forgive me if I am not explaining this right. >>>>> >>>>> I am trying to make a baby cam and then heavily document it for >>>>> everyone to have access to. I am using a Raspberry Pi with Rasbian. I am >>>>> using mjpg-streamer for the streaming with no problems. >>>>> >>>>> The problem is I am also using two servos for pan and tilt. To >>>>> accomplish this I am using an Arduino Uno. This is so I can add IR lighting >>>>> for night vision, etc later. I am not a programmer so this is getting >>>>> frustrating after a few weeks of failure. >>>>> >>>>> How is it failing you might ask..well, its working perfectly with only >>>>> ONE exception: >>>>> Every time I push the button for left/right/up/down I get this: >>>>> >>>>> XMLHttpRequest cannot load http://192.168.1.122:81/servos >>>>> .rpy?value=100P. No 'Access-Control-Allow-Origin' header is present >>>>> on the requested resource. Origin 'http://192.168.1.122:9000' is >>>>> therefore not allowed access. >>>>> >>>>> On the local area network, it still works, but taking it to the >>>>> internet it does not. >>>>> >>>>> Here are the two programs that make this happen. One is servos.rpy and >>>>> the other is the supporting HTML/Get script; >>>>> **** >>>>> servos.rpy >>>>> ----------------------------------- >>>>> # Import necessary files >>>>> import serial >>>>> from twisted.web.resource import Resource >>>>> # Setup Arduino at correct speed >>>>> try: >>>>> arduino = serial.Serial('/dev/ttyACM0', 9600) >>>>> except: >>>>> arduino = serial.Serial('/dev/ttyACM1', 9600) >>>>> >>>>> class MoveServo(Resource): >>>>> isLeaf = True >>>>> def render_GET(self,request): >>>>> try: >>>>> # Send value over serial to the Arduino >>>>> arduino.write(request.args['value'][0]) >>>>> return 'Success' >>>>> except: >>>>> return 'Failure' >>>>> >>>>> resource = MoveServo() >>>>> *** >>>>> >>>>> Now for the HTML/Get script: >>>>> >>>>> ** >>>>> <!doctype html> >>>>> <html> >>>>> <head> >>>>> <title>Make Use Of DIY Security Camera</title> >>>>> <style type="text/css"> >>>>> #container { >>>>> /* center the content */ >>>>> margin: 0 auto; >>>>> text-align: center; >>>>> } >>>>> </style> >>>>> </head> >>>>> <body> >>>>> <div id="container"> >>>>> <img src="/?action=stream" /><br> >>>>> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jque >>>>> ry.min.js"></script><br /> >>>>> <button onclick="servos.move('P', 10)">Left</button> >>>>> <button onclick="servos.move('P', -10)">Right</button> >>>>> <button onclick="servos.move('T', -10)">Down</button> >>>>> <button onclick="servos.move('T', 10)">Up</button> >>>>> </div> >>>>> </body> >>>>> <script> >>>>> var servos; >>>>> $( document ).ready(function() { >>>>> servos = moveServos(); >>>>> }); >>>>> function moveServos() { >>>>> // Store some settings, adjust to suit >>>>> var panPos = 70, >>>>> tiltPos = 90, >>>>> tiltMax = 170, >>>>> tiltMin = 45, >>>>> panMax = 170, >>>>> panMin = 20; >>>>> return { >>>>> move:function(servo, adjustment) { >>>>> var value; >>>>> if(servo == 'P') { >>>>> if(!((panPos >= panMax && adjustment > 0) || (panPos <= panMin && >>>>> adjustment < 0))) { >>>>> // Still within allowed range, "schedule" the movement >>>>> panPos += adjustment; >>>>> } >>>>> value = panPos + 'P'; >>>>> } >>>>> else if(servo == 'T') { >>>>> if(!((tiltPos >= tiltMax && adjustment > 0) || (tiltPos <= tiltMin && >>>>> adjustment < 0))) { >>>>> // Still within allowed range, "schedule" the movement >>>>> tiltPos += adjustment; >>>>> } >>>>> value = tiltPos + 'T'; >>>>> } >>>>> // Use AJAX to actually move the servo >>>>> $.get('http://192.168.1.122:81/servos.rpy?value=' + value); >>>>> }, >>>>> } >>>>> } >>>>> </script> >>>>> </html> >>>>> >>>>> ***** >>>>> Twisted is started: sudo twistd -n web -p 81 --path /usr/local/www/ >>>>> >>>>> I would be forever grateful if someone could take a serious look at >>>>> this and tell me where I am going wrong. Once this is fixed, I can start >>>>> documenting the entire system for everyone. Thank you! >>>>> >>>>> Deve >>>>> >>>>> _______________________________________________ >>>>> Twisted-web mailing list >>>>> [email protected] >>>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> Twisted-web mailing list >>>> [email protected] >>>> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web >>>> >>>> >>> >> >> _______________________________________________ >> Twisted-web mailing list >> [email protected] >> https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web >> >> > > _______________________________________________ > Twisted-web mailing list > [email protected] > https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web > > --f403045f2f9cf292370557c1c98a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">WOW! That did it. I am amazed! Thank you so much! My next = chore is to figure out how to make sliders for this so that I can move the = servos in 1 degree increments. On to that task! I am so appreciative! Thank= you Donal!</div><div class=3D"gmail_extra"><br clear=3D"all"><div><div cla= ss=3D"gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"ltr">= <div><div dir=3D"ltr"><div>Deve</div></div></div></div></div></div> <br><div class=3D"gmail_quote">On Sun, Aug 27, 2017 at 2:43 PM, Donal McMul= lan <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a>></span> wrote:<br><blockquote = class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid= ;padding-left:1ex"><div dir=3D"ltr">Ah sorry Deve - =C2=A0I failed to paste= the first like of the render_GET method.<span class=3D""><br><br><div># Im= port necessary files =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div>= <div>import serial =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>from twisted.web.resource impor= t Resource =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0= </div><div># Setup Arduino at correct speed =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>tr= y: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 ar= duino =3D serial.Serial('/dev/ttyACM0', 9600) =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=C2=A0</div><div>except: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</d= iv><div>=C2=A0 =C2=A0 arduino =3D serial.Serial('/dev/ttyACM1', 960= 0) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>class MoveServo(Resource= ): =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 isLea= f =3D True =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 permitted_origins =3D ('<a href=3D= "http://192.168.1.122:9000" target=3D"_blank">http://192.168.1.122:9000</a>= ',) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 def render_GET(self,requ= est): =C2=A0 =C2=A0 =C2=A0</div></span><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 ori= gin =3D request.getHeader('Origin') =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><span class=3D""><div>=C2=A0 = =C2=A0 =C2=A0 =C2=A0 if origin in (self.permitted_origins): =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 request.setHeader('Access-<wbr>Control-Allow-Origin', or= igin) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2= =A0 =C2=A0 try: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 # Send value over serial to the Arduino =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino.write(re= quest.args['<wbr>value'][0]) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div= >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return 'Success' =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 except: = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return 'F= ailure' =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>resource =3D Move= Servo()=C2=A0</div></span></div><div class=3D"HOEnZb"><div class=3D"h5"><di= v class=3D"gmail_extra"><br><div class=3D"gmail_quote">On 27 August 2017 at= 19:01, Deve Krehbiel <span dir=3D"ltr"><<a href=3D"mailto:deve@speedpri= nt.com" target=3D"_blank">[email protected]</a>></span> wrote:<br><blo= ckquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #c= cc solid;padding-left:1ex"><div dir=3D"ltr"><div>This is what I get without= your code:</div><div>index1.html:1 XMLHttpRequest cannot load <a href=3D"h= ttp://192.168.1.122:81/servos.rpy?value=3D70P" target=3D"_blank">http://192= .168.1.122:81/servos<wbr>.rpy?value=3D70P</a>. No 'Access-Control-Allow= -Origin' header is present on the requested resource. Origin '<a hr= ef=3D"http://192.168.1.122:9000" target=3D"_blank">http://192.168.1.122:900= 0</a>' is therefore not allowed access.</div><div>jquery.min.js:4 XHR f= ailed loading: GET "<a href=3D"http://192.168.1.122:81/servos.rpy?valu= e=3D70P" target=3D"_blank">http://192.168.1.122:81/servo<wbr>s.rpy?value=3D= 70P</a>".</div><div><br></div><div>This is what I get with it:</div><d= iv><div>jquery.min.js:4 GET <a href=3D"http://192.168.1.122:81/servos.rpy?v= alue=3D100P" target=3D"_blank">http://192.168.1.122:81/servos<wbr>.rpy?valu= e=3D100P</a>=C2=A0</div><div>send @ jquery.min.js:4</div><div>ajax @ jquery= .min.js:4</div><div>r.(anonymous function) @ jquery.min.js:4</div><div>move= @ index1.html:54</div><div>onclick @ index1.html:17</div><div>index1.html:= 1 XMLHttpRequest cannot load <a href=3D"http://192.168.1.122:81/servos.rpy?= value=3D100P" target=3D"_blank">http://192.168.1.122:81/servos<wbr>.rpy?val= ue=3D100P</a>. No 'Access-Control-Allow-Origin' header is present o= n the requested resource. Origin '<a href=3D"http://192.168.1.122:9000"= target=3D"_blank">http://192.168.1.122:9000</a>' is therefore not allo= wed access. <b>The response had HTTP status code 500.</b></div><div>jquery.= min.js:4 XHR failed loading: GET "<a href=3D"http://192.168.1.122:81/s= ervos.rpy?value=3D100P" target=3D"_blank">http://192.168.1.122:81/servo<wbr= >s.rpy?value=3D100P</a>".</div></div><div><br></div><div>I appreciate = your efforts and if you have any other ideas... Thank You!</div></div><div = class=3D"gmail_extra"><span class=3D"m_-5483403120246404331HOEnZb"><font co= lor=3D"#888888"><br clear=3D"all"><div><div class=3D"m_-5483403120246404331= m_8117101615705453869gmail_signature" data-smartmail=3D"gmail_signature"><d= iv dir=3D"ltr"><div><div dir=3D"ltr"><div>Deve</div></div></div></div></div= ></div></font></span><div><div class=3D"m_-5483403120246404331h5"> <br><div class=3D"gmail_quote">On Sun, Aug 27, 2017 at 12:48 PM, Deve Krehb= iel <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target=3D"= _blank">[email protected]</a>></span> wrote:<br><blockquote class=3D"g= mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l= eft:1ex"><div dir=3D"ltr">Thank you for the response. In trying that code, = it made it so the LAN cannot move the buttons either. Here is the error lis= t I got:<div><br></div><div><b style=3D"color:rgb(0,0,0);font-family:"= Times New Roman";font-size:medium">web.Server Traceback (most recent c= all last):</b><span style=3D"color:rgb(0,0,0);font-family:"Times New R= oman";font-size:medium"></span><div style=3D"font-family:Verdana,Arial= ,helvetica,sans-serif;color:rgb(0,0,0);font-size:medium"><div class=3D"m_-5= 483403120246404331m_8117101615705453869m_8371283913762161110error" style=3D= "color:red;font-weight:bold">exceptions.NameError:=C2=A0global name 'or= igin' is not defined</div><div class=3D"m_-5483403120246404331m_8117101= 615705453869m_8371283913762161110gmail-stackTrace"><div class=3D"m_-5483403= 120246404331m_8117101615705453869m_8371283913762161110gmail-frame" style=3D= "padding:1em;background-image:initial;background-position:initial;backgroun= d-size:initial;background-repeat:initial;background-origin:initial;backgrou= nd-clip:initial;border-bottom:thin dashed black;border-top:thin dashed blac= k"><div class=3D"m_-5483403120246404331m_8117101615705453869m_8371283913762= 161110gmail-location">/usr/lib/python2.7/dist-packag<wbr>es/twisted/web/ser= ver.py:189=C2=A0i<wbr>n=C2=A0<span class=3D"m_-5483403120246404331m_8117101= 615705453869m_8371283913762161110gmail-function" style=3D"font-weight:bold;= font-family:"Courier New",courier,monospace">process</span></div>= <div class=3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161= 110gmail-snippet" style=3D"margin-bottom:0.5em;margin-left:1em;background:r= gb(255,255,221)"><div class=3D"m_-5483403120246404331m_8117101615705453869m= _8371283913762161110gmail-snippetLine"><span class=3D"m_-548340312024640433= 1m_8117101615705453869m_8371283913762161110gmail-lineno">188</span>=C2=A0<c= ode class=3D"m_-5483403120246404331m_8117101615705453869m_83712839137621611= 10gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0self._encoder =3D encoder</code></div><div class=3D"m_-5483403120= 246404331m_8117101615705453869m_8371283913762161110gmail-snippetHighlightLi= ne" style=3D"color:red"><span class=3D"m_-5483403120246404331m_811710161570= 5453869m_8371283913762161110gmail-lineno">189</span>=C2=A0<code class=3D"m_= -5483403120246404331m_8117101615705453869m_8371283913762161110gmail-code">= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.render(resrc)</code></div><di= v class=3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110= gmail-snippetLine"><span class=3D"m_-5483403120246404331m_81171016157054538= 69m_8371283913762161110gmail-lineno">190</span>=C2=A0<code class=3D"m_-5483= 403120246404331m_8117101615705453869m_8371283913762161110gmail-code">=C2=A0= =C2=A0 =C2=A0 =C2=A0except:</code></div></div></div><div class=3D"m_-54834= 03120246404331m_8117101615705453869m_8371283913762161110gmail-frame" style= =3D"padding:1em;background-image:initial;background-position:initial;backgr= ound-size:initial;background-repeat:initial;background-origin:initial;backg= round-clip:initial;border-bottom:thin dashed black"><div class=3D"m_-548340= 3120246404331m_8117101615705453869m_8371283913762161110gmail-location">/usr= /lib/python2.7/dist-packag<wbr>es/twisted/web/server.py:238=C2=A0i<wbr>n=C2= =A0<span class=3D"m_-5483403120246404331m_8117101615705453869m_837128391376= 2161110gmail-function" style=3D"font-weight:bold;font-family:"Courier = New",courier,monospace">render</span></div><div class=3D"m_-5483403120= 246404331m_8117101615705453869m_8371283913762161110gmail-snippet" style=3D"= margin-bottom:0.5em;margin-left:1em;background:rgb(255,255,221)"><div class= =3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-s= nippetLine"><span class=3D"m_-5483403120246404331m_8117101615705453869m_837= 1283913762161110gmail-lineno">237</span>=C2=A0<code class=3D"m_-54834031202= 46404331m_8117101615705453869m_8371283913762161110gmail-code">=C2=A0 =C2=A0= =C2=A0 =C2=A0try:</code></div><div class=3D"m_-5483403120246404331m_811710= 1615705453869m_8371283913762161110gmail-snippetHighlightLine" style=3D"colo= r:red"><span class=3D"m_-5483403120246404331m_8117101615705453869m_83712839= 13762161110gmail-lineno">238</span>=C2=A0<code class=3D"m_-5483403120246404= 331m_8117101615705453869m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0body =3D resrc.render(self)</code></div><div class= =3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-s= nippetLine"><span class=3D"m_-5483403120246404331m_8117101615705453869m_837= 1283913762161110gmail-lineno">239</span>=C2=A0<code class=3D"m_-54834031202= 46404331m_8117101615705453869m_8371283913762161110gmail-code">=C2=A0 =C2=A0= =C2=A0 =C2=A0except UnsupportedMethod as e:</code></div></div></div><div c= lass=3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gma= il-frame" style=3D"padding:1em;background-image:initial;background-position= :initial;background-size:initial;background-repeat:initial;background-origi= n:initial;background-clip:initial;border-bottom:thin dashed black"><div cla= ss=3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail= -location">/usr/lib/python2.7/dist-packag<wbr>es/twisted/web/resource.py:25= 0<wbr>=C2=A0in=C2=A0<span class=3D"m_-5483403120246404331m_8117101615705453= 869m_8371283913762161110gmail-function" style=3D"font-weight:bold;font-fami= ly:"Courier New",courier,monospace">render</span></div><div class= =3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-s= nippet" style=3D"margin-bottom:0.5em;margin-left:1em;background:rgb(255,255= ,221)"><div class=3D"m_-5483403120246404331m_8117101615705453869m_837128391= 3762161110gmail-snippetLine"><span class=3D"m_-5483403120246404331m_8117101= 615705453869m_8371283913762161110gmail-lineno">249</span>=C2=A0<code class= =3D"m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-c= ode">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0raise UnsupportedMethod(allow= edMetho<wbr>ds)</code></div><div class=3D"m_-5483403120246404331m_811710161= 5705453869m_8371283913762161110gmail-snippetHighlightLine" style=3D"color:r= ed"><span class=3D"m_-5483403120246404331m_8117101615705453869m_83712839137= 62161110gmail-lineno">250</span>=C2=A0<code class=3D"m_-5483403120246404331= m_8117101615705453869m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 = =C2=A0return m(request)</code></div><div class=3D"m_-5483403120246404331m_8= 117101615705453869m_8371283913762161110gmail-snippetLine"><span class=3D"m_= -5483403120246404331m_8117101615705453869m_8371283913762161110gmail-lineno"= >251</span><code class=3D"m_-5483403120246404331m_8117101615705453869m_8371= 283913762161110gmail-code"></code></div></div></div><div class=3D"m_-548340= 3120246404331m_8117101615705453869m_8371283913762161110gmail-frame" style= =3D"padding:1em;background-image:initial;background-position:initial;backgr= ound-size:initial;background-repeat:initial;background-origin:initial;backg= round-clip:initial;border-bottom:thin dashed black"><div class=3D"m_-548340= 3120246404331m_8117101615705453869m_8371283913762161110gmail-location">/usr= /local/www/servos.rpy:15=C2=A0i<wbr>n=C2=A0<span class=3D"m_-54834031202464= 04331m_8117101615705453869m_8371283913762161110gmail-function" style=3D"fon= t-weight:bold;font-family:"Courier New",courier,monospace">render= _GET</span></div><div class=3D"m_-5483403120246404331m_8117101615705453869m= _8371283913762161110gmail-snippet" style=3D"margin-bottom:0.5em;margin-left= :1em;background:rgb(255,255,221)"><div class=3D"m_-5483403120246404331m_811= 7101615705453869m_8371283913762161110gmail-snippetLine"><span class=3D"m_-5= 483403120246404331m_8117101615705453869m_8371283913762161110gmail-lineno">1= 4</span>=C2=A0<code class=3D"m_-5483403120246404331m_8117101615705453869m_8= 371283913762161110gmail-code">=C2=A0 =C2=A0def render_GET(self,request):</c= ode></div><div class=3D"m_-5483403120246404331m_8117101615705453869m_837128= 3913762161110gmail-snippetHighlightLine" style=3D"color:red"><span class=3D= "m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-line= no">15</span>=C2=A0<code class=3D"m_-5483403120246404331m_81171016157054538= 69m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0if origin in = (self.permitted_origins):</code></div><div class=3D"m_-5483403120246404331m= _8117101615705453869m_8371283913762161110gmail-snippetLine"><span class=3D"= m_-5483403120246404331m_8117101615705453869m_8371283913762161110gmail-linen= o">16</span>=C2=A0<code class=3D"m_-5483403120246404331m_811710161570545386= 9m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= request.setHeader('Access-Con<wbr>trol-Allow-Origin', origin)</code= ></div></div></div></div><div class=3D"m_-5483403120246404331m_811710161570= 5453869m_8371283913762161110error" style=3D"color:red;font-weight:bold">exc= eptions.NameError:=C2=A0global name 'origin' is not defined</div></= div></div></div><div class=3D"gmail_extra"><span class=3D"m_-54834031202464= 04331m_8117101615705453869HOEnZb"><font color=3D"#888888"><br clear=3D"all"= ><div><div class=3D"m_-5483403120246404331m_8117101615705453869m_8371283913= 762161110gmail_signature" data-smartmail=3D"gmail_signature"><div dir=3D"lt= r"><div><div dir=3D"ltr"><div>Deve</div></div></div></div></div></div></fon= t></span><div><div class=3D"m_-5483403120246404331m_8117101615705453869h5"> <br><div class=3D"gmail_quote">On Sun, Aug 27, 2017 at 12:03 PM, Donal McMu= llan <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" targ= et=3D"_blank">[email protected]</a>></span> wrote:<br><blockquote= class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc soli= d;padding-left:1ex"><div dir=3D"ltr"><div>Perhaps you just need to set the = 'Access-Control-Allow-Origin' header? Something like this might wor= k:</div><span><div><br></div><div><br></div><div># Import necessary files = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>import serial = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0=C2=A0</div><div>from twisted.web.resource import Resource =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div># Setu= p Arduino at correct speed =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>try: =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 arduino =3D serial.= Serial('/dev/ttyACM0', 9600) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</d= iv><div>except: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0= arduino =3D serial.Serial('/dev/ttyACM1', 9600) =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0=C2=A0</div><div>class MoveServo(Resource): =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2=A0 =C2=A0 isLeaf =3D True =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div></sp= an><div>=C2=A0 =C2=A0 permitted_origins =3D ('<a href=3D"http://192.168= .1.122:9000" target=3D"_blank">http://192.168.1.122:9000</a>',) =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 def render_GET(self,request): =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 if origin in (self.permi= tted_origins): =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 request.setHeader('Access-Cont<w= br>rol-Allow-Origin', origin) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= </div><span><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 try: =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><di= v>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 # Send value over serial to the= Arduino =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 arduino.write(request.args['va<wbr>lue'][0]) =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= return 'Success' =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0</div><div>=C2= =A0 =C2=A0 =C2=A0 =C2=A0 except: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 return 'Failure' =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0</div><div>resource =3D MoveServo()=C2=A0</div></span></div><div clas= s=3D"gmail_extra"><br><div class=3D"gmail_quote"><div><div class=3D"m_-5483= 403120246404331m_8117101615705453869m_8371283913762161110h5">On 27 August 2= 017 at 17:10, Deve Krehbiel <span dir=3D"ltr"><<a href=3D"mailto:deve@sp= eedprint.com" target=3D"_blank">[email protected]</a>></span> wrote:<b= r></div></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;= border-left:1px #ccc solid;padding-left:1ex"><div><div class=3D"m_-54834031= 20246404331m_8117101615705453869m_8371283913762161110h5"><div dir=3D"ltr">F= irst post so forgive me if I am not explaining this right.=C2=A0<div><br></= div><div>I am trying to make a baby cam and then heavily document it for ev= eryone to have access to. I am using a Raspberry Pi with Rasbian. I am usin= g mjpg-streamer for the streaming with no problems.=C2=A0</div><div><br></d= iv><div>The problem is I am also using two servos for pan and tilt. To acco= mplish this I am using an Arduino Uno. This is so I can add IR lighting for= night vision, etc later. I am not a programmer so this is getting frustrat= ing after a few weeks of failure.</div><div><br></div><div>How is it failin= g you might ask..well, its working perfectly with only ONE exception:</div>= <div>Every time I push the button for left/right/up/down I get this:</div><= div><br></div><div>XMLHttpRequest cannot load <a href=3D"http://192.168.1.1= 22:81/servos.rpy?value=3D100P" target=3D"_blank">http://192.168.1.122:81/se= rvos<wbr>.rpy?value=3D100P</a>. No 'Access-Control-Allow-Origin' he= ader is present on the requested resource. Origin '<a href=3D"http://19= 2.168.1.122:9000" target=3D"_blank">http://192.168.1.122:9000</a>' is t= herefore not allowed access.</div><div><br></div><div>On the local area net= work, it still works, but taking it to the internet it does not.</div><div>= <br></div><div>Here are the two programs that make this happen. One is serv= os.rpy and the other is the supporting HTML/Get script;</div><div>****</div= ><div>servos.rpy</div><div>------------------------------<wbr>-----</div><d= iv><div># Import necessary files</div><div>import serial</div><div>from twi= sted.web.resource import Resource</div><div># Setup Arduino at correct spee= d</div><div>try:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino =3D serial.S= erial('/dev/ttyACM0', 9600)</div><div>except:</div><div>=C2=A0 =C2= =A0 =C2=A0 =C2=A0 arduino =3D serial.Serial('/dev/ttyACM1', 9600)</= div><div><br></div><div>class MoveServo(Resource):</div><div>=C2=A0 =C2=A0 = =C2=A0 =C2=A0 isLeaf =3D True</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 def ren= der_GET(self,request):</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 try:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 <span style=3D"white-space:pre-wrap"> </span># Send value over = serial to the Arduino</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino.write(request.args['v= a<wbr>lue'][0])</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return 'Success'</div><div>= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 except:</div><div>= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return 'Failure'</div><div><br></div><div>resource =3D M= oveServo()</div></div><div>***</div><div><br></div><div>Now for the HTML/Ge= t script:</div><div><br></div><div>**</div><div><div><!doctype html><= /div><div><html></div><div><span style=3D"white-space:pre-wrap"> </sp= an><head></div><div><span style=3D"white-space:pre-wrap"> </span><= ;title>Make Use Of DIY Security Camera</title></div><div><span sty= le=3D"white-space:pre-wrap"> </span><style type=3D"text/css"&= gt;</div><div><span style=3D"white-space:pre-wrap"> </span>#container {</= div><div><span style=3D"white-space:pre-wrap"> </span>/* center the cont= ent */</div><div><span style=3D"white-space:pre-wrap"> </span>margin: 0 = auto;<span style=3D"white-space:pre-wrap"> </span></div><div><span style=3D= "white-space:pre-wrap"> </span>text-align: center;</div><div><span style= =3D"white-space:pre-wrap"> </span>}</div><div><span style=3D"white-space:= pre-wrap"> </span></style></div><div><span style=3D"white-space:pre-= wrap"> </span></head></div><div><span style=3D"white-space:pre-wrap">= </span><body></div><div><span style=3D"white-space:pre-wrap"> </spa= n><div id=3D"container"></div><div><span style=3D"white-spa= ce:pre-wrap"> </span><img src=3D"/?action=3Dstream" /><= ;br></div><div><span style=3D"white-space:pre-wrap"> </span><script= src=3D"<a href=3D"https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/= jquery.min.js" target=3D"_blank">https://ajax.googleapis.c<wbr>om/ajax/libs= /jquery/3.1.0/jque<wbr>ry.min.js</a>"></script><br /></= div><div><span style=3D"white-space:pre-wrap"> </span><button onclick= =3D"servos.move('P', 10)">Left</button></div><di= v><span style=3D"white-space:pre-wrap"> </span><button onclick=3D"= ;servos.move('P', -10)">Right</button></div><div><spa= n style=3D"white-space:pre-wrap"> </span><button onclick=3D"servo= s.move('T', -10)">Down</button></div><div><span style= =3D"white-space:pre-wrap"> </span><button onclick=3D"servos.move(= 'T', 10)">Up</button></div><div><span style=3D"white-= space:pre-wrap"> </span></div></div><div><span style=3D"white-space:= pre-wrap"> </span></body></div><div><span style=3D"white-space:pre-wr= ap"> </span><script></div><div><span style=3D"white-space:pre-wrap"> = </span>var servos;</div><div><span style=3D"white-space:pre-wrap"> </span= >$( document ).ready(function() {</div><div><span style=3D"white-space:pre-= wrap"> </span>servos =3D moveServos();</div><div><span style=3D"white-spa= ce:pre-wrap"> </span>});</div><div><span style=3D"white-space:pre-wrap"> = </span>function moveServos() {</div><div><span style=3D"white-space:pre-wra= p"> </span>// Store some settings, adjust to suit</div><div><span style= =3D"white-space:pre-wrap"> </span>var panPos =3D 70,=C2=A0</div><div><spa= n style=3D"white-space:pre-wrap"> </span>tiltPos =3D 90,=C2=A0</div><div= ><span style=3D"white-space:pre-wrap"> </span>tiltMax =3D 170,=C2=A0</di= v><div><span style=3D"white-space:pre-wrap"> </span>tiltMin =3D 45,=C2= =A0</div><div><span style=3D"white-space:pre-wrap"> </span>panMax =3D 17= 0,=C2=A0</div><div><span style=3D"white-space:pre-wrap"> </span>panMin = =3D 20;</div><div><span style=3D"white-space:pre-wrap"> </span>return {</= div><div><span style=3D"white-space:pre-wrap"> </span>move:function(serv= o, adjustment) {</div><div><span style=3D"white-space:pre-wrap"> </span= >var value;</div><div><span style=3D"white-space:pre-wrap"> </span>if(s= ervo =3D=3D 'P') {</div><div><span style=3D"white-space:pre-wrap"> = </span>if(!((panPos >=3D panMax && adjustment > 0) || (p= anPos <=3D panMin && adjustment < 0))) {</div><div><span styl= e=3D"white-space:pre-wrap"> </span>// Still within allowed range, &qu= ot;schedule" the movement</div><div><span style=3D"white-space:pre-wra= p"> </span>panPos +=3D adjustment;</div><div><span style=3D"white-spa= ce:pre-wrap"> </span>}</div><div><span style=3D"white-space:pre-wrap">= </span>value =3D panPos + 'P';</div><div><span style=3D"white= -space:pre-wrap"> </span>}</div><div><span style=3D"white-space:pre-wra= p"> </span>else if(servo =3D=3D 'T') {</div><div><span style=3D= "white-space:pre-wrap"> </span>if(!((tiltPos >=3D tiltMax &&= ; adjustment > 0) || (tiltPos <=3D tiltMin && adjustment <= 0))) {</div><div><span style=3D"white-space:pre-wrap"> </span>// Sti= ll within allowed range, "schedule" the movement</div><div><span = style=3D"white-space:pre-wrap"> </span>tiltPos +=3D adjustment;</div>= <div><span style=3D"white-space:pre-wrap"> </span>}</div><div><span st= yle=3D"white-space:pre-wrap"> </span>value =3D tiltPos + 'T';<= /div><div><span style=3D"white-space:pre-wrap"> </span>}</div><div><spa= n style=3D"white-space:pre-wrap"> </span>// Use AJAX to actually move t= he servo</div><div><span style=3D"white-space:pre-wrap"> </span>$.get(&= #39;<a href=3D"http://192.168.1.122:81/servos.rpy?value=3D" target=3D"_blan= k">http://192.168.1.122:81<wbr>/servos.rpy?value=3D</a>' + value);</div= ><div><span style=3D"white-space:pre-wrap"> </span>},</div><div><span st= yle=3D"white-space:pre-wrap"> </span>}</div><div><span style=3D"white-spa= ce:pre-wrap"> </span>}</div><div><span style=3D"white-space:pre-wrap"> </s= pan></script></div><div></html></div></div><div><br></div><div>= *****</div><div>Twisted is started: =C2=A0sudo twistd -n web -p 81 --path /= usr/local/www/</div><div><br></div><div>I would be forever grateful if some= one could take a serious look at this and tell me where I am going wrong. O= nce this is fixed, I can start documenting the entire system for everyone. = Thank you!</div><span class=3D"m_-5483403120246404331m_8117101615705453869m= _8371283913762161110m_-4865426837896638325HOEnZb"><font color=3D"#888888"><= div><br clear=3D"all"><div><div class=3D"m_-5483403120246404331m_8117101615= 705453869m_8371283913762161110m_-4865426837896638325m_-2487397493353888386g= mail_signature"><div dir=3D"ltr"><div><div dir=3D"ltr"><div>Deve</div></div= ></div></div></div></div> </div></font></span></div> <br></div></div>______________________________<wbr>_________________<br> Twisted-web mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">Twisted-= [email protected]</a><br> <a href=3D"https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web" = rel=3D"noreferrer" target=3D"_blank">https://twistedmatrix.com/cgi-<wbr>bin= /mailman/listinfo/twisted-w<wbr>eb</a><br> <br></blockquote></div><br></div> <br>______________________________<wbr>_________________<br> Twisted-web mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">Twisted-= [email protected]</a><br> <a href=3D"https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web" = rel=3D"noreferrer" target=3D"_blank">https://twistedmatrix.com/cgi-<wbr>bin= /mailman/listinfo/twisted-w<wbr>eb</a><br> <br></blockquote></div><br></div></div></div> </blockquote></div><br></div></div></div> <br>______________________________<wbr>_________________<br> Twisted-web mailing list<br> <a href=3D"mailto:[email protected]" target=3D"_blank">Twisted-= [email protected]</a><br> <a href=3D"https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web" = rel=3D"noreferrer" target=3D"_blank">https://twistedmatrix.com/cgi-<wbr>bin= /mailman/listinfo/twisted-w<wbr>eb</a><br> <br></blockquote></div><br></div> </div></div><br>______________________________<wbr>_________________<br> Twisted-web mailing list<br> <a href=3D"mailto:[email protected]">Twisted-web@twistedmatrix.= com</a><br> <a href=3D"https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web" = rel=3D"noreferrer" target=3D"_blank">https://twistedmatrix.com/cgi-<wbr>bin= /mailman/listinfo/twisted-<wbr>web</a><br> <br></blockquote></div><br></div> --f403045f2f9cf292370557c1c98a-- --===============3567542855432498418== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVHdpc3RlZC13 ZWIgbWFpbGluZyBsaXN0ClR3aXN0ZWQtd2ViQHR3aXN0ZWRtYXRyaXguY29tCmh0dHBzOi8vdHdp c3RlZG1hdHJpeC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3R3aXN0ZWQtd2ViCg== --===============3567542855432498418==--