-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlights.py
159 lines (124 loc) · 3.99 KB
/
lights.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
148
149
150
151
152
153
154
155
156
157
158
159
import time
from collections import defaultdict
from xbos import get_client
from xbos.services.hod import HodClient
from xbos.devices.light import Light
from xbos.devices.occupancy_sensor import Occupancy_Sensor
import pandas as pd
from xbos.services import mdal
import datetime, pytz
from datetime import timedelta
############################################### Initializing our datasets
ACTUATE = False
SITE = "ciee" #Cahnge this according to the site
#print RoomsType.RoomsType[df['column_name'] == some_value]
c = get_client()
hod = HodClient("xbos/hod")
skipped = ""
####### occ query
occ_query = """SELECT * FROM %s WHERE {
?l rdf:type brick:Lighting_System .
?l bf:feeds ?room .
?room rdf:type brick:Room .
?l bf:uri ?luri .
?l bf:hasPoint ?p .
?p rdf:type brick:Occupancy_Sensor .
?p bf:uri ?puri .
?p bf:uuid ?puuid
};"""
res2=hod.do_query(occ_query % SITE)
byrooms_o = defaultdict(list)
for item in res2['Rows']:
byrooms_o[item['?room']].append(item['?puuid'])
print "Occupany uuids loaded!"
####### light query
light_query = """
SELECT ?light ?room ?light_uri FROM %s WHERE {
?light rdf:type brick:Lighting_System .
?light bf:feeds ?room .
?room rdf:type brick:Room .
?light bf:uri ?light_uri
};
"""
res = hod.do_query(light_query % SITE)
byrooms = defaultdict(list)
all_rooms = set()
for item in res['Rows']:
all_rooms.add(item['?room'])
try:
l = Light(c, item['?light_uri'])
byrooms[item['?room']].append(l)
except:
skipped += str(item['?light'])+"in room"+str(item['?room'])+" skipped! \n"
pass
print "Lighting systems loaded!"
####### room type query
type_query = """SELECT * FROM %s WHERE {
?room rdf:type brick:Room.
?room rdf:label ?label
};
"""
res3=hod.do_query(type_query % SITE)
byrooms_type = defaultdict(list)
for item in res3['Rows']:
byrooms_type[item['?room']].append(item['?label'])
print byrooms_type
print "Room types loaded!"
Actuated = ""
################################################ Controls
c = mdal.MDALClient("xbos/mdal")
for room in all_rooms:
Type = byrooms_type[room][0]
if Type=="Hallway":
for light in byrooms[room]:
if ACTUATE:
brightness =20
Actuated += "Lights in room"+str(room)+" was set to"+str(brightness)+"\n"
light.set_brightness(min(light.brightness,brightness))
elif Type=="Toilet":
for light in byrooms[room]:
print "c"#print light.brightness
if ACTUATE:
brightness =10
Actuated += "Lights in room"+str(room)+" was set to"+str(brightness)+"\n"
light.set_brightness(min(light.brightness,brightness))
else:
query_list = []
for i in byrooms_o[room]:
query_list.append(i)
# get the sensor data
now= datetime.datetime.utcnow().replace(tzinfo=pytz.timezone("UTC"))
dfs = c.do_query({'Composition': query_list,
'Selectors': [mdal.MAX] * len(query_list),
'Time': {'T0': (now - timedelta(hours=0.5)).strftime('%Y-%m-%d %H:%M:%S') + ' UTC',
'T1': now.strftime('%Y-%m-%d %H:%M:%S') + ' UTC',
'WindowSize': str(30) + 'min',
'Aligned': True}})
dfs = pd.concat([dframe for uid, dframe in dfs.items()], axis=1)
df = dfs[[query_list[0]]]
df.columns.values[0] = 'occ'
df.is_copy = False
df.columns = ['occ']
# perform OR on the data, if one sensor is activated, the whole room is considered occupied
for i in range(1, len(query_list)):
df.loc[:, 'occ'] += dfs[query_list[i]]
df.loc[:, 'occ'] = 1 * (df['occ'] > 0)
if df["occ"][0]!=1:
for light in byrooms[room]:
if ACTUATE:
brightness = 0
Actuated += "Lights in room"+str(room)+" was set to "+str(brightness)+"\n"
light.set_brightness(min(light.brightness,brightness))
else:
for light in byrooms[room]:
print light.brightness()
if ACTUATE:
brightness = 10
Actuated += "Lights in room"+str(room)+" was set to "+str(brightness)+"\n"
light.set_brightness(min(light.brightness,brightness))
print "Done!"
print "================================"
print "We skipped the following lights:"
print skipped
print "We actuated the following lights:"
print Actuated