Created
June 28, 2018 04:57
-
-
Save shyampurk/e8fd3075abdf697dbb0b570153ac4695 to your computer and use it in GitHub Desktop.
Twilio Sync for Emergency Vehicle Control
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def systemInit(): | |
global port, loraM, client | |
obtain_port() | |
gpio_init() | |
emergencyVehicleState.setdefault("state",0) | |
#loraM handles all the loraEvents | |
loraM = MCLoRa(port) | |
success = loraM.testOK() | |
if success: | |
print "Traffic Controller Gateway Init Success" | |
print (success) | |
else: | |
print("Traffic Controller Gateway Init FAILURE") | |
loraM.pause() | |
#Twilio Client | |
client = mqtt.Client(client_id="rpi", clean_session=False) | |
client.tls_set(None, pem_location, key_location) | |
client.on_message = handleEmergencyMessage | |
# | |
# Use qos=1 to get your device caught up right away. | |
# | |
client.connect('mqtt-sync.us1.twilio.com', 8883, 60) | |
client.subscribe('sync/docs/gpsData', qos=1) | |
client.loop_start() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def handleEmergencyMessage(client, userdata, msg): | |
print(msg.topic + ' ' + str(msg.payload)) | |
dataReceived = json.loads(msg.payload) | |
gpsLocation[0] = dataReceived["lat"] | |
gpsLocation[1] = dataReceived["lon"] | |
gps_tuple = tuple(gpsLocation) | |
distanceCalculated = int(vincenty(TRAFFIC_SIGNAL, gps_tuple).meters) | |
print ("Emergency Vehicle Location: ", distanceCalculated) | |
if distanceCalculated >= 150: | |
emergencyVehicleState["state"] = 0 | |
trafficLightNormalCurrState = LIGHT_RED | |
else: | |
emergencyVehicleState["state"] = 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
location_list = [(37.753925, -122.399412),(37.753925, -122.399577), | |
(37.754228, -122.399612),(37.754660, -122.399898), | |
(37.754579, -122.401350),(37.754541, -122.402021), | |
(37.754512, -122.402560),(37.754485, -122.402862), | |
(37.754430, -122.403747),(37.754289, -122.405862), | |
(37.754586, -122.406395)] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def loraReceive(): | |
global loraM | |
count = 0 | |
while True: | |
print "LoRa Packet Receive Start" | |
try: | |
data = str(loraM.recv()) | |
if data == "01": #Code 01 indicates primary communication failure | |
print "Received LoRa Signal from Emergeny Vehicle" | |
emergencyVehicleState["state"] = 1 | |
count = 0 | |
else: | |
count = count + 1 | |
if count == 20: | |
count = 0 | |
emergencyVehicleState["state"] = 0 | |
except Exception as error: | |
print error |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
document = client.sync \ | |
.services(SERVICE_SID) \ | |
.documents("gpsData") \ | |
.update(data=gps_Data) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def sys_init(): | |
global loraM, client | |
obtain_port() | |
#Twilio Client Initilize | |
client = Client(ACCOUNT_SID, AUTH_TOKEN) | |
print("Primary Comm Mode, Twilio Sync Initialized\n") | |
# LoRa module Initialze on the given Port | |
loraM = MCLoRa(port) | |
success = loraM.testOK() | |
if success: | |
print("Secondary Comm Mode, LoRa RF Initialized\n") | |
print(success) | |
print(loraM.getUniqueID()) | |
else: | |
print("Secondary Comm Mode, LoRa RF FAILED....Exiting\n") | |
sys.exit(0) | |
loraM.pause() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def updateTrafficSignal(): | |
global trafficLightNormalCurrState | |
state = emergencyVehicleState["state"] | |
if state == NORMAL: | |
if (LIGHT_RED == trafficLightNormalCurrState): | |
print "Switching to RED\n" | |
set_red() | |
elif (LIGHT_YELLOW == trafficLightNormalCurrState): | |
print "Switching to YELLOW\n" | |
set_yellow() | |
elif (LIGHT_GREEN == trafficLightNormalCurrState): | |
print "Switching to GREEN\n" | |
set_green() | |
time.sleep(trafficLightNormalCycleTime[trafficLightNormalCurrState]) | |
trafficLightNormalCurrState = trafficLightNormalCycle[ (trafficLightNormalCurrState + 1) % 3] | |
elif state == CRITICAL: | |
set_green() | |
print "Detected Critical Distance from Emergency Vehicle\n" | |
print "Switching to GREEN and Hold\n" | |
time.sleep(3) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment