155 lines
5.8 KiB
Python
155 lines
5.8 KiB
Python
__author__ = 'asc'
|
|
logger
|
|
def log(self, message, message_type="text"):
|
|
if message_type == "text":
|
|
print ("%s - Log Message: %s"% (str(datetime.datetime.now()), message))
|
|
elif message_type == "image":
|
|
image = message
|
|
if image:
|
|
filename = datetime.datetime.now().strftime("Image %Y%m%d-%H%M%S.jpg")
|
|
with open(os.path.join(self.photo_path, filename), 'wb') as f:
|
|
f.write(message)
|
|
return 'success'
|
|
elif message_type == "data":
|
|
message["sent"] = str(datetime.datetime.now())
|
|
file=self.log_path
|
|
|
|
header = add_keys_if_necessary(file, message)
|
|
keys = header
|
|
|
|
log=open(file, 'a')
|
|
writer = csv.DictWriter(log, keys, extrasaction="ignore")
|
|
writer.writerow(message)
|
|
log.close()
|
|
else:
|
|
raise Exception
|
|
|
|
|
|
def _send_data(self, message, message_type):
|
|
if message_type == "ping":
|
|
#TODO send text
|
|
contentType='text/xml'
|
|
|
|
if self.use_lan:
|
|
logger.info("Sending ping using LAN")
|
|
req = request.Request("{0}:{1}/{2}".format(self.url, self.server_port, self.ping_path))
|
|
req.add_header('Content-Type', contentType)
|
|
response = request.urlopen(req,json.dumps(message).encode())
|
|
response = response.read()
|
|
pass
|
|
|
|
elif not self.use_lan:
|
|
logger.info("Sending ping using modem")
|
|
# logger.debug("attaching GPRS")
|
|
#
|
|
# if not self.inet.attachGPRS("wholesale", "", "", 1):
|
|
# logger.error("error attaching GPRS")
|
|
# return False
|
|
|
|
logger.debug("posting")
|
|
if not self.inet.httpPOST(
|
|
self.url,
|
|
self.server_port,
|
|
"/{}".format(self.ping_path),
|
|
json.dumps(message),
|
|
contentType=contentType
|
|
):
|
|
logger.error("error making HTTP post: {0}".format(self.inet.errorText))
|
|
return False
|
|
|
|
response=self.inet.httpResponse
|
|
|
|
if response is not None:
|
|
response = str(self.inet.httpResponse).replace("\n\r", "\n")
|
|
else:
|
|
response = ("empty response")
|
|
|
|
|
|
elif message_type == "image":
|
|
response=None
|
|
m = MultipartEncoder(fields={'image': ('image', message, 'image/jpeg')})
|
|
|
|
if self.use_lan:
|
|
logger.info ("Sending image using LAN")
|
|
response = requests.post("{0}:{1}/{2}".format(self.url, self.server_port, self.image_path), data=m.read(), headers={'Content-Type': m.content_type})
|
|
pass
|
|
|
|
elif not self.use_lan:
|
|
logger.info ("Sending image using modem")
|
|
# logger.debug("attaching GPRS")
|
|
# if not self.inet.attachGPRS("wholesale", "", "", 1):
|
|
# logger.error("error attaching GPRS")
|
|
# return False
|
|
|
|
logger.debug("ip = {0}".format(self.inet.ip))
|
|
|
|
logger.debug("making HTTP POST request")
|
|
|
|
if not self.inet.httpPOST(
|
|
self.url,
|
|
self.server_port,
|
|
"/{}".format(self.image_path),
|
|
m.to_string(),
|
|
contentType=m.content_type
|
|
):
|
|
logger.error("error making HTTP POST: {0}".format(self.inet.errorText))
|
|
return False
|
|
|
|
if self.inet.httpResponse is not None:
|
|
response = str(self.inet.httpResponse).replace("\n\r", "\n")
|
|
else:
|
|
response = "empty response"
|
|
|
|
elif message_type == "data":
|
|
contentType="application/json"
|
|
message["sent"] = str(datetime.datetime.now())
|
|
|
|
if self.use_lan:
|
|
logger.info("Sending data using LAN")
|
|
req = request.Request("{0}:{1}/{2}".format(self.url, self.server_port, self.data_path))
|
|
req.add_header('Content-Type', contentType)
|
|
response = request.urlopen(req,json.dumps(message).encode())
|
|
response = response.read()
|
|
pass
|
|
|
|
elif not self.use_lan:
|
|
logger.info("Sending data using modem")
|
|
|
|
logger.debug("posting")
|
|
|
|
if not self.inet.httpPOST(
|
|
self.url,
|
|
self.server_port,
|
|
"/{}".format(self.data_path),
|
|
json.dumps(message),
|
|
contentType=contentType
|
|
):
|
|
logger.error("error making HTTP POST: {0}".format(self.inet.errorText))
|
|
return False
|
|
|
|
if self.inet.httpResponse is not None:
|
|
response = str(self.inet.httpResponse).replace("\n\r", "\n")
|
|
else:
|
|
response = ("empty response")
|
|
|
|
def create_transpondence(self):
|
|
if self._transpondence is None:
|
|
self._transpondence={}
|
|
|
|
self._transpondence['mt']=self.mt.now()
|
|
|
|
|
|
def add_to_transpondence(self, data, info_type="data"):
|
|
if self._transpondence.get(info_type) is not None:
|
|
if type(self._transpondence.get(info_type)) is list:
|
|
self._transpondence[info_type].append(data)
|
|
else:
|
|
self._transpondence[info_type] = [self._transpondence[info_type]]
|
|
self._transpondence[info_type].append(data)
|
|
|
|
else:
|
|
self._transpondence[info_type]=[data]
|
|
|
|
|
|
self._transpondence
|