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)
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"]))
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
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
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()
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()
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
def listen(): config = get_config()["server"] port = int(config["port"]) start_server(config["bind_address"], port)