-
Notifications
You must be signed in to change notification settings - Fork 6
/
iotdevice.py
117 lines (90 loc) · 3.3 KB
/
iotdevice.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
import time
import iothub_client
from iothub_client import *
from iothub_client_args import *
i = 0
#set min and maxes for temperature and humidity
min_temp = 70.0
max_temp = 90.0
min_humidity = 50.0
max_humidity = 60.0
valley_to_peak_samples = 30
#change this -- don't forget the "GatewayHostName" param at the end
connection_string = "<IoT Device connection string here>"
# directions for simulated data
temp_going_up = True
humidity_going_up = True
last_temp = min_temp
last_humidity = min_humidity
temp_range = (max_temp - min_temp) / valley_to_peak_samples
humidity_range = (max_humidity - min_humidity) / valley_to_peak_samples
def receive_message_callback(message, counter):
buffer = message.get_bytearray()
size = len(buffer)
msg = buffer[:size].decode('utf-8')
print("received C2D command {%s}" % (msg))
return IoTHubMessageDispositionResult.ACCEPTED
def device_method_callback(method_name, payload, user_context):
print("received DM {%s}, payload: %s" % (method_name, payload))
device_method_return_value = DeviceMethodReturnValue()
device_method_return_value.response = "{ \"Response\": \"This is the response from the device\" }"
device_method_return_value.status = 200
return device_method_return_value
def device_twin_callback(update_state, payload, user_context):
print("Device Twin update %s... %s" % (update_state, payload))
protocol = IoTHubTransportProvider.MQTT
iotHubClient = IoTHubClient(connection_string, protocol)
print("Connected to IoTHub gateway")
iotHubClient.set_device_twin_callback(device_twin_callback, 0)
iotHubClient.set_device_method_callback(device_method_callback, 0)
iotHubClient.set_message_callback(receive_message_callback, 0)
def send_confirmation_callback(message, result, user_context):
global i
print(" message number %d sent " % (user_context))
return
def GetNextTemp():
global min_temp
global max_temp
global last_temp
global temp_going_up
global temp_range
if(temp_going_up):
curr_temp = last_temp + temp_range
if(curr_temp > max_temp):
curr_temp = max_temp
temp_going_up = False
else:
curr_temp = last_temp - temp_range
if(curr_temp < min_temp):
curr_temp = min_temp
temp_going_up = True
last_temp = curr_temp
return curr_temp
def GetNextHumidity():
global min_humidity
global max_humidity
global last_humidity
global humidity_going_up
global humidity_range
if(humidity_going_up):
curr_humidity = last_humidity + humidity_range
if(curr_humidity > max_humidity):
curr_humidity = max_humidity
humidity_going_up = False
else:
curr_humidity = last_humidity - humidity_range
if(curr_humidity < min_humidity):
curr_humidity = min_humidity
humidity_going_up = True
last_humidity = curr_humidity
return curr_humidity
while 1:
curr_temp = GetNextTemp()
curr_humidity = GetNextHumidity()
serial_line_template = "%2.2f,%2.2f"
serial_line= serial_line_template % (curr_humidity, curr_temp)
message = IoTHubMessage(bytearray(serial_line, 'utf8'))
iotHubClient.send_event_async(message, send_confirmation_callback, i)
print("sending message: [%s]" % (serial_line))
i=i+1
time.sleep(3)