Re: Python and Cors
Deve Krehbiel <[email protected]> Sun, 27 Aug 2017 13:01:55 -0500
| Newsgroups | gmane.comp.python.twisted.web |
|---|---|
| Message-ID | <CADfFrhS=gj7oULcsF+t8X6UWhM4QxN-uQxn3BJPM7LcQO40Abw@mail.gmail.com> |
--===============3778224953352698036== Content-Type: multipart/alternative; boundary="001a1140c55e4b2a030557bff98b" --001a1140c55e4b2a030557bff98b Content-Type: text/plain; charset="UTF-8" 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/servos.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/servos.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 >> >> > --001a1140c55e4b2a030557bff98b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div>This is what I get without your code:</div><div>index= 1.html:1 XMLHttpRequest cannot load <a href=3D"http://192.168.1.122:81/serv= os.rpy?value=3D70P">http://192.168.1.122:81/servos.rpy?value=3D70P</a>. No = 'Access-Control-Allow-Origin' header is present on the requested re= source. Origin '<a href=3D"http://192.168.1.122:9000">http://192.168.1.= 122:9000</a>' is therefore not allowed access.</div><div>jquery.min.js:= 4 XHR failed loading: GET "<a href=3D"http://192.168.1.122:81/servos.r= py?value=3D70P">http://192.168.1.122:81/servos.rpy?value=3D70P</a>".</= div><div><br></div><div>This is what I get with it:</div><div><div>jquery.m= in.js:4 GET <a href=3D"http://192.168.1.122:81/servos.rpy?value=3D100P">htt= p://192.168.1.122:81/servos.rpy?value=3D100P</a>=C2=A0</div><div>send @ jqu= ery.min.js:4</div><div>ajax @ jquery.min.js:4</div><div>r.(anonymous functi= on) @ jquery.min.js:4</div><div>move @ index1.html:54</div><div>onclick @ i= ndex1.html:17</div><div>index1.html:1 XMLHttpRequest cannot load <a href=3D= "http://192.168.1.122:81/servos.rpy?value=3D100P">http://192.168.1.122:81/s= ervos.rpy?value=3D100P</a>. No 'Access-Control-Allow-Origin' header= is present on the requested resource. Origin '<a href=3D"http://192.16= 8.1.122:9000">http://192.168.1.122:9000</a>' is therefore not allowed a= ccess. <b>The response had HTTP status code 500.</b></div><div>jquery.min.j= s:4 XHR failed loading: GET "<a href=3D"http://192.168.1.122:81/servos= .rpy?value=3D100P">http://192.168.1.122:81/servos.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"><br cl= ear=3D"all"><div><div class=3D"gmail_signature" data-smartmail=3D"gmail_sig= nature"><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 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_83= 71283913762161110error" style=3D"color:red;font-weight:bold">exceptions.Nam= eError:=C2=A0global name 'origin' is not defined</div><div class=3D= "m_8371283913762161110gmail-stackTrace"><div class=3D"m_8371283913762161110= gmail-frame" style=3D"padding:1em;background-image:initial;background-posit= ion:initial;background-size:initial;background-repeat:initial;background-or= igin:initial;background-clip:initial;border-bottom:thin dashed black;border= -top:thin dashed black"><div class=3D"m_8371283913762161110gmail-location">= /usr/lib/python2.7/dist-<wbr>packages/twisted/web/server.<wbr>py:189=C2=A0i= n=C2=A0<span class=3D"m_8371283913762161110gmail-function" style=3D"font-we= ight:bold;font-family:"Courier New",courier,monospace">process</s= pan></div><div class=3D"m_8371283913762161110gmail-snippet" style=3D"margin= -bottom:0.5em;margin-left:1em;background:rgb(255,255,221)"><div class=3D"m_= 8371283913762161110gmail-snippetLine"><span class=3D"m_8371283913762161110g= mail-lineno">188</span>=C2=A0<code class=3D"m_8371283913762161110gmail-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_8371283913762161110gmail-= snippetHighlightLine" style=3D"color:red"><span class=3D"m_8371283913762161= 110gmail-lineno">189</span>=C2=A0<code class=3D"m_8371283913762161110gmail-= code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0self.render(resrc)</code></d= iv><div class=3D"m_8371283913762161110gmail-snippetLine"><span class=3D"m_8= 371283913762161110gmail-lineno">190</span>=C2=A0<code class=3D"m_8371283913= 762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0except:</code></div></div><= /div><div class=3D"m_8371283913762161110gmail-frame" style=3D"padding:1em;b= ackground-image:initial;background-position:initial;background-size:initial= ;background-repeat:initial;background-origin:initial;background-clip:initia= l;border-bottom:thin dashed black"><div class=3D"m_8371283913762161110gmail= -location">/usr/lib/python2.7/dist-<wbr>packages/twisted/web/server.<wbr>py= :238=C2=A0in=C2=A0<span class=3D"m_8371283913762161110gmail-function" style= =3D"font-weight:bold;font-family:"Courier New",courier,monospace"= >render</span></div><div class=3D"m_8371283913762161110gmail-snippet" style= =3D"margin-bottom:0.5em;margin-left:1em;background:rgb(255,255,221)"><div c= lass=3D"m_8371283913762161110gmail-snippetLine"><span class=3D"m_8371283913= 762161110gmail-lineno">237</span>=C2=A0<code class=3D"m_8371283913762161110= gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0try:</code></div><div class=3D"m_837= 1283913762161110gmail-snippetHighlightLine" style=3D"color:red"><span class= =3D"m_8371283913762161110gmail-lineno">238</span>=C2=A0<code class=3D"m_837= 1283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0body = =3D resrc.render(self)</code></div><div class=3D"m_8371283913762161110gmail= -snippetLine"><span class=3D"m_8371283913762161110gmail-lineno">239</span>= =C2=A0<code class=3D"m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 = =C2=A0except UnsupportedMethod as e:</code></div></div></div><div class=3D"= m_8371283913762161110gmail-frame" style=3D"padding:1em;background-image:ini= tial;background-position:initial;background-size:initial;background-repeat:= initial;background-origin:initial;background-clip:initial;border-bottom:thi= n dashed black"><div class=3D"m_8371283913762161110gmail-location">/usr/lib= /python2.7/dist-<wbr>packages/twisted/web/resource.<wbr>py:250=C2=A0in=C2= =A0<span class=3D"m_8371283913762161110gmail-function" style=3D"font-weight= :bold;font-family:"Courier New",courier,monospace">render</span><= /div><div class=3D"m_8371283913762161110gmail-snippet" style=3D"margin-bott= om:0.5em;margin-left:1em;background:rgb(255,255,221)"><div class=3D"m_83712= 83913762161110gmail-snippetLine"><span class=3D"m_8371283913762161110gmail-= lineno">249</span>=C2=A0<code class=3D"m_8371283913762161110gmail-code">=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0raise UnsupportedMethod(<wbr>allowedM= ethods)</code></div><div class=3D"m_8371283913762161110gmail-snippetHighlig= htLine" style=3D"color:red"><span class=3D"m_8371283913762161110gmail-linen= o">250</span>=C2=A0<code class=3D"m_8371283913762161110gmail-code">=C2=A0 = =C2=A0 =C2=A0 =C2=A0return m(request)</code></div><div class=3D"m_837128391= 3762161110gmail-snippetLine"><span class=3D"m_8371283913762161110gmail-line= no">251</span><code class=3D"m_8371283913762161110gmail-code"></code></div>= </div></div><div class=3D"m_8371283913762161110gmail-frame" style=3D"paddin= g:1em;background-image:initial;background-position:initial;background-size:= initial;background-repeat:initial;background-origin:initial;background-clip= :initial;border-bottom:thin dashed black"><div class=3D"m_83712839137621611= 10gmail-location">/usr/local/www/servos.rpy:15=C2=A0<wbr>in=C2=A0<span clas= s=3D"m_8371283913762161110gmail-function" style=3D"font-weight:bold;font-fa= mily:"Courier New",courier,monospace">render_GET</span></div><div= class=3D"m_8371283913762161110gmail-snippet" style=3D"margin-bottom:0.5em;= margin-left:1em;background:rgb(255,255,221)"><div class=3D"m_83712839137621= 61110gmail-snippetLine"><span class=3D"m_8371283913762161110gmail-lineno">1= 4</span>=C2=A0<code class=3D"m_8371283913762161110gmail-code">=C2=A0 =C2=A0= def render_GET(self,request):</code></div><div class=3D"m_83712839137621611= 10gmail-snippetHighlightLine" style=3D"color:red"><span class=3D"m_83712839= 13762161110gmail-lineno">15</span>=C2=A0<code class=3D"m_837128391376216111= 0gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0if origin in (self.permitted_origin= s):</code></div><div class=3D"m_8371283913762161110gmail-snippetLine"><span= class=3D"m_8371283913762161110gmail-lineno">16</span>=C2=A0<code class=3D"= m_8371283913762161110gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0r= equest.setHeader('Access-<wbr>Control-Allow-Origin', origin)</code>= </div></div></div></div><div class=3D"m_8371283913762161110error" style=3D"= color:red;font-weight:bold">exceptions.NameError:=C2=A0global name 'ori= gin' is not defined</div></div></div></div><div class=3D"gmail_extra"><= span class=3D"HOEnZb"><font color=3D"#888888"><br clear=3D"all"><div><div c= lass=3D"m_8371283913762161110gmail_signature" data-smartmail=3D"gmail_signa= ture"><div dir=3D"ltr"><div><div dir=3D"ltr"><div>Deve</div></div></div></d= iv></div></div></font></span><div><div class=3D"h5"> <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_83712= 83913762161110h5">On 27 August 2017 at 17:10, Deve Krehbiel <span dir=3D"lt= r"><<a href=3D"mailto:[email protected]" target=3D"_blank">deve@speedp= rint.com</a>></span> wrote:<br></div></div><blockquote class=3D"gmail_qu= ote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex= "><div><div class=3D"m_8371283913762161110h5"><div dir=3D"ltr">First post s= o 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 everyone to h= ave access to. I am using a Raspberry Pi with Rasbian. I am using mjpg-stre= amer for the streaming with no problems.=C2=A0</div><div><br></div><div>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 visi= on, etc later. I am not a programmer so this is getting frustrating after a= few weeks of failure.</div><div><br></div><div>How is it failing 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></d= iv><div>XMLHttpRequest cannot load <a href=3D"http://192.168.1.122:81/servo= s.rpy?value=3D100P" target=3D"_blank">http://192.168.1.122:81/servos<wbr>.r= py?value=3D100P</a>. No 'Access-Control-Allow-Origin' header is pre= sent on 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 no= t allowed access.</div><div><br></div><div>On the local area network, it st= ill 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 servos.rpy and = the other is the supporting HTML/Get script;</div><div>****</div><div>servo= s.rpy</div><div>------------------------------<wbr>-----</div><div><div># I= mport necessary files</div><div>import serial</div><div>from twisted.web.re= source import Resource</div><div># Setup Arduino at correct speed</div><div= >try:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino =3D serial.Serial('= /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><b= r></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 render_GET(se= lf,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 t= he 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['va<wbr>lue&= #39;][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 r= eturn 'Failure'</div><div><br></div><div>resource =3D MoveServo()</= div></div><div>***</div><div><br></div><div>Now for the HTML/Get script:</d= iv><div><br></div><div>**</div><div><div><!doctype html></div><div>&l= t;html></div><div><span style=3D"white-space:pre-wrap"> </span><head&= gt;</div><div><span style=3D"white-space:pre-wrap"> </span><title>Ma= ke Use Of DIY Security Camera</title></div><div><span style=3D"white-= space:pre-wrap"> </span><style type=3D"text/css"></div><di= v><span style=3D"white-space:pre-wrap"> </span>#container {</div><div><sp= an style=3D"white-space:pre-wrap"> </span>/* center the content */</div>= <div><span style=3D"white-space:pre-wrap"> </span>margin: 0 auto;<span s= tyle=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-sp= ace:pre-wrap"> </span>}</div><div><span style=3D"white-space:pre-wrap"> = </span></style></div><div><span style=3D"white-space:pre-wrap"> </spa= n></head></div><div><span style=3D"white-space:pre-wrap"> </span><= body></div><div><span style=3D"white-space:pre-wrap"> </span><div id= =3D"container"></div><div><span style=3D"white-space: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.j= s" 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><sp= an style=3D"white-space:pre-wrap"> </span><button onclick=3D"serv= os.move('P', 10)">Left</button></div><div><span style= =3D"white-space:pre-wrap"> </span><button onclick=3D"servos.move(= 'P', -10)">Right</button></div><div><span style=3D"wh= ite-space:pre-wrap"> </span><button onclick=3D"servos.move('T= ', -10)">Down</button></div><div><span style=3D"white-spa= ce:pre-wrap"> </span><button onclick=3D"servos.move('T', = 10)">Up</button></div><div><span style=3D"white-space:pre-wra= p"> </span></div></div><div><span style=3D"white-space:pre-wrap"> </= span></body></div><div><span style=3D"white-space:pre-wrap"> </span>&= lt;script></div><div><span style=3D"white-space:pre-wrap"> </span>var s= ervos;</div><div><span style=3D"white-space:pre-wrap"> </span>$( document = ).ready(function() {</div><div><span style=3D"white-space:pre-wrap"> </sp= an>servos =3D moveServos();</div><div><span style=3D"white-space:pre-wrap">= </span>});</div><div><span style=3D"white-space:pre-wrap"> </span>functi= on moveServos() {</div><div><span style=3D"white-space:pre-wrap"> </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><span style=3D"whit= e-space:pre-wrap"> </span>tiltPos =3D 90,=C2=A0</div><div><span style=3D= "white-space:pre-wrap"> </span>tiltMax =3D 170,=C2=A0</div><div><span st= yle=3D"white-space:pre-wrap"> </span>tiltMin =3D 45,=C2=A0</div><div><sp= an style=3D"white-space:pre-wrap"> </span>panMax =3D 170,=C2=A0</div><di= v><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 sty= le=3D"white-space:pre-wrap"> </span>move:function(servo, adjustment) {</= div><div><span style=3D"white-space:pre-wrap"> </span>var value;</div><= div><span style=3D"white-space:pre-wrap"> </span>if(servo =3D=3D 'P= ') {</div><div><span style=3D"white-space:pre-wrap"> </span>if(!((= panPos >=3D panMax && adjustment > 0) || (panPos <=3D panM= in && adjustment < 0))) {</div><div><span style=3D"white-space:p= re-wrap"> </span>// Still within allowed range, "schedule" = the movement</div><div><span style=3D"white-space:pre-wrap"> </span>p= anPos +=3D adjustment;</div><div><span style=3D"white-space: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-wrap"> </span>els= e if(servo =3D=3D 'T') {</div><div><span style=3D"white-space:pre-w= rap"> </span>if(!((tiltPos >=3D tiltMax && adjustment > = 0) || (tiltPos <=3D tiltMin && adjustment < 0))) {</div><div>= <span style=3D"white-space:pre-wrap"> </span>// Still within allowed = range, "schedule" the movement</div><div><span style=3D"white-spa= ce:pre-wrap"> </span>tiltPos +=3D adjustment;</div><div><span style= =3D"white-space:pre-wrap"> </span>}</div><div><span style=3D"white-spa= ce:pre-wrap"> </span>value =3D tiltPos + 'T';</div><div><span = style=3D"white-space:pre-wrap"> </span>}</div><div><span style=3D"white= -space:pre-wrap"> </span>// Use AJAX to actually move the servo</div><d= iv><span style=3D"white-space:pre-wrap"> </span>$.get('<a href=3D"h= ttp://192.168.1.122:81/servos.rpy?value=3D" target=3D"_blank">http://192.16= 8.1.122:81<wbr>/servos.rpy?value=3D</a>' + value);</div><div><span styl= e=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"> <= /span>}</div><div><span style=3D"white-space:pre-wrap"> </span></script&= gt;</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 someone could take a= serious look at this and tell me where I am going wrong. Once this is fixe= d, I can start documenting the entire system for everyone. Thank you!</div>= <span class=3D"m_8371283913762161110m_-4865426837896638325HOEnZb"><font col= or=3D"#888888"><div><br clear=3D"all"><div><div class=3D"m_8371283913762161= 110m_-4865426837896638325m_-2487397493353888386gmail_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> --001a1140c55e4b2a030557bff98b-- --===============3778224953352698036== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVHdpc3RlZC13 ZWIgbWFpbGluZyBsaXN0ClR3aXN0ZWQtd2ViQHR3aXN0ZWRtYXRyaXguY29tCmh0dHBzOi8vdHdp c3RlZG1hdHJpeC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3R3aXN0ZWQtd2ViCg== --===============3778224953352698036==--