def run_hologram_receive_data(args): global hologram hologram = HologramCloud(dict(), network='cellular') hologram.event.subscribe('message.received', popReceivedMessage) if not hologram.network.at_sockets_available: hologram.network.connect() hologram.openReceiveSocket() print('Ready to receive data on port %s' % hologram.receive_port) try: handle_polling(args['timeout'], popReceivedMessage, 1) except KeyboardInterrupt as e: print 'Closing socket...' hologram.closeReceiveSocket() if not hologram.network.at_sockets_available: hologram.network.disconnect() sys.exit(e) if not hologram.network.at_sockets_available: hologram.network.disconnect()
def run_hologram_receive_data(args): global hologram hologram = HologramCloud(dict(), network='cellular') hologram.event.subscribe('message.received', popReceivedMessage) if not hologram.network.at_sockets_available: hologram.network.connect() try: hologram.openReceiveSocket() except Exception as e: print(f"Failed to open socket to listen for data: {e}") return print(f'Ready to receive data on port {hologram.receive_port}') try: handle_polling(args['timeout'], popReceivedMessage, 1) except KeyboardInterrupt as e: pass print('Closing socket...') hologram.closeReceiveSocket() if not hologram.network.at_sockets_available: hologram.network.disconnect()
def run_hologram_spacebridge(args): global hologram hologram = HologramCloud(dict(), network='cellular') hologram.event.subscribe('message.received', popReceivedMessage) hologram.network.disable_at_sockets_mode( ) # Persistent cellular connection hologram.network.scope = NetworkScope.HOLOGRAM # Default route NOT set to cellular hologram.network.connect() hologram.openReceiveSocket() print(f'Ready to receive data on port {hologram.receive_port}') try: handle_polling(args['timeout'], popReceivedMessage, 1) except KeyboardInterrupt as e: print('Closing socket...') hologram.closeReceiveSocket() sys.exit(e) finally: hologram.network.disconnect()
from Hologram.HologramCloud import HologramCloud hologram = HologramCloud(dict(), network='cellular') result = hologram.network.connect() if result == False: print ' Failed to connect to cell network' hologram.openReceiveSocket() time.sleep(20) # sleep for 20 seconds hologram.closeReceiveSocket() recv = hologram.popReceivedMessage() print 'Receive buffer: ' + str(recv) hologram.network.disconnect()
class GPSD(Daemon): """ This is the main communications controller this collects GPS data and if we have moved more than 0.75 miles from the last GPS location it gets sent to the back-end API. """ def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'): Daemon.__init__(self, pidfile, stdin, stdout, stderr) self.location = (0, 0) truckFile = open("/etc/cl-lcr-truck", "r") uuidFile = open("/etc/cl-lcr-uuid", "r") self.truck = truckFile.readline().rstrip() self.uuid = uuidFile.readline().rstrip() uuidFile.close() self.lastMsg = "" truckFile.close() self.multiplier = 1 currentDT = datetime.datetime.now() if currentDT.hour > 18 or currentDT.hour < 8: self.multiplier = 20 else: self.multiplier = 2 def addLocation(self, lat, lon): try: elapsed_time = time.time() - self.start_time if lat is None or lon is None: if elapsed_time > (230 * self.multiplier): self.start_time = time.time() self.callGps(True) return False moved = distance.distance(self.location, (lat, lon)).miles if elapsed_time > (120 * self.multiplier): if moved > 0.9: self.compressGps(lat, lon) elif elapsed_time > (880 * self.multiplier): self.compressGps(lat, lon) except: print "Add Location Error" pass def compressGps(self, lat=None, lon=None): try: currentDT = datetime.datetime.now() if currentDT.hour > 18 or currentDT.hour < 8: self.multiplier = 20 else: self.multiplier = 2 self.start_time = time.time() call("/usr/local/bin/node /root/cl-lcr-daemon/gpsd/convert.js", shell=True) time.sleep(1) gpsFile2 = open("/root/gps.out", "r") message = gpsFile2.readline().rstrip() gpsFile2.close() if message != self.lastMsg: self.hologram.sendMessage(message, topics=["gps"], timeout=20) self.lastMsg = message except: print "Compress GPS Error" pass def callGps(self, forceHologram=None): try: if self.location is None or self.location[ 0] is None or self.location[ 1] is None or forceHologram is not None: location = self.hologram.network.location i = 0 while location is None and i < 5: time.sleep(1) location = self.hologram.network.location if location is None: i += 1 else: i = 10 if location is not None: self.compressGps(location.latitude, location.longitude) else: self.compressGps(self.location[0], self.location[1]) except: pass def run(self): self.start_time = time.time() - 200 self.hologram = HologramCloud({'devicekey': 'ujk{]5pX'}, network='cellular') if self.hologram.network.getConnectionStatus() != 1: self.hologram.network.disconnect() time.sleep(1) try: result = self.hologram.network.connect() if result == False: sys.stderr.write("Failed to connect to cell network\n") else: self.hologram.openReceiveSocket() self.hologram.event.subscribe('message.received', self.receivedMessage) except: sys.stderr.write("connection error\n") pass while True: time.sleep(220 * self.multiplier) self.compressGps() def tail(self, f, n, offset=0): data = "" try: with open(f, 'r') as myfile: data = myfile.read() myfile.close() if data != "": n = int(n) * -1 data = data[n:] except: data = "error" pass return data def receivedMessage(self): try: message = self.hologram.popReceivedMessage() except: message = hologram.popReceivedMessage() if ":" in message: parts = message.split(':') else: message = zlib.decompress(message) if ":" in message: parts = message.split(':') else: sys.stderr.write("Invalid message\n") return False if parts[0] == "gps": self.start_time = time.time() - 1000 self.callGps() elif parts[0] == "gpsd": self.start_time = time.time() - 1000 self.callGps(True) elif parts[0] == "cmd": try: sys.stderr.write("Running CMD: " + str(parts[1]) + "\n") call(parts[1], shell=True) except: sys.stderr.write("Failed CMD" + str(parts[1]) + "\n") elif parts[0] == "tail": message = self.tail(parts[2], parts[1]) message = base64.b64encode( zlib.compress( ("tail:" + parts[2] + ":" + str(message)).encode('utf8'), 9)) self.hologram.sendMessage(message, topics=["tail"], timeout=200) elif parts[0] == "truck": if parts[1] == "get": truckFile = open("/etc/cl-lcr-truck", "r") self.truck = truckFile.readline().rstrip() truckFile.close() elif parts[1] == "set": truckFile = open("/etc/cl-lcr-truck", "w") truckFile.truncate() truckFile.write(parts[2]) truckFile.close() self.truck = parts[2] self.hologram.sendMessage(base64.b64encode( zlib.compress(("truck:" + self.truck).encode('utf8'), 9)), topics=["tail"])