[ create a new paste ] login | about

Link: http://codepad.org/vsk2JB46    [ raw code | fork ]

Python, pasted on Oct 3:
from __future__ import print_function
import os
import time
import can
import os.path
import bottle
from threading import Thread
from wsgiref.simple_server import make_server
from ws4py.websocket import WebSocket
from ws4py.server.wsgirefserver import WSGIServer, WebSocketWSGIRequestHandler
from ws4py.server.wsgiutils import WebSocketWSGIApplication
from random import randrange
import RPi.GPIO as GPIO



# Bring up can0 interface at 500kbps
os.system("sudo /sbin/ip link set can0 up type can bitrate 500000")


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False) 
GPIO.setup(4, GPIO.OUT)
GPIO.setup(4, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(17, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(27, GPIO.OUT)
GPIO.setup(27, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(22, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(5, GPIO.OUT)
GPIO.setup(5, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(6, GPIO.OUT)
GPIO.setup(6, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(13, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(19, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(26, GPIO.OUT)
GPIO.setup(26, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(24, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(23, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(12, GPIO.OUT)
GPIO.setup(12, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(16, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(20, GPIO.OUT)
GPIO.setup(20, GPIO.OUT, initial=GPIO.LOW)
GPIO.setup(21, GPIO.OUT)
GPIO.setup(21, GPIO.OUT, initial=GPIO.LOW)

DEBUG = 1

#-------------------------------------------------------------------

def printD(message):
   if DEBUG:
       print(message)

def getUptime():
   with open('/proc/uptime', 'r') as f:
       uptime_seconds = float(f.readline().split()[0])
       uptime = str(timedelta(seconds = uptime_seconds))
       return uptime

def getPiRAM():
   with open('/proc/meminfo', 'r') as mem:
       tmp = 0
       for i in mem:
           sline = i.split()
           if str(sline[0]) == 'MemTotal:':
               total = int(sline[1])
           elif str(sline[0]) in ('MemFree:', 'Buffers:', 'Cached:'): 
               tmp += int(sline[1])
       free = tmp
       used = int(total) - int(free)
       usedPerc = (used * 100) / total
       return usedPerc

def getPiTemperature():
   with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
       content = f.read().splitlines()
       return float(content[0]) / 1000.0

#-------------------------------------------------------------------

### Parse request from webif
#required format-> command:value
def WebRequestHandler(requestlist):
   returnlist = ""
   for request in requestlist:
       request =  request.strip()
       requestsplit = request.split(':')
       requestsplit.append("dummy")
       command = requestsplit[0]
       value = requestsplit[1]
       if value == "dummy":
           value = "0"

       if command == "localping":
           returnlist += "\n localping:ok"
       elif command == "LoadAVRnum":
           returnlist += "\n LoadAVRnum:"+open("/proc/loadavg").readline().split(" ")[:3][0]
       elif command == "Uptime":
           returnlist += "\n Uptime:"+str(getUptime()).split(".")[0]
       elif command == "RAMperc":
           returnlist += "\n RAMperc:"+str(getPiRAM())
           #returnlist += "\n RAMperc:"+str(psutil.phymem_usage().percent)
       elif command == "PiTEMP":
           returnlist += "\n PiTEMP:"+str(getPiTemperature())
       elif command == "System.Power":
           if value == "off":
               subprocess.Popen(["shutdown","-h","now"])
               return "System.Power:ok"
           elif value == "reboot":
               subprocess.Popen(["shutdown","-r","now"])
               return "System.Power:ok"
       elif command == "gpio41":
                   GPIO.output(4,1)
                   returnlist += "\n gpio4:1"
       elif command == "gpio40":
                   GPIO.output(4,0)
                   returnlist += "\n gpio4:0"
                    
       elif command == "gpio171":
                   GPIO.output(17,1)
                   returnlist += "\n gpio17:1"
       elif command == "gpio170":
                   GPIO.output(17,0)
                   returnlist += "\n gpio17:0"
                    
       elif command == "gpio271":
                   GPIO.output(27,1)
                   returnlist += "\n gpio27:1"
       elif command == "gpio270":
                   GPIO.output(27,0)
                   returnlist += "\n gpio27:0"
                    
       elif command == "gpio221":
                   GPIO.output(22,1)
                   returnlist += "\n gpio22:1"
       elif command == "gpio220":
                   GPIO.output(22,0)
                   returnlist += "\n gpio22:0"
                    
       elif command == "gpio51":
                   GPIO.output(5,1)
                   returnlist += "\n gpio5:1"
       elif command == "gpio50":
                   GPIO.output(5,0)
                   returnlist += "\n gpio5:0"

       elif command == "gpio61":
                   GPIO.output(6,1)
                   returnlist += "\n gpio6:1"
       elif command == "gpio60":
                   GPIO.output(6,0)
                   returnlist += "\n gpio6:0"
                    
       elif command == "gpio131":
                   GPIO.output(13,1)
                   returnlist += "\n gpio13:1"
       elif command == "gpio130":
                   GPIO.output(13,0)
                   returnlist += "\n gpio13:0"
                    
       elif command == "gpio191":
                   GPIO.output(19,1)
                   returnlist += "\n gpio19:1"
       elif command == "gpio190":
                   GPIO.output(19,0)
                   returnlist += "\n gpio19:0"
                    
       elif command == "gpio261":
                   GPIO.output(26,1)
                   returnlist += "\n gpio26:1"
       elif command == "gpio260":
                   GPIO.output(26,0)
                   returnlist += "\n gpio26:0"
                    
       elif command == "gpio181":
                   GPIO.output(18,1)
                   returnlist += "\n gpio18:1"
       elif command == "gpio180":
                   GPIO.output(18,0)
                   returnlist += "\n gpio18:0"

       elif command == "gpio231":
                   GPIO.output(23,1)
                   returnlist += "\n gpio23:1"
       elif command == "gpio230":
                   GPIO.output(23,0)
                   returnlist += "\n gpio23:0"
                    
       elif command == "gpio241":
                   GPIO.output(24,1)
                   returnlist += "\n gpio24:1"
       elif command == "gpio240":
                   GPIO.output(24,0)
                   returnlist += "\n gpio24:0"
                    
       elif command == "gpio251":
                   GPIO.output(25,1)
                   returnlist += "\n gpio25:1"
       elif command == "gpio250":
                   GPIO.output(25,0)
                   returnlist += "\n gpio25:0"
                    
       elif command == "gpio121":
                   GPIO.output(12,1)
                   returnlist += "\n gpio12:1"
       elif command == "gpio120":
                   GPIO.output(12,0)
                   returnlist += "\n gpio12:0"
                    
       elif command == "gpio161":
                   GPIO.output(16,1)
                   returnlist += "\n gpio16:1"
       elif command == "gpio160":
                   GPIO.output(16,0)
                   returnlist += "\n gpio16:0"

       elif command == "gpio201":
                   GPIO.output(20,1)
                   returnlist += "\n gpio20:1"
       elif command == "gpio200":
                   GPIO.output(20,0)
                   returnlist += "\n gpio20:0"
                    

       elif command == "gpio211":
                   GPIO.output(21,1)
                   returnlist += "\n gpio21:1"
       elif command == "gpio210":
                   GPIO.output(21,0)
                   returnlist += "\n gpio21:0"
       elif command == "canCOMM":
                   bus = can.interface.Bus(channel='can0', bustype='socketcan_native')
                   msg = can.Message(arbitration_id=0x512,data=[0x40,0x18,0x00, 0x00, 0x00, 0x00,0x00,0x00],extended_id=False)
                   bus.send(msg)
                   print(msg)
       
       elif command == "can":
                   cansplit=value.split("#")
                   canid= "0x" + cansplit[0]
                   canbyte1="0x" + cansplit[1]
                   canbyte2="0x" + cansplit[2]
                   canbyte3="0x" + cansplit[3]
                   canbyte4="0x" + cansplit[4]
                   canbyte5="0x" + cansplit[5]
                   canbyte6="0x" + cansplit[6]
                   canbyte7="0x" + cansplit[7]
                   canbyte8="0x" + cansplit[8]
                   print(canid)
                   print(canbyte1)
                   print(canbyte2)
                   print(canbyte3)
                   print(canbyte4)
                   print(canbyte5)
                   print(canbyte6)
                   print(canbyte7)
                   print(canbyte8)
                   
                   msg=can.Message(arbitration_id=0x512,
                                   data=[0x40,0x18,0,0,0,0,0,0],
                                   extended_id=False)
                   
                   bus = can.interface.Bus(channel='can0', bustype='socketcan_native')
                   bus.send(msg)
                   print(cansplit[0])
                   print(msg)
       
     
                   returnlist += "\n Can Nachricht " + str(canid) +"#" + str(cansplit[1]) +     str(cansplit[2]) + str(cansplit[3]) + str(cansplit[4]) + str(cansplit[5]) + str(cansplit[6]) + str(cansplit[7]) + str(cansplit[8]) + "    " + "erfolgreich gesendet"
                   
                   
   return returnlist

class myWebSocketHandler(WebSocket):
   connections = []
   def opened(self):
       printD("New WebSocket client connected")
       self.send("You are connected")
       self.connections.append(self)
   def received_message(self, message):
       msg = message.data.decode()
       printD("Message from WebIf: >>>"+msg+"<<<")
       requestlist = msg.splitlines() 
       self.send(WebRequestHandler(requestlist))
   def closed(self, code, reason):
       printD("WebSocket closed %s %s" % (code, reason))
       self.connections.remove(self)

#-------------------------------------------------------------------

@bottle.route('/')
def MainHandler():
   values = {
               'test': randrange(1, 1000),
               'debug': 1,
            }
   return bottle.template('index.html', values)

@bottle.route('/static/<filename>')
def StaticHandler(filename):
   if filename.endswith(".css"):
       bottle.response.content_type = 'text/css'
   elif filename.endswith(".js"):
       bottle.response.content_type = 'text/javascript'
   elif filename.endswith(".png"):
       bottle.response.content_type = 'image/png'   
   return bottle.static_file(filename, root=os.path.join(os.path.dirname(__file__), 'static'))


try:
   websocket_server = make_server(
       '', 7070,
       server_class=WSGIServer,
       handler_class=WebSocketWSGIRequestHandler,
       app=WebSocketWSGIApplication(handler_cls=myWebSocketHandler)
   )
   websocket_server.initialize_websockets_manager()
   # Start Child Thread for WebSocket
   print('Starting Child Thread for WebSocket_Server')
   ws = Thread(target=websocket_server.serve_forever)
   ws.setDaemon(True)
   ws.start()

   #bottle.debug(True) #sollte spaeter ausgeschaltet werden!
   bottle.TEMPLATE_PATH.insert(0, os.path.join(os.path.dirname(__file__), 'templates'))
   bottle.run(host='0.0.0.0', port='8080', debug=True, quiet=False)
except KeyboardInterrupt:
   pass
finally:
   print('Shutting down Servers')
   ws.join(1)
   try:
       ws.shutdown()
   except:
       pass


Create a new paste based on this one


Comments: