summaryrefslogtreecommitdiff
path: root/scripts/sensors.py
blob: 99d41596641d60ab00cb45dc26300229318e11bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Copyright (c) 2009, Giampaolo Rodola'. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
A clone of 'sensors' utility on Linux printing hardware temperatures.

$ python scripts/sensors.py
SENSORS
=======

asus
    Temperatures:
        asus                 50.0 °C (high=None °C, critical=None °C)
    Fans:
        cpu_fan              3300 RPM

acpitz
    Temperatures:
        acpitz               50.0 °C (high=108.0 °C, critical=108.0 °C)

coretemp
    Temperatures:
        Physical id 0        51.0 °C (high=87.0 °C, critical=105.0 °C)
        Core 0               49.0 °C (high=87.0 °C, critical=105.0 °C)
        Core 1               51.0 °C (high=87.0 °C, critical=105.0 °C)

BATTERY
=======

    charge:     87.51%
    left:       1:12:28
    status:     discharging
    plugged in: no
"""

from __future__ import print_function
import sys

import psutil


def secs2hours(secs):
    mm, ss = divmod(secs, 60)
    hh, mm = divmod(mm, 60)
    return "%d:%02d:%02d" % (hh, mm, ss)


def main():
    if hasattr(psutil, "sensors_temperatures"):
        temps = psutil.sensors_temperatures()
    else:
        temps = {}
    if hasattr(psutil, "sensors_fans"):
        fans = psutil.sensors_fans()
    else:
        fans = {}
    if hasattr(psutil, "sensors_battery"):
        battery = psutil.sensors_battery()
    else:
        battery = None

    if not any((temps, fans, battery)):
        return sys.exit("can't read any temperature, fans or battery info")

    if temps or fans:
        print("SENSORS")
        print("=======\n")

    names = set(temps.keys() + fans.keys())
    for name in names:
        print(name)
        # Temperatures.
        if name in temps:
            print("    Temperatures:")
            for entry in temps[name]:
                print("        %-20s %s °C (high=%s °C, critical=%s °C)" % (
                    entry.label or name, entry.current, entry.high,
                    entry.critical))
        # Fans.
        if name in fans:
            print("    Fans:")
            for entry in fans[name]:
                print("        %-20s %s RPM" % (
                    entry.label or name, entry.current))

        print()

    # Battery
    if battery:
        print("BATTERY")
        print("=======\n")
        print("    charge:     %s%%" % round(battery.percent, 2))
        if battery.power_plugged:
            print("    status:     %s" % (
                "charging" if battery.percent < 100 else "fully charged"))
            print("    plugged in: yes")
        else:
            print("    left:       %s" % secs2hours(battery.secsleft))
            print("    status:     %s" % "discharging")
            print("    plugged in: no")


if __name__ == '__main__':
    main()