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 <deve@speedprint.com> 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/servos.rpy?value=70P".

This is what I get with it:
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 <deve@speedprint.com> 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 irender_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 <donal.mcmullan@gmail.com> 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 <deve@speedprint.com> 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>
<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
},
}
}
</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
Twisted-web@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web



_______________________________________________
Twisted-web mailing list
Twisted-web@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web




_______________________________________________
Twisted-web mailing list
Twisted-web@twistedmatrix.com
https://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web