-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcachalot.py
129 lines (96 loc) · 3.06 KB
/
cachalot.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
#!/usr/bin/env python
# -------------------------------------------
# Affichage du niveau d'eau de la cuve "Cachalot"
#
#
# sources et inspirations (many thanks) :
# https://www.fred-j.org/?p=364
#
# Capteur NO / Hauteurs par rapport au sol : 200 mm, 405 mm, 615 mm, 825 mm, 1035 mm
#
#
#
# -------------------------------------------
import RPi.GPIO as GPIO
import time
import requests
DEBUG = 1;
#-------------[ CABLAGE ]--------------------
# Cable de la sonde de 0(20%) a 4(100%)
CAPTEUR_GPIO = [4, 17, 27, 22, 24];
CAPTEUR_0_DISTANCE = 20
CAPTEUR_1_DISTANCE = 40.5
CAPTEUR_2_DISTANCE = 61.5
CAPTEUR_3_DISTANCE = 82.5
CAPTEUR_4_DISTANCE = 103.5
# Jeedom
JEEDOM_IP = "192.168.1.33"
JEEDOM_VIRTUAL_APIKEY = "JiVW21qvOqNPVHe5tbXbxOhLMhK1OfM8"
JEEDOM_VIRTUAL_COMMANDE_ID = 749
#-------------[ Initialisation ]--------------
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # Set GPIO pin numbering
for i in range(5):
GPIO.setup(CAPTEUR_GPIO[i], GPIO.IN) # Set pin as GPIO in
#-------------[ Main ]--------------
def measure():
print ("\n\n\n");
for i in range(5):
WATER_LEVEL = 0
if GPIO.input(CAPTEUR_GPIO[0]) == False:
WATER_LEVEL = CAPTEUR_4_DISTANCE
break
if GPIO.input(CAPTEUR_GPIO[1]) == False:
WATER_LEVEL = CAPTEUR_3_DISTANCE
break
if GPIO.input(CAPTEUR_GPIO[2]) == False:
WATER_LEVEL = CAPTEUR_2_DISTANCE
break
if GPIO.input(CAPTEUR_GPIO[3]) == False:
WATER_LEVEL = CAPTEUR_1_DISTANCE
break
if GPIO.input(CAPTEUR_GPIO[4]) == False:
WATER_LEVEL = CAPTEUR_0_DISTANCE
break
# debug
if DEBUG :
for i in range(5):
if (i == 0):
P = " 100"
elif (i == 1):
P = " 80 "
elif (i == 2):
P = " 60 "
elif (i == 3):
P = " 40 "
elif (i == 4):
P = " 20 "
if GPIO.input(CAPTEUR_GPIO[i]) == True:
print (" ",P,"% | | GPIO ",CAPTEUR_GPIO[i])
else:
print (" ",P,"% |##########| GPIO ",CAPTEUR_GPIO[i])
return WATER_LEVEL
# Wrap main content in a try block so we can
# catch the user pressing CTRL-C and run the
# GPIO cleanup function. This will also prevent
# the user seeing lots of unnecessary error
# messages.
while True:
try:
valeur = measure();
print (measure())
payload = {'plugin': 'virtual', 'apikey': JEEDOM_VIRTUAL_APIKEY, 'type': 'virtual', 'id': JEEDOM_VIRTUAL_COMMANDE_ID, 'value': valeur}
r = requests.post("http://" + JEEDOM_IP + "/core/api/jeeApi.php", params=payload)
# debug
if DEBUG :
print(payload)
print ("----------")
print ("\n\n\n")
time.sleep(1) # 1 seconde
else:
time.sleep(30*60*60) # 30 minutes
except KeyboardInterrupt:
# User pressed CTRL-C
# Reset GPIO settings
GPIO.cleanup()
print('all done, bye')