-
Notifications
You must be signed in to change notification settings - Fork 0
/
Effector.py
60 lines (44 loc) · 1.84 KB
/
Effector.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
from pyswip import Prolog
import random
def getAllEffectors(prolog):
effectorList = list(prolog.query("effector(X,Y)"))
dictEffector = {}
for i in range(len(effectorList)):
dictEffector [effectorList[i]["X"]]= effectorList[i]["Y"]
newdict = {}
for k,v in dictEffector.items():
temp = list(prolog.query("effectorValue("+ str(k) +",Y)"))
if bool(temp):
newdict[k]= [v, temp[0]["Y"]]
return newdict
def getEffectorValue(effectorID, prolog):
query_list = list(prolog.query("effectorValue(" + effectorID +" ,X)"))
if len(query_list) == 1:
return str(query_list[0]["X"])
else: return query_list
def setEffectorValue(effectorID, value, prolog):
old_value = str(getEffectorValue(effectorID, prolog))
list(prolog.query("replace_existing_fact(effectorValue(" + str(effectorID) +" ,"+str(old_value)+"), effectorValue(" + str(effectorID)+ ", "+str(value)+"))"))
def generete_random_effectors(prolog):
sensors = getAllEffectors(prolog)
for k, v in sensors.items():
if v[0] == 'light':
setEffectorValue(k, random.randint(0,10), prolog)
elif v[0] == 'temp':
setEffectorValue(k, random.randint(1,50), prolog)
def resetEffectors(prolog):
effectors = getAllEffectors(prolog)
for k, v in effectors.items():
setEffectorValue(k, "0", prolog)
def checkPreferences(action, prolog):
#return bool(query("preference("+name+", _, _, _)"))
# open the logActions file in append
f = open("logActions.txt", "a")
query_list = list(prolog.query("preference("+action+", T, V, E)"))
i=0
if len(query_list)>0:
for pref in query_list:
type = pref["T"]
f.write("set(" + action + ", " + type + ").\n")
list(prolog.query("set(" + action + ", " + type + ")."))
f.close()