232 lines
7.7 KiB
Python
232 lines
7.7 KiB
Python
__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")
|
|
|