-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathObserver.py
executable file
·74 lines (67 loc) · 2.3 KB
/
Observer.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
from SHT31 import SHT31
import json
import socket
import time
import machine
import sys
class Observer(object):
def __init__(self):
self.sht31 = SHT31()
self.sht31.start_measurement()
def post_result(self, timer_id):
# if self.scd40.check_data_available():
temp, humi = self.sht31.read_data()
print("temp = " + str(temp) + " " + "humi = " + str(humi))
rest_sock = self.rest_init()
self.rest_write(
rest_sock,
json.dumps(
# {"records": [
# {"resource": "temperature", "data": temp},
# {"resource": "humidity", "data": humi}]}), )
{"temperature": temp, "humidity": humi}))
rest_sock.close()
def start_periodic_measurement(self, interval):
timer = machine.Timer(-1)
timer.init(
mode=machine.Timer.PERIODIC,
period=interval,
callback=self.post_result)
def rest_init(self):
sock = socket.socket()
addr = socket.getaddrinfo(self.rest_server, 7896)[0][-1]
for i in range(8):
try:
sock.connect(addr)
break
except OSError as e:
time.sleep(2)
else:
print("server unreachable", file=sys.stderr)
return None
return sock
def rest_write(self, socket, payload):
header = (
"POST {}?k={}&i={} HTTP/1.1\r\n"
"Host: {}\r\n"
"Content-Length: {}\r\n"
"Content-Type: application/json\r\n\r\n".format(
self.rest_path, self.api_key, self.device_id,
self.rest_server,
len(payload)))
if socket is not None:
try:
req = header + payload
print(req)
resp = socket.send(req)
print("resp = " + str(socket.recv(4096)))
return resp
except Exception as e:
print("server unreachable [{}]".format(e),
file=sys.stderr)
return None
def set_rest_params(self, server, path, api_key, device_id):
self.rest_server = server
self.rest_path = path
self.api_key = api_key
self.device_id = device_id