Skip to content

Instantly share code, notes, and snippets.

@shyampurk
Created June 28, 2018 04:57
Show Gist options
  • Save shyampurk/e8fd3075abdf697dbb0b570153ac4695 to your computer and use it in GitHub Desktop.
Save shyampurk/e8fd3075abdf697dbb0b570153ac4695 to your computer and use it in GitHub Desktop.
Twilio Sync for Emergency Vehicle Control
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()
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
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)]
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
document = client.sync \
.services(SERVICE_SID) \
.documents("gpsData") \
.update(data=gps_Data)
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()
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