This README provides a step-by-step guide to using the OM2M Python client to interact with an OM2M MN-CSE (Middle Node Common Services Entity). The code demonstrates creating and managing resources such as Application Entities (AE), Containers, ContentInstances, and Subscriptions.
- Ensure you have an OM2M MN-CSE server running and accessible.
- Install the
om2m-clientlibrary:pip install micropython-om2m-client
- Adjust the
base_urland credentials to match your MN-CSE setup.
Initialize the client with the base URL, CSE ID, CSE name, and authentication credentials.
from om2m_client.client import OM2MClient
client_mn = OM2MClient(
base_url="http://127.0.0.1:8282", # Adjust to your MN-CSE base URL
cse_id="mn-cse", # MN-CSE identifier
cse_name="mn-name", # MN-CSE resource name
username="admin", # Authentication username
password="admin", # Authentication password
use_json=True # Use JSON for data exchange
)Create an AE under the MN-CSE with specific properties.
from om2m_client.models import AE
mn_ae = AE(
rn="MY_GATEWAY_SENSOR5", # Resource Name
api="mn-sensor-app5", # Application Identifier
rr=False, # Request Reachability
lbl=["Type/gatewaySensor", "Location/factory"]
)
ae_resource_id = client_mn.create_ae(mn_ae)
print("AE Resource ID (MN-CSE):", ae_resource_id)Create a Container under the previously created AE.
from om2m_client.models import Container
container_path = f"/{client_mn.cse_id}/{client_mn.cse_name}/{mn_ae.rn}"
mn_container = Container(
rn="DATA", # Container Name
lbl=["Category/temperature", "Unit/celsius"]
)
container_resource_id = client_mn.create_container(container_path, mn_container)
print("Container Resource ID (MN-CSE):", container_resource_id)Add a ContentInstance under the Container to store sensor data.
from om2m_client.models import ContentInstance
cin_path = f"{container_path}/DATA"
mn_cin = ContentInstance(
cnf="application/json", # Content Format
con="{\"temperature\": 27}" # Content (JSON string)
)
cin_resource_id = client_mn.create_content_instance(cin_path, mn_cin)
print("ContentInstance Resource ID (MN-CSE):", cin_resource_id)Retrieve resources matching a specific label, such as "Type/gatewaySensor".
discovery_response = client_mn.discover_resources_by_label("Type/gatewaySensor")
print("Discovery Response (MN-CSE):")
print(discovery_response)Create a Subscription to receive notifications on changes to the DATA container.
from om2m_client.models import Subscription
subscription_path = f"{container_path}/DATA"
mn_subscription = Subscription(
rn="MY_DATA_SUB", # Subscription Name
nu="http://localhost:1400/monitor", # Notification URI (local listener required)
nct=2 # Notification Content Type
)
subscription_resource_id = client_mn.create_subscription(subscription_path, mn_subscription)
print("Subscription Resource ID (MN-CSE):", subscription_resource_id)Retrieve and print the AE and Container content.
retrieved_ae = client_mn.retrieve_resource(f"/{client_mn.cse_id}/{client_mn.cse_name}/MY_GATEWAY_SENSOR")
print("Retrieved AE Content (MN-CSE):")
print(retrieved_ae)retrieved_data = client_mn.retrieve_resource(cin_path)
print("Retrieved DATA Container Content (MN-CSE):")
print(retrieved_data)- Replace placeholders such as
base_url,cse_id,cse_name,username, andpasswordwith your actual OM2M server details. - Ensure your OM2M server is correctly configured to allow the operations in this example.
- The example assumes the MN-CSE uses JSON for communication.
This example serves as a template for integrating and managing resources using OM2M and Python. Customize it as needed for your specific use case.