Files
ess-moxa-configuration-tools/Python/azure_iot_hub_thingspro_api_call_generic.py
2026-03-26 08:48:15 +01:00

55 lines
2.0 KiB
Python

from azure.iot.hub import IoTHubRegistryManager
from azure.iot.hub.protocol.models import QuerySpecification, Module
from azure.iot.hub.models import CloudToDeviceMethod, CloudToDeviceMethodResult
from dotenv import load_dotenv
from isight_device import iSightDevice
import json
import os
import pandas as pd
load_dotenv()
CONNECTION_STRING = str(os.getenv("CONNECTION_STRING_INOX_PROD"))
if CONNECTION_STRING == "":
print("Provide a connection string for the Iot Hub before running the script!")
exit(13)
registry_manager = IoTHubRegistryManager.from_connection_string(CONNECTION_STRING)
query_spec = QuerySpecification(query="SELECT * FROM devices WHERE IS_DEFINED(tags.site) AND capabilities.iotEdge = true ")
query_result = registry_manager.query_iot_hub(query_spec)
devices = []
for item in query_result.items:
devices.append(iSightDevice(str(item.device_id), str(item.tags['site']), int(item.tags['number']), str(item.tags['version'])))
devices.sort(key = lambda d: (d.site, d.number))
rows = []
for device in devices:
if device.getDeviceId() == "TBAIB1114211":
print(device, end="\t")
current_device_modules = registry_manager.get_modules(device.deviceId)
for module in current_device_modules:
if (module.module_id == "thingspro-agent"):
device.setModule(module)
method_name = "thingspro-api-v1"
payload = {
"method": "GET",
"path": "/device/time"
}
module_id = "thingspro-agent"
try:
direct_method = CloudToDeviceMethod(method_name = method_name, payload = payload)
response = registry_manager.invoke_device_module_method(device_id = device.deviceId, module_id = module_id, direct_method_request = direct_method)
print(json.dumps(response.payload, indent = 2))
except Exception as e:
print(f"Error: {e}")
else:
continue
print(f"{device.getDeviceId()}")
df = pd.DataFrame(rows)
df.to_excel("thingspro-version.xlsx", index=False)