-
Notifications
You must be signed in to change notification settings - Fork 0
/
SensorDS18b20.py
147 lines (120 loc) · 3.87 KB
/
SensorDS18b20.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
137
138
139
140
141
142
143
144
145
146
147
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Import
import subprocess
import os.path
import glob
from DatabaseModel import getplace_db, setplace_db
class Sensor :
def __init__(self) :
self.sensor_id = "unknown"
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.sensor_id = 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"
self.place = self.readplacename()
try:
from sense_hat import SenseHat
self.sensehat = SenseHat()
except:
self.sensehat = None
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.sensor_id
def total_count(self) :
return self.total_count
def placename(self):
return self.place
def setplacename(self, name):
self.place = setplace_db(name)
def readplacename(self):
self.place = getplace_db()
return self.place
def read_temp(self):
if os.path.isfile(self.device_file) == False:
return 'null'
with open(self.device_file, 'r') as f:
lines = f.readlines()
f.close()
try:
equals_pos = lines[1].find('t=')
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))
except:
temp = 'null'
self.total_count += 1
return temp
def read_pressure(self):
if self.sensehat != None:
p = self.sensehat.get_pressure()
p = round(p, 2)
else:
p = 'null'
self.total_count += 1
return p
def read_humidity(self):
if self.sensehat != None:
h = self.sensehat.get_humidity()
h = round(h, 2)
else:
h = 'null'
self.total_count += 1
return h
def sensordebug(self):
sysdev = '/sys/bus/w1/devices/'
h = '<h2>Listing %s</h2>' % sysdev
if os.path.isfile(self.device_file):
h += self.device_file
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>
Sensor Database:
28-000007011a5f DS18B20
28-0000073e313a DS18B20
28-000007011953 DS18B20 PAR
28-00000740146b DS18B20 PAR
28-0000073ade97 DS18B20 PAR
28-0000073ae2ec DS18B20 PAR
28-000007013e91 DS18B20 PAR
28-0000070118c5 DS18B20 PAR
</pre>'''
subprocess.Popen(["nohup", "pkill", "modprobe"])
return h