Пример #1
0
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
Пример #2
0
                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)
Пример #3
0
 def __init__(self):
     self.add_device(Fan(12))
Пример #4
0
 def device_test(self):
     self.add_device(Fan(12))
     self.add_device(Fan(11))
     self.devices[0].test()
     self.list_devices()
Пример #5
0
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:
Пример #6
0
#!/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())
Пример #7
0
#!/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()
Пример #8
0
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():
Пример #9
0
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)
Пример #10
0
#!/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()
Пример #11
0
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