Re: Python and Cors

Deve Krehbiel <[email protected]> Sun, 27 Aug 2017 12:48:32 -0500
Newsgroups gmane.comp.python.twisted.web
Message-ID <CADfFrhSrU7EW60CpBQsg9AOAdvc_ko0NUpUHeJ2K+f+-0i7eaA@mail.gmail.com>
--===============7901679351578790701==
Content-Type: multipart/alternative; boundary="001a114d6b506409030557bfc98d"

--001a114d6b506409030557bfc98d
Content-Type: text/plain; charset="UTF-8"

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
>
>

--001a114d6b506409030557bfc98d
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Thank you for the response. In trying that code, it made i=
t so the LAN cannot move the buttons either. Here is the error list I got:<=
div><br></div><div><b style=3D"color:rgb(0,0,0);font-family:&quot;Times New=
 Roman&quot;;font-size:medium">web.Server Traceback (most recent call last)=
:</b><span style=3D"color:rgb(0,0,0);font-family:&quot;Times New Roman&quot=
;;font-size:medium"></span><div style=3D"font-family:Verdana,Arial,helvetic=
a,sans-serif;color:rgb(0,0,0);font-size:medium"><div class=3D"error" style=
=3D"color:red;font-weight:bold">exceptions.NameError:=C2=A0global name &#39=
;origin&#39; is not defined</div><div class=3D"gmail-stackTrace"><div class=
=3D"gmail-frame" style=3D"padding:1em;background-image:initial;background-p=
osition:initial;background-size:initial;background-repeat:initial;backgroun=
d-origin:initial;background-clip:initial;border-bottom:thin dashed black;bo=
rder-top:thin dashed black"><div class=3D"gmail-location">/usr/lib/python2.=
7/dist-packages/twisted/web/server.py:189=C2=A0in=C2=A0<span class=3D"gmail=
-function" style=3D"font-weight:bold;font-family:&quot;Courier New&quot;,co=
urier,monospace">process</span></div><div class=3D"gmail-snippet" style=3D"=
margin-bottom:0.5em;margin-left:1em;background:rgb(255,255,221)"><div class=
=3D"gmail-snippetLine"><span class=3D"gmail-lineno">188</span>=C2=A0<code c=
lass=3D"gmail-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"gmail-sni=
ppetHighlightLine" style=3D"color:red"><span class=3D"gmail-lineno">189</sp=
an>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0self.render(resrc)</code></div><div class=3D"gmail-snippetLine"><span cl=
ass=3D"gmail-lineno">190</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=
=A0 =C2=A0 =C2=A0except:</code></div></div></div><div class=3D"gmail-frame"=
 style=3D"padding: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"gma=
