-
Notifications
You must be signed in to change notification settings - Fork 0
/
Sensor.py
136 lines (106 loc) · 3.51 KB
/
Sensor.py
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Import
import subprocess
import os.path
import glob
class Sensor :
def __init__(self) :
self.sensorid = "sensor unknown"
self.fileplace = 'tempplace.conf'
self.place = 'Unknown place'
self.total_count = 0
base_dir = '/sys/bus/w1/devices/'
try:
device_folder = glob.glob(base_dir + '28*')[0]
except:
device_folder = '/tmp'
pos = device_folder.rfind('-')
if pos > 0:
self.sensorid = device_folder[pos+1:]
self.device_file = device_folder + '/w1_slave'
if os.path.isfile(self.device_file) :
print self.device_file
else:
self.device_file = "/dev/null"
def reinit(self) :
'''
On Raspberry PI (wheezy)
Warning for DS18B20P (parasite) it is necessary:
1. Add to /boot/config.txt the following line:
dtoverlay=w1-gpio,pullup="y"
2. Modprobe with:
# sudo modprobe w1_gpio pullup=1
# sudo modprobe w1_therm strong_pullup=1 (or =2)
1-Wire Default reading is on GPIO 4
'''
os.system('modprobe w1-gpio pullup=1')
os.system('modprobe w1-therm strong_pullup=1')
self.__init__()
def sensorid(self) :
return self.sensorid
def total_count(self) :
return self.total_count
def setplacename(self, name):
with open(self.fileplace, "w") as f:
f.write(name)
f.close()
self.place = name
def placename(self):
self.place = "Temp"
with open(self.fileplace, 'r') as f:
lines = f.readlines()
f.close()
self.place = lines[0]
return self.place
def read_temp(self):
temp = "null"
with open(self.device_file, 'r') as f:
lines = f.readlines()
f.close()
try:
equals_pos = lines[1].find('t=')
except:
equals_pos = -1
if equals_pos != -1:
# The first two characters are "t=", so get rid of those and convert the temperature from a string to a number.
# Put the decimal point in the right place and display it.
temp_string = lines[1][equals_pos+2:]
temp = float(temp_string) / 1000.0
#temp_f = temp * 9.0 / 5.0 + 32.0 # Fahreneit
temp = str(round(temp, 2))
self.total_count += 1
return temp
def read_pressure(self):
self.total_count += 1
return 'null'
def read_humidity(self):
self.total_count += 1
return 'null'
def sensordebug(self):
sysdev = '/sys/bus/w1/devices/'
proc = subprocess.Popen('ls -l %s' % sysdev, shell=True, stdout=subprocess.PIPE)
h = '<h2>ls -l %s</h2>' % sysdev
for line in proc.stdout.readlines():
h += line
h += '''<pre>
On Raspberry PI (wheezy and probably jeanny don't work)
Warning for DS18B20P (parasite) it is necessary:
1. Add to /boot/config.txt the following line:
dtoverlay=w1-gpio,pullup="y"
2. Modprobe with:
# sudo modprobe w1_gpio pullup=1
# sudo modprobe w1_therm strong_pullup=1 (or =2)
1-Wire Default reading is on GPIO 4
</pre>
'''
h += '''<pre>
000007011a5f DS18B20
0000073e313a DS18B20
000007011953 DS18B20 PAR
00000740146b DS18B20 PAR
0000073ade97 DS18B20 PAR
</pre>
'''
subprocess.Popen(["nohup", "pkill", "modprobe"])
return h