#!/usr/bin/env python3 import asyncio import functools import json import logging import os import signal import sys import threading import time from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer from utils import ChangedFloat from utils.config_validate import validate_temp_ctrl from ws.message import MessageDispatcher from ws.server.ws_server_multi_user import WsServerMultiUser from components.pid import PidFactory from components.plant import PlantFactory from components.actor import StirrerFactory from components.sud import Sud from components.sud_forecast import SudForecastEstimator from tasks import TaskManager, TempSensorTask, HeaterTask, PotTask, TcTask, StirrerTask, SudTask, ServerLogTask, SudLogTask import argparse as ap log = logging.getLogger('brewpi') class Tee: """Duplicates writes to multiple streams - used to mirror stdout/stderr into a log file under logs/ as well as the console, without every writer needing to know about either. Also stamps every line with a "T