├── README.md ├── test.py ├── servocontrol └── servocontrol.py └── alexaserver └── alexaserver.py /README.md: -------------------------------------------------------------------------------- 1 | # smarthome 2 | -------------------------------------------------------------------------------- /test.py: -------------------------------------------------------------------------------- 1 | def hello(): 2 | print "hello" 3 | -------------------------------------------------------------------------------- /servocontrol/servocontrol.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import RPi.GPIO as GPIO 3 | import time 4 | import sys, getopt 5 | 6 | 7 | 8 | def rotate_servo(degree): 9 | servoPIN = 17 10 | min = 2.5 11 | max = 12.6 12 | GPIO.setmode(GPIO.BCM) 13 | GPIO.setup(servoPIN, GPIO.OUT) 14 | 15 | p = GPIO.PWM(servoPIN, 50) # GPIO 17 als PWM mit 50Hz 16 | p.start(2.5) 17 | range = max - min 18 | pos = min + (range / 180 * degree) 19 | print "pos", pos 20 | 21 | p.ChangeDutyCycle(pos) 22 | time.sleep(0.5) 23 | p.stop() 24 | GPIO.cleanup() 25 | 26 | def main(argv): 27 | if len(argv) == 1: 28 | degree = int(argv[0]) 29 | if degree > 180 or degree < 0: 30 | print "Degree must be between 0 and 180" 31 | return 32 | 33 | print "degree", degree 34 | 35 | rotate_servo(degree) 36 | 37 | print "Rotate to " + argv[0] + "degree" 38 | 39 | else: 40 | print "wrong paramter length" 41 | 42 | print argv 43 | 44 | if __name__ == "__main__": 45 | main(sys.argv[1:]) -------------------------------------------------------------------------------- /alexaserver/alexaserver.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | 3 | from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer 4 | import os 5 | import json 6 | import subprocess 7 | 8 | 9 | #Create custom HTTPRequestHandler class 10 | class AlexaTTPRequestHandler(BaseHTTPRequestHandler): 11 | 12 | #handle GET command 13 | def do_POST(self): 14 | return self.do_GET() 15 | 16 | #handle GET command 17 | def do_GET(self): 18 | 19 | try: 20 | #send code 200 response 21 | self.send_response(200) 22 | 23 | #send header first 24 | self.send_header('Content-type','application/json') 25 | self.end_headers() 26 | 27 | import urlparse 28 | params = urlparse.parse_qs(urlparse.urlparse(self.path).query).get('data')[0] 29 | params = json.loads(params) 30 | print params 31 | 32 | request = params['request'] 33 | type = request['type'] 34 | 35 | if type == 'IntentRequest': 36 | intent = request['intent'] 37 | name = intent['name'] 38 | if name == 'dimm': 39 | intensity = intent['slots']['intensity']['value'] 40 | i_val = 0 41 | 42 | if intensity == "dunkel": 43 | i_val = 45 44 | elif intensity == "sehr dunkel": 45 | i_val = 0 46 | elif intensity == "mittel": 47 | i_val = 90 48 | elif intensity == "hell": 49 | i_val = 135 50 | elif intensity == "sehr hell": 51 | i_val = 180 52 | 53 | subprocess.Popen(["python","/share/servocontrol/servocontrol.py", str(i_val)], shell=False) 54 | 55 | self.wfile.write("{ \"version\": \"1.0\", \"response\": { \"outputSpeech\": { \"type\": \"PlainText\", \"text\": \"Ok, ich habe den Strahler auf " + intensity + " gestellt.\"} }}") 56 | else: 57 | self.wfile.write("{ \"version\": \"1.0\", \"response\": { \"outputSpeech\": { \"type\": \"PlainText\", \"text\": \"Diesen Befehl kenne ich nicht.\"} }}") 58 | 59 | 60 | #send file content to client 61 | else: 62 | self.wfile.write("{ \"version\": \"1.0\", \"response\": { \"outputSpeech\": { \"type\": \"PlainText\", \"text\": \"Ja mein Gebieter!\"} }}") 63 | 64 | return 65 | 66 | except Exception as e: 67 | print e 68 | self.wfile.write("{ \"version\": \"1.0\", \"response\": { \"outputSpeech\": { \"type\": \"PlainText\", \"text\": \"Den Befehl konnte ich nicht verstehen.\"} }}") 69 | 70 | def run(): 71 | print('http server is starting...') 72 | 73 | #ip and port of servr 74 | #by default http server port is 80 75 | server_address = ('0.0.0.0', 8000) 76 | httpd = HTTPServer(server_address, AlexaTTPRequestHandler) 77 | print('http server is running...') 78 | httpd.serve_forever() 79 | 80 | if __name__ == '__main__': 81 | run() 82 | --------------------------------------------------------------------------------