如何使用 Python 发送设备孪生的动态报告属性
How to send dynamic reported properties for Device twin using Python
我想定期更新 IoT 设备所需的属性。我发送的所需属性如下:
desired = {
"para1" : {"time": [11,22,33]},
"para2" : {"site":"demo.com"}
}
以下是设备内部的脚本 运行,根据 this 文档
import time
import threading
from azure.iot.device import IoTHubModuleClient
CONNECTION_STRING = "IOTHUB Device Connection String"
def twin_update_listener(client):
while True:
patch = client.receive_twin_desired_properties_patch() # blocking call
print("Twin patch received:")
print(patch)
def iothub_client_init():
client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING)
return client
def iothub_client_sample_run():
try:
client = iothub_client_init()
twin_update_listener_thread = threading.Thread(target=twin_update_listener, args=(client,))
twin_update_listener_thread.daemon = True
twin_update_listener_thread.start()
# Send reported
print ( "Sending data as reported property..." )
reported_patch = {"connectivity": "cellular"}
client.patch_twin_reported_properties(reported_patch)
print ( "Reported properties updated" )
while True:
time.sleep(1000000)
except KeyboardInterrupt:
print ( "IoT Hub Device Twin device sample stopped" )
if __name__ == '__main__':
print ( "Starting the Python IoT Hub Device Twin device sample..." )
print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" )
iothub_client_sample_run()
此处将 reported_properties 更新为静态值(reported_patch = {"connectivity": "cellular"})
,但我不想上传与所需值相同的报告值:
{
"para1" : {"time": [11,22,33]},
"para2" : {"site":"demo.com"}
}
请告诉我如何实现。
试试这个,一旦 desired
值更改,将 desired
值上传到 reported
:
import time
import threading
from azure.iot.device import IoTHubModuleClient
CONNECTION_STRING = ""
def twin_update_listener(client):
while True:
patch = client.receive_twin_desired_properties_patch() # blocking call
print("Twin patch received")
patch.pop('$version',None)
print ( "Sending Twin as reported property..." )
print(patch)
client.patch_twin_reported_properties(patch)
print ( "Reported properties updated" )
def iothub_client_init():
client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING)
return client
def iothub_client_sample_run():
try:
client = iothub_client_init()
twin_update_listener_thread = threading.Thread(target=twin_update_listener, args=(client,))
twin_update_listener_thread.daemon = True
twin_update_listener_thread.start()
while True:
time.sleep(1000)
except KeyboardInterrupt:
print ( "IoT Hub Device Twin device sample stopped" )
if __name__ == '__main__':
print ( "Starting the Python IoT Hub Device Twin device sample..." )
print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" )
iothub_client_sample_run()
我想定期更新 IoT 设备所需的属性。我发送的所需属性如下:
desired = {
"para1" : {"time": [11,22,33]},
"para2" : {"site":"demo.com"}
}
以下是设备内部的脚本 运行,根据 this 文档
import time
import threading
from azure.iot.device import IoTHubModuleClient
CONNECTION_STRING = "IOTHUB Device Connection String"
def twin_update_listener(client):
while True:
patch = client.receive_twin_desired_properties_patch() # blocking call
print("Twin patch received:")
print(patch)
def iothub_client_init():
client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING)
return client
def iothub_client_sample_run():
try:
client = iothub_client_init()
twin_update_listener_thread = threading.Thread(target=twin_update_listener, args=(client,))
twin_update_listener_thread.daemon = True
twin_update_listener_thread.start()
# Send reported
print ( "Sending data as reported property..." )
reported_patch = {"connectivity": "cellular"}
client.patch_twin_reported_properties(reported_patch)
print ( "Reported properties updated" )
while True:
time.sleep(1000000)
except KeyboardInterrupt:
print ( "IoT Hub Device Twin device sample stopped" )
if __name__ == '__main__':
print ( "Starting the Python IoT Hub Device Twin device sample..." )
print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" )
iothub_client_sample_run()
此处将 reported_properties 更新为静态值(reported_patch = {"connectivity": "cellular"})
,但我不想上传与所需值相同的报告值:
{
"para1" : {"time": [11,22,33]},
"para2" : {"site":"demo.com"}
}
请告诉我如何实现。
试试这个,一旦 desired
值更改,将 desired
值上传到 reported
:
import time
import threading
from azure.iot.device import IoTHubModuleClient
CONNECTION_STRING = ""
def twin_update_listener(client):
while True:
patch = client.receive_twin_desired_properties_patch() # blocking call
print("Twin patch received")
patch.pop('$version',None)
print ( "Sending Twin as reported property..." )
print(patch)
client.patch_twin_reported_properties(patch)
print ( "Reported properties updated" )
def iothub_client_init():
client = IoTHubModuleClient.create_from_connection_string(CONNECTION_STRING)
return client
def iothub_client_sample_run():
try:
client = iothub_client_init()
twin_update_listener_thread = threading.Thread(target=twin_update_listener, args=(client,))
twin_update_listener_thread.daemon = True
twin_update_listener_thread.start()
while True:
time.sleep(1000)
except KeyboardInterrupt:
print ( "IoT Hub Device Twin device sample stopped" )
if __name__ == '__main__':
print ( "Starting the Python IoT Hub Device Twin device sample..." )
print ( "IoTHubModuleClient waiting for commands, press Ctrl-C to exit" )
iothub_client_sample_run()