class HostProperties: # pylint: disable=too-many-instance-attributes """ description: """ __version__ = 0.5 def __init__(self, data): self.name = '' self.machine = '' self.architecture = '' self.processor = '' self.core = 0 self.memory = 0 self.memory_used = 0 self.system = '' self.distribution = '' self.distribution_version = '' self.python_version = '' self.temperature = None self.status_led = None self.status_signal = None self.fan_speed = None self.fan = None self.timer = None self.load(data) self.set() def load(self, data): """ description: """ self.data = data def set(self): """ description: """ # self.reset() self.name = platform.node() self.machine = platform.machine() self.architecture = platform.architecture()[0] self.processor = platform.processor() self.core = os.sysconf("SC_NPROCESSORS_ONLN") self.memory = int( round(float(virtual_memory().total) / 1024 / 1024 / 1024)) self.memory_used = virtual_memory().percent self.system = platform.system() self.distribution = distro.linux_distribution()[0] self.distribution_version = distro.linux_distribution()[1] self.python_version = platform.python_version() self.profile = 'generic' if self.name in self.data: self.profile = self.name else: self.profile = 'generic' def info(self): """ description: """ echo.infoln("Host...") echo.debugln("Profile: " + self.profile, 1) echo.infoln("Name: " + self.name, 1) echo.debugln( "Machine: " + self.machine + " (" + self.architecture + ")", 1) echo.debugln("Processor: " + self.processor, 1) echo.debug("Core", 1) if self.core > 1: echo.debug("s") echo.debugln(": " + str(self.core)) echo.debugln( "Memory: " + str(self.memory) + "GB (used: " + str(self.memory_used) + "%)", 1) echo.debug("Operating system: " + self.system, 1) if platform.system() == 'Linux': echo.debugln(" (" + self.distribution + " " + self.distribution_version + ")") echo.debugln("Python: " + self.python_version, 1) def run(self): """ description: """ if self.machine == 'armv7l': self.run_armv7l() if self.machine == 'x86_64': self.run_x86_64() def start_x86_64(self): """ description: """ self.timer = Timer(1000) # Temperature sensor status = 'Absent' try: if self.data[self.name]["resources"]["temperature_sensor"]: self.temperature = 0 status = 'Present' except BaseException: pass echo.debugln('Temperature sensor: ' + status, 1) def start(self): """ description: """ if self.machine == 'armv7l': self.start_armv7l() if self.machine == 'x86_64': self.start_x86_64() def run_x86_64(self): """ description: """ if not self.timer.check(): return False # Temperature sensor try: if self.data[self.name]["resources"]["temperature_sensor"]: from psutil import sensors_temperatures payload = str(sensors_temperatures()['acpitz']).split(',')[1] temperature = re.sub(r' [a-z]*=', '', payload) self.temperature = str("{:1.0f} C".format(float(temperature))) except BaseException: pass return False def run_armv7l(self): """ description: """ # Blink Status LED try: if self.data[self.name]["resources"]["status_led"]: self.status_led.ChangeDutyCycle(self.status_signal.sine() * 100) except BaseException: pass # Check sensors if not self.timer.check(): return False # Temperature sensor try: if self.data[self.name]["resources"]["temperature_sensor"]: temp = os.popen("vcgencmd measure_temp").readline() temp = temp.replace("temp=", "") temp = temp.replace("\'C", "") self.temperature = str("{:1.0f} C".format(float(temp))) except BaseException: pass # Fan speed try: if self.data[self.name]["resources"]["temperature_sensor"] and \ self.data[self.name]["resources"]["fan"]: self.fan.auto_speed(self.temperature) self.fan_speed = str("{:1.1f} RPM".format( float(self.fan.read_rpm()))) except BaseException: pass return False def status_armv7l(self): """ description: """ status = '' self.run_armv7l() try: if self.data[self.name]["resources"]["temperature_sensor"]: status = self.temperature except BaseException: pass try: if self.data[self.name]["resources"]["temperature_sensor"] and \ self.data[self.name]["resources"]["fan"]: status += ' ' + str(self.fan_speed) + ' RPM' except BaseException: pass return status def status_x86_64(self): """ description: """ status = '' self.run_x86_64() try: if self.data[self.name]["resources"]["temperature_sensor"]: status = self.temperature except BaseException: pass return status def status(self): """ description: """ if self.machine == 'armv7l': return self.status_armv7l() if self.machine == 'x86_64': return self.status_x86_64() return '' def start_armv7l(self): """ description: """ try: from fan import Fan except ImportError as err: echo.erroln("Could not load module. " + str(err)) sys.exit(True) self.timer = Timer(1000) # Temperature sensor status = 'Absent' try: if self.data[self.name]["resources"]["temperature_sensor"]: self.temperature = 0 status = 'Present' except BaseException: pass echo.debugln('Temperature sensor: ' + status, 1) # Status LED status = 'Absent' try: if self.data[self.name]["resources"]["status_led"]: from tools.signal import SigGen GPIO.setup(33, GPIO.OUT) self.status_led = GPIO.PWM(33, 50) self.status_led.start(0) self.status_signal = SigGen() self.status_signal.period(1000) status = 'Present' except BaseException: pass echo.infoln('Status LED: ' + status, 1) # Fan status = 'Absent' try: if self.data[self.name]["resources"]["fan"]: self.fan = Fan(32, 22, max_speed=2000) self.fan.set_limits(40, 60) self.fan_speed = 0 status = 'Present' except BaseException: pass echo.infoln('Fan: ' + status, 1) def get_control(self): """ description: """ try: return self.data[self.name]["control"] except BaseException: pass def get_screen(self): """ description: """ try: return self.data[self.name]["screen"] except BaseException: pass def get_screensaver(self): """ description: """ try: return self.data[self.name]["screensaver"] except BaseException: pass def stop(self): """ description: """ if self.machine == 'armv7l': self.stop_armv7l() if self.machine == 'x86_64': self.stop_x86_64() def stop_x86_64(self): # pylint: disable=no-self-use """ description: """ return False def stop_armv7l(self): """ description: """ try: if self.data[self.name]["resources"]["status_led"]: self.status_led.stop() except BaseException: pass try: if self.data[self.name]["resources"]["fan"]: self.fan.stop() except BaseException: pass try: if self.data[self.name]["resources"]["status_led"] or \ self.data[self.name]["resources"]["fan"]: GPIO.cleanup() except BaseException: pass
return total_work / self.eta else: return self.compressor_in.work_done / self.eta except AttributeError as e: raise e if __name__ == '__main__': from inlet import Inlet from fan import Fan from bypass import Bypass from compressor import Compressor ambient_conditions = FlowCondition(corrected_mass_flow=1400., mach=0.8, t_static=216, p_static=22632, station_number='1', medium='air') inlet = Inlet(ambient=ambient_conditions, eta=0.98) fan = Fan(inflow=inlet.outflow, eta=0.92, pressure_ratio=1.6, station_number='21') bypass = Bypass(inflow=fan.outflow, bypass_ratio=8.) lpc = Compressor(inflow=bypass.outflow_core, eta=0.9, pressure_ratio=1.4, station_number='25') hpc = Compressor(inflow=lpc.outflow, eta=0.9, pressure_ratio=19, station_number='3') lp_spool = Spool(compressor_in=(fan, lpc), eta=0.99) print(lp_spool.work_required) print(lpc.work_done) print(hpc.inflow.mass_flow) print(hpc.inflow.t_total) print(hpc.p_total) print(hpc.t_total) print(hpc.work_done) # print(obj.p_total) # print(obj.t_total)
def __init__(self): self.add_device(Fan(12))
def device_test(self): self.add_device(Fan(12)) self.add_device(Fan(11)) self.devices[0].test() self.list_devices()
import socket def dbg(msg): print("Info: " + msg) # Connect Wifi wifi = Wifi() wifi.connect(SSID, PWD) # Init Button btn = Button(BTN_PIN, BTN_IDLE) # Init Fan fan = Fan(FAN_PIN, FAN_DEFAULT_FREQ, FAN_DEFAULT_DUTY) # Server addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(5) while True: cl, addr = s.accept() cl_file = cl.makefile('rwb', 0) try: (method, url, version) = cl_file.readline().split(b" ") except:
#!/usr/bin/env python from fan import Fan from templog import TempLog from temp import Temperature from pi_system import PiSystem from datetime import datetime from flask import Flask, Response, jsonify fan = Fan() db = TempLog() temp = Temperature() pi = PiSystem() app = Flask(__name__) @app.route('/temp', methods=['GET']) def get_temp(): result = dict(datetime=datetime.now().isoformat(), temperature=temp.read()) return jsonify(result=[result]) @app.route('/temp/<int:hours>', methods=['GET']) def list_temp(hours): result = db.last(hours) return jsonify(result=result) @app.route('/fan', methods=['GET']) def get_fan(): return fan_status(fan.read())
#!/usr/bin/env python # vim: set fileencoding=UTF8 from fan import Fan from temp import Temperature from mylogger import MyLogger from datetime import datetime import sys, time, mylogger LOG_FILENAME = "/var/log/fan-control" LOG_LEVEL = mylogger.LOG_LEVEL_DEBUG logger = MyLogger(LOG_FILENAME, LOG_LEVEL) fan = Fan() temp = Temperature() delay = 5.0 thresholdUp = 31 thresholdDown = 29 count = 0 maxCountUp = int(15 / delay) # 15s / 5 = 3 maxCountDown = int(30 / delay) # 30s / 5 = 6 logCount = 0 maxLogCount = int(30 / delay) t = temp.read() currentStatus = fan.read()
from gevent import monkey monkey.patch_all() import sys from datetime import datetime from flask import Flask, render_template import gevent from gevent import socket, backdoor from gevent.wsgi import WSGIServer from fan import Fan app = Flask(__name__) fan = Fan(app) @app.route("/debug") def debug(): return "Currently %d subscriptions" % len(fan.subscriptions) @app.route("/lastread") def lastread(): last_read = app.last_read if app.last_read else "never" return "Last read message was " + app.last_read @app.route("/") def index():
logging.basicConfig(format='[%(asctime)s] %(levelname)-8s %(message)s', level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S') logger = logging.getLogger(__name__) if args.debug: logger.setLevel(logging.DEBUG) signal.signal(signal.SIGTERM, sigterm_handler) pi = pigpio.pi() if not pi.connected: logger.error("Could not connect to pigpio") exit(1) cpu = CPUTemperature() fan = Fan(pi, PWM_PIN) with open(CONFIG_FILE, 'r') as stream: config = yaml.safe_load(stream) controller = Controller(config) logger.debug(pformat(config)) while True: temperature = cpu.temperature required_speed = controller.required_speed(temperature) logger.debug("{}: {}".format(temperature, required_speed)) fan.speed = required_speed time.sleep(5)
def test_cooling(): fan = Fan() # If measured temperature is over the target, the error is negative and fan should be # # error | speed # -3 | 5 # -2 | 4 # -1 | 3 # 0 | 3 # 1 | 3 # 2 | 2 # 3 | 1 # OVERHEATED # error < -3 # => speed 1 fan.calculate(-4, 'cool') assert fan.speed == 5 fan.calculate(-3, 'cool') assert fan.speed == 4 fan.calculate(-2, 'cool') assert fan.speed == 3 fan.calculate(-1, 'cool') assert fan.speed == 2 fan.calculate(0, 'cool') assert fan.speed == 1 fan.calculate(1, 'cool') assert fan.speed == 1 fan.calculate(2, 'cool') assert fan.speed == 1 fan.calculate(3, 'cool') assert fan.speed == 1 fan.calculate(4, 'cool') assert fan.speed == 1