__author__ = 'asc' import os import datetime from urllib import request, parse import requests import json from cell_connection import initializeUartPort, baseOperations, initializeLogs import logging # logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) LOGGER_LEVEL=logging.DEBUG CONSOLE_LOGGER_LEVEL=logging.DEBUG SCRIPTDIR = os.path.dirname(os.path.abspath(__file__)) class Datalogger_Debug (): def __init__(self, path=SCRIPTDIR): pass def log(self, message, type="text"): if type == "text": print ("%s - Log Message: %s"% (str(datetime.datetime.now()), message)) elif type == "image": print ("%s - Log Image: %s"% (str(datetime.datetime.now()), message)) elif type == "data": print ("%s - Log Message: %s"% (str(datetime.datetime.now()), message)) else: raise Exception class Datareporter_Debug (): def __init__(self, path=SCRIPTDIR): #TODO communication pass @property def status (self): return (0, "Data reporter functioning properly") def send(self, message, type="text"): if type == "text": #TODO send text print ("%s - Sent Message: %s"% (str(datetime.datetime.now()), message)) elif type == "image": #todo send image print ("%s - Sent Image: %s"% (str(datetime.datetime.now()), message)) else: #todo error handling raise Exception class Datareporter_Debug2 (): #Debug 2 sends to server def __init__(self, path=SCRIPTDIR, report_url = "http://10.0.1.4:5010/report", report_image_url = "http://10.0.1.4:5010/photo", com_port_name = "/dev/ttyAMA0", baud_rate = "9600"): self.report_url = report_url self.report_image_url = report_image_url self.com_port_name = com_port_name, self.baud_rate = baud_rate pass @property def status (self): #TODO status check try: check = json.loads(request.urlopen(self.report_url).read().decode()).get('status') pass if not check: return (0, "Data reporter functioning properly") else: return (1, check) except Exception as e: return (1, "Data reporter error: %s" % e) def send(self, message, type="text"): try: if type == "text": #TODO send text print ("%s - Sent Message: %s"% (str(datetime.datetime.now()), message)) elif type == "image": #todo send image response = requests.post(self.report_url, files={'file': message}) print ("%s - Sent Image: %s"% (str(datetime.datetime.now()), message)) elif type == "data": #add date to message message['sent']=str(datetime.datetime.now()) req = request.Request(self.report_image_url) req.add_header('Content-Type', 'application/json') response = request.urlopen(req,json.dumps(message).encode()) the_page = response.read() return 0 except Exception as e: #todo error handling pass class Datareporter_Debug3 (): #Debug 2 sends from cell to server from lib.sim900.inetgsm import SimInetGSM def __init__(self, path=SCRIPTDIR, report_url = "http://10.0.1.4:5010/report", report_image_url = "http://10.0.1.4:5010/upload-file", com_port_name = "/dev/ttyAMA0", baud_rate = "9600", content_type = None): #TODO communication self.report_url = report_url self.report_image_url = report_image_url self.com_port_name = com_port_name self.baud_rate = baud_rate self.content_type = content_type pass @property def status (self): #TODO status check try: check = json.loads(request.urlopen(self.report_url).read().decode()).get('status') pass if not check: return (0, "Data reporter functioning properly") else: return (1, check) except Exception as e: return (1, "Data reporter error: %s" % e) def send(self, message, type="text"): if type == "text": #TODO send text print ("%s - Sent Message: %s"% (str(datetime.datetime.now()), message)) elif type == "image": #todo send image # response = requests.post(self.report_image_url, files={'file': message}) print ("%s - Sent Image: %s"% (str(datetime.datetime.now()), message)) #adding & initializing port object port = initializeUartPort(portName=self.com_port_name, baudrate=self.baud_rate) #initializing logger (formatter, logger, consoleLogger,) = initializeLogs(LOGGER_LEVEL, CONSOLE_LOGGER_LEVEL) #making base operations d = baseOperations(port, logger) if d is None: return False (gsm, imei) = d inet = self.SimInetGSM(port, logger) logger.info("attaching GPRS") if not inet.attachGPRS("wholesale", "", "", 1): logger.error("error attaching GPRS") return False logger.info("ip = {0}".format(inet.ip)) #making HTTP GET request logger.info("making HTTP POST request") if not inet.httpPOST_DATA( "home.ascorrea.com", 5010, "/upload-file", # content=self.content_type, parameters="{0}".format(message) ): logger.error("error making HTTP GET post: {0}".format(inet.errorText)) return False logger.info("httpResult = {0}".format(inet.httpResult)) if inet.httpResponse is not None: response = str(inet.httpResponse).replace("\n\r", "\n") logger.info("response: \"{0}\"".format(response)) else: logger.info("empty response") elif type == "data": #adding & initializing port object port = initializeUartPort(portName=self.com_port_name, baudrate=self.baud_rate) #initializing logger (formatter, logger, consoleLogger,) = initializeLogs(LOGGER_LEVEL, CONSOLE_LOGGER_LEVEL) #making base operations d = baseOperations(port, logger) if d is None: return False (gsm, imei) = d inet = self.SimInetGSM(port, logger) logger.info("attaching GPRS") if not inet.attachGPRS("internet", "", "", 1): logger.error("error attaching GPRS") return False logger.info("ip = {0}".format(inet.ip)) #making HTTP GET request logger.info("making HTTP POST request") if not inet.httpPOST( "home.ascorrea.com", 5010, "/report-encoded", parse.urlencode(message) ): logger.error("error making HTTP GET post: {0}".format(inet.errorText)) return False logger.info("httpResult = {0}".format(inet.httpResult)) if inet.httpResponse is not None: response = str(inet.httpResponse).replace("\n\r", "\n") logger.info("response: \"{0}\"".format(response)) else: logger.info("empty response")