forked from EVNotify/EVNotiPi
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwatchdog.py
More file actions
58 lines (46 loc) · 1.88 KB
/
watchdog.py
File metadata and controls
58 lines (46 loc) · 1.88 KB
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
from smbus import SMBus
import logging
class Watchdog:
def __init__(self, config):
self.log = logging.getLogger("EVNotiPi/Watchdog")
self.i2c_address = config['i2c_address']
self.i2c_voltage_multiplier = 0.06
self.i2c_bus_id = config['i2c_bus'] if 'i2c_bus' in config else 0
self.i2c_bus = SMBus()
def _BusOpen(self):
self.i2c_bus.open(self.i2c_bus_id)
def _BusClose(self):
self.i2c_bus.close()
def getShutdownFlag(self):
self._BusOpen()
self.i2c_bus.write_byte(self.i2c_address, 2)
ret = self.i2c_bus.read_byte(self.i2c_address)
self._BusClose()
return ret
def getVoltage(self):
self._BusOpen()
self.i2c_bus.write_byte(self.i2c_address, 1)
ret = self.i2c_bus.read_byte(self.i2c_address)
self._BusClose()
return ret * self.i2c_voltage_multiplier
def calibrateVoltage(self, realVoltage):
self._BusOpen()
self.i2c_bus.write_byte(self.i2c_address, 1)
ret = self.i2c_bus.read_byte(self.i2c_address)
self._BusClose()
self.i2c_voltage_multiplier = realVoltage / ret
self.log.info("Calibration: {} {} {}".format(realVoltage, ret, self.i2c_voltage_multiplier))
def getThresholds(self):
self._BusOpen()
self.i2c_bus.write_byte(self.i2c_address, 0x11)
start = self.i2c_bus.read_byte(self.i2c_address)
self.i2c_bus.write_byte(self.i2c_address, 0x12)
shut = self.i2c_bus.read_byte(self.i2c_address)
self.i2c_bus.write_byte(self.i2c_address, 0x13)
emerg = self.i2c_bus.read_byte(self.i2c_address)
self._BusClose()
return {
'startup': start * self.i2c_voltage_multiplier,
'shutdown': shut * self.i2c_voltage_multiplier,
'emergency': emerg * self.i2c_voltage_multiplier,
}