il-location">/usr/lib/python2.7/dist-packages/twisted/web/server.py:238=C2=
=A0in=C2=A0<span class=3D"gmail-function" style=3D"font-weight:bold;font-fa=
mily:&quot;Courier New&quot;,courier,monospace">render</span></div><div cla=
ss=3D"gmail-snippet" style=3D"margin-bottom:0.5em;margin-left:1em;backgroun=
d:rgb(255,255,221)"><div class=3D"gmail-snippetLine"><span class=3D"gmail-l=
ineno">237</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0try:</code></div><div class=3D"gmail-snippetHighlightLine" style=3D"colo=
r:red"><span class=3D"gmail-lineno">238</span>=C2=A0<code class=3D"gmail-co=
de">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0body =3D resrc.render(self)</c=
ode></div><div class=3D"gmail-snippetLine"><span class=3D"gmail-lineno">239=
</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0except U=
nsupportedMethod as e:</code></div></div></div><div class=3D"gmail-frame" s=
tyle=3D"padding:1em;background-image:initial;background-position:initial;ba=
ckground-size:initial;background-repeat:initial;background-origin:initial;b=
ackground-clip:initial;border-bottom:thin dashed black"><div class=3D"gmail=
-location">/usr/lib/python2.7/dist-packages/twisted/web/resource.py:250=C2=
=A0in=C2=A0<span class=3D"gmail-function" style=3D"font-weight:bold;font-fa=
mily:&quot;Courier New&quot;,courier,monospace">render</span></div><div cla=
ss=3D"gmail-snippet" style=3D"margin-bottom:0.5em;margin-left:1em;backgroun=
d:rgb(255,255,221)"><div class=3D"gmail-snippetLine"><span class=3D"gmail-l=
ineno">249</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0raise UnsupportedMethod(allowedMethods)</code></div><div c=
lass=3D"gmail-snippetHighlightLine" style=3D"color:red"><span class=3D"gmai=
l-lineno">250</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0return m(request)</code></div><div class=3D"gmail-snippetLine"><span =
class=3D"gmail-lineno">251</span><code class=3D"gmail-code"></code></div></=
div></div><div class=3D"gmail-frame" style=3D"padding:1em;background-image:=
initial;background-position:initial;background-size:initial;background-repe=
at:initial;background-origin:initial;background-clip:initial;border-bottom:=
thin dashed black"><div class=3D"gmail-location">/usr/local/www/servos.rpy:=
15=C2=A0in=C2=A0<span class=3D"gmail-function" style=3D"font-weight:bold;fo=
nt-family:&quot;Courier New&quot;,courier,monospace">render_GET</span></div=
><div class=3D"gmail-snippet" style=3D"margin-bottom:0.5em;margin-left:1em;=
background:rgb(255,255,221)"><div class=3D"gmail-snippetLine"><span class=
=3D"gmail-lineno">14</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0de=
f render_GET(self,request):</code></div><div class=3D"gmail-snippetHighligh=
tLine" style=3D"color:red"><span class=3D"gmail-lineno">15</span>=C2=A0<cod=
e class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0 =C2=A0if origin in (self.permit=
ted_origins):</code></div><div class=3D"gmail-snippetLine"><span class=3D"g=
mail-lineno">16</span>=C2=A0<code class=3D"gmail-code">=C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0request.setHeader(&#39;Access-Control-Allow-Origin&#39=
;, origin)</code></div></div></div></div><div class=3D"error" style=3D"colo=
r:red;font-weight:bold">exceptions.NameError:=C2=A0global name &#39;origin&=
#39; is not defined</div></div></div></div><div class=3D"gmail_extra"><br c=
lear=3D"all"><div><div class=3D"gmail_signature" data-smartmail=3D"gmail_si=
gnature"><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:03 PM, Donal McMu=
llan <span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" targ=
et=3D"_blank">[email protected]</a>&gt;</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 =
&#39;Access-Control-Allow-Origin&#39; header? Something like this might wor=
k:</div><span class=3D""><div><br></div><div><br></div><div># Import necess=
ary 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>impor=
t 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=
># 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>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(&#39;/dev/ttyACM0&#39;, 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</div><div>=C2=
=A0 =C2=A0 arduino =3D serial.Serial(&#39;/dev/ttyACM1&#39;, 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></span><div>=C2=A0 =C2=A0 permitted_origins =3D (&#39;<a href=3D"http=
://192.168.1.122:9000" target=3D"_blank">http://192.168.1.122:9000</a>&#39;=
,) =C2=A0 =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.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(&#39;Acces=
s-<wbr>Control-Allow-Origin&#39;, origin) =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 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 va=
lue 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[&#39;<wbr=
>value&#39;][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 &#39;Success&#39; =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=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 &#39;Failure&#39; =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =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</di=
v></span></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"><d=
iv><div class=3D"h5">On 27 August 2017 at 17:10, Deve Krehbiel <span dir=3D=
"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">deve@spe=
edprint.com</a>&gt;</span> wrote:<br></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"h5"><div dir=3D"ltr">First 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 everyone to have access to. I a=
m using a Raspberry Pi with Rasbian. I am using mjpg-streamer for the strea=
ming with no problems.=C2=A0</div><div><br></div><div>The problem is I am a=
lso using two servos for pan and tilt. To accomplish this I am using an Ard=
uino Uno. This is so I can add IR lighting for night vision, etc later. I a=
m not a programmer so this is getting frustrating after a few weeks of fail=
ure.</div><div><br></div><div>How is it failing you might ask..well, its wo=
rking perfectly with only ONE exception:</div><div>Every time I push the bu=
tton for left/right/up/down I get this:</div><div><br></div><div>XMLHttpReq=
uest 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?value=3D100P</a=
>. No &#39;Access-Control-Allow-Origin&#39; header is present on the reques=
ted resource. Origin &#39;<a href=3D"http://192.168.1.122:9000" target=3D"_=
blank">http://192.168.1.122:9000</a>&#39; is therefore not allowed access.<=
/div><div><br></div><div>On the local area network, it still works, but tak=
ing it to the internet it does not.</div><div><br></div><div>Here are the t=
wo programs that make this happen. One is servos.rpy and the other is the s=
upporting HTML/Get script;</div><div>****</div><div>servos.rpy</div><div>--=
----------------------------<wbr>-----</div><div><div># Import necessary fi=
les</div><div>import serial</div><div>from twisted.web.resource import Reso=
urce</div><div># Setup Arduino at correct speed</div><div>try:</div><div>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino =3D serial.Serial(&#39;/dev/ttyACM0&#39=
;, 9600)</div><div>except:</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 arduino =
=3D serial.Serial(&#39;/dev/ttyACM1&#39;, 9600)</div><div><br></div><div>cl=
ass MoveServo(Resource):</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 isLeaf =3D T=
rue</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 def render_GET(self,request):</di=
v><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 try:</div><d=
iv>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 <span style=3D"w=
hite-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[&#39;va<wbr>lue&#39;][0])</div><di=
v>=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 &#39;Success&#39;</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 &#39;Failure=
&#39;</div><div><br></div><div>resource =3D MoveServo()</div></div><div>***=
</div><div><br></div><div>Now for the HTML/Get script:</div><div><br></div>=
<div>**</div><div><div>&lt;!doctype html&gt;</div><div>&lt;html&gt;</div><d=
iv><span style=3D"white-space:pre-wrap">	</span>&lt;head&gt;</div><div><spa=
n style=3D"white-space:pre-wrap">		</span>&lt;title&gt;Make Use Of DIY Secu=
rity Camera&lt;/title&gt;</div><div><span style=3D"white-space:pre-wrap">		=
</span>&lt;style type=3D&quot;text/css&quot;&gt;</div><div><span style=3D"w=
hite-space:pre-wrap">			</span>#container {</div><div><span style=3D"white-=
space:pre-wrap">				</span>/* center the content */</div><div><span style=
=3D"white-space:pre-wrap">				</span>margin: 0 auto;<span style=3D"white-sp=
ace: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>&lt;/styl=
e&gt;</div><div><span style=3D"white-space:pre-wrap">	</span>&lt;/head&gt;<=
/div><div><span style=3D"white-space:pre-wrap">	</span>&lt;body&gt;</div><d=
iv><span style=3D"white-space:pre-wrap">		</span>&lt;div id=3D&quot;contain=
er&quot;&gt;</div><div><span style=3D"white-space:pre-wrap">			</span>&lt;i=
mg src=3D&quot;/?action=3Dstream&quot; /&gt;&lt;br&gt;</div><div><span styl=
e=3D"white-space:pre-wrap">			</span>&lt;script src=3D&quot;<a href=3D"http=
s://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js" target=3D"_bl=
ank">https://ajax.googleapis.c<wbr>om/ajax/libs/jquery/3.1.0/jque<wbr>ry.mi=
n.js</a>&quot;&gt;&lt;/script&gt;&lt;br /&gt;</div><div><span style=3D"whit=
e-space:pre-wrap">			</span>&lt;button onclick=3D&quot;servos.move(&#39;P&#=
39;, 10)&quot;&gt;Left&lt;/button&gt;</div><div><span style=3D"white-space:=
pre-wrap">			</span>&lt;button onclick=3D&quot;servos.move(&#39;P&#39;, -10=
)&quot;&gt;Right&lt;/button&gt;</div><div><span style=3D"white-space:pre-wr=
ap">			</span>&lt;button onclick=3D&quot;servos.move(&#39;T&#39;, -10)&quot=
;&gt;Down&lt;/button&gt;</div><div><span style=3D"white-space:pre-wrap">			=
</span>&lt;button onclick=3D&quot;servos.move(&#39;T&#39;, 10)&quot;&gt;Up&=
lt;/button&gt;</div><div><span style=3D"white-space:pre-wrap">		</span>&lt;=
/div&gt;</div><div><span style=3D"white-space:pre-wrap">	</span>&lt;/body&g=
t;</div><div><span style=3D"white-space:pre-wrap">	</span>&lt;script&gt;</d=
iv><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 mo=
veServos();</div><div><span style=3D"white-space:pre-wrap">		</span>});</di=
v><div><span style=3D"white-space:pre-wrap">		</span>function moveServos() =
{</div><div><span style=3D"white-space:pre-wrap">			</span>// Store some se=
ttings, adjust to suit</div><div><span style=3D"white-space:pre-wrap">			</=
span>var panPos =3D 70,=C2=A0</div><div><span 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</div><div><span style=3D"white-spa=
ce:pre-wrap">				</span>tiltMin =3D 45,=C2=A0</div><div><span style=3D"whit=
e-space:pre-wrap">				</span>panMax =3D 170,=C2=A0</div><div><span style=3D=
"white-space:pre-wrap">				</span>panMin =3D 20;</div><div><span style=3D"w=
hite-space:pre-wrap">			</span>return {</div><div><span style=3D"white-spac=
e:pre-wrap">				</span>move:function(servo, adjustment) {</div><div><span s=
tyle=3D"white-space:pre-wrap">					</span>var value;</div><div><span style=
=3D"white-space:pre-wrap">					</span>if(servo =3D=3D &#39;P&#39;) {</div><=
div><span style=3D"white-space:pre-wrap">						</span>if(!((panPos &gt;=3D =
panMax &amp;&amp; adjustment &gt; 0) || (panPos &lt;=3D panMin &amp;&amp; a=
djustment &lt; 0))) {</div><div><span style=3D"white-space:pre-wrap">						=
	</span>// Still within allowed range, &quot;schedule&quot; the movement</d=
iv><div><span style=3D"white-space:pre-wrap">							</span>panPos +=3D adju=
stment;</div><div><span style=3D"white-space:pre-wrap">						</span>}</div>=
<div><span style=3D"white-space:pre-wrap">						</span>value =3D panPos + &=
#39;P&#39;;</div><div><span style=3D"white-space:pre-wrap">					</span>}</d=
iv><div><span style=3D"white-space:pre-wrap">					</span>else if(servo =3D=
=3D &#39;T&#39;) {</div><div><span style=3D"white-space:pre-wrap">						</s=
pan>if(!((tiltPos &gt;=3D tiltMax &amp;&amp; adjustment &gt; 0) || (tiltPos=
 &lt;=3D tiltMin &amp;&amp; adjustment &lt; 0))) {</div><div><span style=3D=
"white-space:pre-wrap">							</span>// Still within allowed range, &quot;s=
chedule&quot; 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 style=3D"white-space:pre-wrap">			=
			</span>value =3D tiltPos + &#39;T&#39;;</div><div><span style=3D"white-s=
pace:pre-wrap">					</span>}</div><div><span style=3D"white-space:pre-wrap"=
>					</span>// Use AJAX to actually move the 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"_blank">http://192.168.1.122:81<wbr=
>/servos.rpy?value=3D</a>&#39; + value);</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>}</div><=
div><span style=3D"white-space:pre-wrap">	</span>&lt;/script&gt;</div><div>=
&lt;/html&gt;</div></div><div><br></div><div>*****</div><div>Twisted is sta=
rted: =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 fixed, I can start=
 documenting the entire system for everyone. Thank you!</div><span class=3D=
"m_-4865426837896638325HOEnZb"><font color=3D"#888888"><div><br clear=3D"al=
l"><div><div class=3D"m_-4865426837896638325m_-2487397493353888386gmail_sig=
nature"><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]">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>

--001a114d6b506409030557bfc98d--

--===============7901679351578790701==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVHdpc3RlZC13
ZWIgbWFpbGluZyBsaXN0ClR3aXN0ZWQtd2ViQHR3aXN0ZWRtYXRyaXguY29tCmh0dHBzOi8vdHdp
c3RlZG1hdHJpeC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3R3aXN0ZWQtd2ViCg==

--===============7901679351578790701==--