Skip to content

Commit

Permalink
add data poster
Browse files Browse the repository at this point in the history
  • Loading branch information
wilsonc101 committed Jul 17, 2015
1 parent c7af42c commit 0f1ae38
Show file tree
Hide file tree
Showing 40 changed files with 540 additions and 54 deletions.
4 changes: 1 addition & 3 deletions adaptors/data-collector/class_handlers.py
@@ -1,11 +1,9 @@
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
# from StringIO import StringIO

import ConfigParser
import time



# from StringIO import StringIO
class http_handler(BaseHTTPRequestHandler):
import func_actions as actions

Expand Down
34 changes: 18 additions & 16 deletions adaptors/data-collector/func_actions.py
@@ -1,8 +1,8 @@
import pymongo
from datetime import datetime
import json
import isodate

from datetime import datetime
import isodate
import pymongo


MONGO_HOST = "localhost"
Expand Down Expand Up @@ -108,18 +108,20 @@ def getMap(query=None, handler=None):
vehicle_data = _mongo_db[vehicle_id].find({"timestamp" : {"$gte" : isodatetime_from, "$lte" : isodatetime_to}}).sort("timestamp", 1)

for entry in vehicle_data:
# Build Polgon entries
response_section = "new google.maps.LatLng(" + str(entry['vehicle_data']['lat']) + "," + str(entry['vehicle_data']['long']) + "),\n"
polygon_cords = polygon_cords + response_section

# Build marker entries
response_section = "var position = new google.maps.LatLng(" + str(entry['vehicle_data']['lat']) + "," + str(entry['vehicle_data']['long']) + ");\n\
marker = new google.maps.Marker({position: position,\n\
map: map,\n\
title:'" + str(entry['timestamp']) + "',\n\
icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png'});\n\
bounds.extend(position)\n"
markers = markers + response_section
# Only add point if postion data is present
if 'lat' in entry['vehicle_data'] and 'long' in entry['vehicle_data']:
# Build Polgon entries
response_section = "new google.maps.LatLng(" + str(entry['vehicle_data']['lat']) + "," + str(entry['vehicle_data']['long']) + "),\n"
polygon_cords = polygon_cords + response_section

# Build marker entries
response_section = "var position = new google.maps.LatLng(" + str(entry['vehicle_data']['lat']) + "," + str(entry['vehicle_data']['long']) + ");\n\
marker = new google.maps.Marker({position: position,\n\
map: map,\n\
title:'" + str(entry['timestamp']) + "',\n\
icon: 'http://maps.google.com/mapfiles/ms/icons/blue-dot.png'});\n\
bounds.extend(position)\n"
markers = markers + response_section

# Section closures
polygon_cords = polygon_cords + "];\n"
Expand Down Expand Up @@ -171,6 +173,6 @@ def _mongoConnect():
return(mongo_client, mongo_db)

except:
assert False, "Error: Unknown error occured while connecting to MongoDB"
assert False, "Error: Unknown error occurred while connecting to MongoDB"

_mongo_client, _mongo_db = _mongoConnect()
102 changes: 102 additions & 0 deletions adaptors/data-poster/class_rmq.py
@@ -0,0 +1,102 @@
import pika


class rmqClientReader():
def __init__(self, host, port, log=None):
self.log = log
self.pipe = None
try:
# Establish connection to broker
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host=host,port=port,
connection_attempts=100,retry_delay=5))
self.channel = self.connection.channel()

self.connected = True
if self.log != None: self.log.info("Connected to broker.")

except:
if self.log != None: self.log.error("Failed to connect to reader queue.")
self.connected = False


def subscribe(self, exchange, topic):
try:
# Declare exchange, create local queue and bind queue to exchange with routing key
self.channel.exchange_declare(exchange=exchange, type='topic')

self.result = self.channel.queue_declare(exclusive=True)
self.dynamic_queue_name = self.result.method.queue

self.channel.queue_bind(exchange=exchange, queue=self.dynamic_queue_name, routing_key=topic)

self.channel.basic_consume(self.on_message, queue=self.dynamic_queue_name, no_ack=True)
return(True)

except:
if self.log != None: self.log.error("Failed to subscribe to" + str(topic))
return(False)


def on_message(self, ch, method, properties, body):
# On message, emit data to multiprocessing queue
self.pipe.send(body)


def run(self, pipe):
try:
# Set multiprocessing queue as class global and begin consuming
self.pipe = pipe
self.channel.start_consuming()
return(True)
except:
return(False)
if self.log != None:
self.log.error("Connection to broker appears to have dropped.")
else:
print "ERROR: Connection to broker appears to have dropped."



class rmqClientWriter():
def __init__(self, host, port, log=None):
self.log = log
self.exchange = None
try:
# Establish connection to broker
self.connection = pika.BlockingConnection(pika.ConnectionParameters(host, port))
self.channel = self.connection.channel()
self.connected = True

if self.log != None: self.log.info("Connected to broker.")

except:
if self.log != None: self.log.error("Failed to connect to reader queue.")
self.connected = False



def declareExchange(self, exchange):
try:
self.exchange = exchange
self.channel.exchange_declare(exchange=self.exchange, type='topic')
return(True)

except:
return(False)


def publish(self, topic, data):
try:
self.channel.basic_publish(exchange=self.exchange, routing_key=topic, body=data)
if self.log != None: self.log.debug("Writing data to topic exchange")
return(True)

except:
if self.log != None:
self.log.warning("Failed to send message to topic " + str(topic))
else:
print("Failed to send message to topic " + str(topic))
return(False)



25 changes: 25 additions & 0 deletions adaptors/data-poster/class_rover.py
@@ -0,0 +1,25 @@
class piRoverControls():
def __init__(self):
self.throttlePosition = None
self.directionPosition = None
self.brakeState = None
self.vehicleLightState = None
self.cameraPanPosition = None
self.cameraTiltPosition = None
self.cameraLightState = None


class piRoverVehicle():
def __init__(self):
self.vehicleWifi = None
self.vehicleBatteryA = None
self.vehicleBatteryB = None
self.environmentTemperature = None
self.environmentPressure = None
self.environmentHumidity = None
self.gpsLatitude = None
self.gpsLongitude = None
self.gpsAltitude = None
self.gpsSpeed = None
self.accelLR = None
self.accelRF = None

0 comments on commit 0f1ae38

Please sign in to comment.