def record():
    config = get_config()
    location_name = config["location"]["name"]
    device_id = config["device"]["device_id"]
    sensor_id = config["temperature"]["sensor_id"]
    gpio_port = config["temperature"]["gpio_port"]
    interval_seconds = int(config["temperature"]["interval_seconds"])
    csv_columns = config["recording"]["csv_columns"].split(",")
    timestamp_format = config["recording"]["timestamp_format"]
    host = config["server"]["host"]
    port = int(config["server"]["port"])

    while True:
        data = measure_temp_humid(gpio_port, timestamp_format)
        for d in data:
            d.update({
                "device_id": device_id,
                "sensor_id": sensor_id,
                "location": location_name,
            })
            send_data(data=d, host=host, port=port)
            parameter = d.pop("parameter")
            write_csv(
                file_name=os.path.join(APP_DIR, f"{parameter}.csv"),
                data=d,
                column_names=csv_columns,
            )
        sleep(interval_seconds)
示例#2
0
def main():
    data = {
        "parameter": "temperature",
        "value": 17.401,
        "timestamp": "2020-01-06 23:12:28",
        "location": "master bedroom",
        "device_id": 1,
        "sensor_id": 1,
    }
    config = get_config()["server"]
    send_data(data, config["host"], int(config["port"]))
示例#3
0
 def __init__(self, selector, sock, addr):
     self.encoding = get_config()["server"]["encoding"]
     self.selector = selector
     self.sock = sock
     self.addr = addr
     self._recv_buffer = b""
     self._send_buffer = b""
     self._jsonheader_len = None
     self.jsonheader = None
     self.request = None
     self.response_created = False
示例#4
0
 def __init__(self, selector, sock, addr, request):
     self.encoding = get_config()["client"]["encoding"]
     self.selector = selector
     self.sock = sock
     self.addr = addr
     self.request = request
     self._recv_buffer = b""
     self._send_buffer = b""
     self._request_queued = False
     self._jsonheader_len = None
     self.jsonheader = None
     self.response = None
示例#5
0
def get_logger():
    """
    Configure logging.
    :returns: logger object
    """
    level = {
        "debug": logging.DEBUG,
        "info": logging.INFO,
        "warning": logging.WARNING,
        "error": logging.ERROR,
        "critical": logging.CRITICAL,
    }
    config = get_config()["logging"]
    logging.basicConfig(format="%(asctime)s %(levelname)s %(message)s",
                        level=level[config["level"]],
                        filename=config["log_file"],
                        filemode="a")
    return logging.getLogger()
示例#6
0
def send_data(data, host, port):
    request = {
        "type": "text/json",
        "encoding": get_config()["client"]["encoding"],
        "content": data
    }
    sel = selectors.DefaultSelector()
    start_connection(sel, host, port, request)

    # loop as long as a socket is being monitored
    while sel.get_map():
        events = sel.select(timeout=1)
        for key, mask in events:
            message = key.data
            try:
                message.process_events(mask)
            except Exception:
                logger.error(f"Error for {message.addr}:\n"
                             f"{traceback.format_exc()}")
                message.close()
    sel.close()
示例#7
0
def get_connection(autocommit=False):
    """
    Get a connection to a MySQL database.

    :param bool autocommit: if SQL commands should be automatically committed
        (optional, default False)
    :returns: connection object
    """
    config = get_config()["database"]
    host = config["host"]
    port = int(config["port"])
    database = config["database"]
    username = config["username"]
    password = config["password"]
    conn = mysql.connector.connect(
        host=host,
        port=port,
        username=username,
        password=password,
        database=database,
    )
    conn.autocommit = autocommit
    return conn
示例#8
0
def listen():
    config = get_config()["server"]
    port = int(config["port"])
    start_server(config["bind_address"], port)