Use Case Example Guide: `SubscriptionManagerArtifact` ================================================== Introduction ------------ This guide provides a detailed walkthrough of how to use the `SubscriptionManagerArtifact` example. The example demonstrates how to set up and manage subscriptions to a FIWARE Context Broker using SPADE agents and artifacts. Example Structure ---------------- The example consists of three main files: 1. ``subscription_manager_broker_example.py``: Main script containing the example implementation 2. ``config.json``: System configuration file 3. ``payload.json``: Subscription configuration file Prerequisites ------------ Before running the example, ensure you have: * Python 3.7 or higher installed * SPADE framework installed * A running XMPP server * A running FIWARE Context Broker * Required Python packages:: pip install spade aiohttp loguru Configuration Files ------------------ System Configuration (config.json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``config.json`` file contains the basic system settings:: { "XMPP_SERVER": "sosanzma.home", "subscriber_artifact_name": "art_subscriber", "broker_port": "http://localhost:9090" } * ``XMPP_SERVER``: Your XMPP server address * ``subscriber_artifact_name``: Name for the subscriber artifact * ``broker_port``: URL of your FIWARE Context Broker Subscription Configuration (payload.json) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The ``payload.json`` file defines the subscription parameters:: { "entity_type": "WasteContainer", "entity_id": "088", "watched_attributes": [], "q_filter": "", "context": [ "https://raw.githubusercontent.com/smart-data-models/dataModel.WasteManagement/master/context.jsonld" ], "delete_all_artefact_subscriptions": true, "delete_subscription_identifier": "subs_v1_1", "subscription_identifier": "subs_v1_1", "delete_only": false } Key Parameters: ~~~~~~~~~~~~~~ * ``entity_type``: Type of entity to monitor (e.g., "WasteContainer") * ``entity_id``: Optional specific entity ID to monitor * ``watched_attributes``: List of attributes to monitor (empty for all) * ``q_filter``: Query filter for subscription * ``context``: NGSI-LD context URL * ``delete_all_artefact_subscriptions``: Whether to delete all existing subscriptions * ``delete_subscription_identifier``: ID of specific subscription to delete * ``subscription_identifier``: ID for new subscription * ``delete_only``: If true, only performs deletion operations Running the Example ------------------ 1. Basic Setup ^^^^^^^^^^^^^ First, ensure your configuration files are properly set up with your system details. 2. Launch the Example ^^^^^^^^^^^^^^^^^^^ Run the example using Python:: python subscription_manager_broker_example.py 3. Enter Credentials ^^^^^^^^^^^^^^^^^^ The script will prompt for two passwords: * Subscriber artifact password * Agent notification password Example Usage Scenarios ---------------------- 1. Basic Monitoring ^^^^^^^^^^^^^^^^^ To monitor all attributes of WasteContainer entities:: { "entity_type": "WasteContainer", "watched_attributes": [], "q_filter": "", "delete_all_artefact_subscriptions": false, "delete_only": false } 2. Specific Attribute Monitoring ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ To monitor specific attributes:: { "entity_type": "WasteContainer", "watched_attributes": ["fillingLevel", "status"], "q_filter": "", "delete_all_artefact_subscriptions": false, "delete_only": false } 3. Filtered Monitoring ^^^^^^^^^^^^^^^^^^^^ To monitor entities matching specific conditions:: { "entity_type": "WasteContainer", "watched_attributes": ["fillingLevel"], "q_filter": "fillingLevel>0.7", "delete_all_artefact_subscriptions": false, "delete_only": false } 4. Subscription Cleanup ^^^^^^^^^^^^^^^^^^^^^ To remove all existing subscriptions:: { "entity_type": "WasteContainer", "delete_all_artefact_subscriptions": true, "delete_only": true } Expected Output -------------- When running successfully, you should see: 1. Connection confirmation messages 2. Subscription creation/deletion confirmations 3. Notification messages when subscribed entities are updated Example output:: INFO Artifact art_subscriber@sosanzma.home using port 12345 INFO Notification server is running on http://192.168.1.100:12345 INFO Created subscription subs_v1_1 INFO Agent ready and listening to the artifact INFO Received notification: {...} Troubleshooting -------------- Common Issues ^^^^^^^^^^^^ 1. Connection Errors ~~~~~~~~~~~~~~~~~~~ * Verify XMPP server is running * Check Context Broker URL is accessible * Ensure ports are not blocked by firewall 2. Subscription Issues ~~~~~~~~~~~~~~~~~~~~ * Verify entity type exists in Context Broker * Check context URL is accessible * Validate JSON-LD context format 3. Notification Issues ~~~~~~~~~~~~~~~~~~~~ * Verify ports are open and accessible * Check network firewall settings * Ensure correct IP configuration Tips and Best Practices ---------------------- 1. Start Simple ^^^^^^^^^^^^^ Begin with basic monitoring before adding filters or complex configurations. 2. Monitor Logs ^^^^^^^^^^^^^ Keep an eye on the logs for subscription status and notifications. 3. Clean Up ^^^^^^^^^^ Regularly clean up unused subscriptions using the cleanup configuration. 4. Test Connectivity ^^^^^^^^^^^^^^^^^^ Test XMPP and Context Broker connectivity before setting up subscriptions. Additional Notes -------------- * Subscription identifiers should be unique * Empty watched_attributes list monitors all attributes * Q-filters support complex queries using semicolons as separators * The example automatically handles subscription lifecycle