update
This commit is contained in:
221
examples/micropython_example.py
Normal file
221
examples/micropython_example.py
Normal file
@@ -0,0 +1,221 @@
|
||||
"""
|
||||
Micropython NATS Bridge - Simple Example
|
||||
|
||||
This example demonstrates the basic usage of the NATSBridge for Micropython.
|
||||
"""
|
||||
|
||||
import sys
|
||||
sys.path.insert(0, "../src")
|
||||
|
||||
from nats_bridge import smartsend, smartreceive, log_trace
|
||||
import json
|
||||
|
||||
|
||||
def example_simple_chat():
|
||||
"""
|
||||
Simple chat example: Send text messages via NATS.
|
||||
|
||||
Sender (this script):
|
||||
- Sends a text message to NATS
|
||||
- Uses direct transport (no fileserver needed)
|
||||
|
||||
Receiver (separate script):
|
||||
- Listens to NATS
|
||||
- Receives and processes the message
|
||||
"""
|
||||
print("=== Simple Chat Example ===")
|
||||
print()
|
||||
|
||||
# Define the message data as list of (dataname, data, type) tuples
|
||||
data = [
|
||||
("message", "Hello from Micropython!", "text")
|
||||
]
|
||||
|
||||
# Send the message
|
||||
env = smartsend(
|
||||
"/chat/room1",
|
||||
data,
|
||||
nats_url="nats://localhost:4222",
|
||||
msg_purpose="chat",
|
||||
sender_name="micropython-client"
|
||||
)
|
||||
|
||||
print("Message sent!")
|
||||
print(" Subject: {}".format(env.send_to))
|
||||
print(" Correlation ID: {}".format(env.correlation_id))
|
||||
print(" Payloads: {}".format(len(env.payloads)))
|
||||
print()
|
||||
|
||||
# Expected receiver output:
|
||||
print("Expected receiver output:")
|
||||
print(" [timestamp] [Correlation: ...] Starting smartsend for subject: /chat/room1")
|
||||
print(" [timestamp] [Correlation: ...] Serialized payload 'message' (type: text) size: 22 bytes")
|
||||
print(" [timestamp] [Correlation: ...] Using direct transport for 22 bytes")
|
||||
print(" [timestamp] [Correlation: ...] Message published to /chat/room1")
|
||||
print()
|
||||
|
||||
return env
|
||||
|
||||
|
||||
def example_send_json():
|
||||
"""
|
||||
Example: Send JSON configuration to a Micropython device.
|
||||
|
||||
This demonstrates sending structured data (dictionary type).
|
||||
"""
|
||||
print("\n=== Send JSON Configuration ===")
|
||||
print()
|
||||
|
||||
# Define configuration as dictionary
|
||||
config = {
|
||||
"wifi_ssid": "MyNetwork",
|
||||
"wifi_password": "password123",
|
||||
"server_host": "mqtt.example.com",
|
||||
"server_port": 1883,
|
||||
"update_interval": 60
|
||||
}
|
||||
|
||||
# Send configuration
|
||||
data = [
|
||||
("device_config", config, "dictionary")
|
||||
]
|
||||
|
||||
env = smartsend(
|
||||
"/device/config",
|
||||
data,
|
||||
nats_url="nats://localhost:4222",
|
||||
msg_purpose="updateStatus",
|
||||
sender_name="server"
|
||||
)
|
||||
|
||||
print("Configuration sent!")
|
||||
print(" Subject: {}".format(env.send_to))
|
||||
print(" Payloads: {}".format(len(env.payloads)))
|
||||
print()
|
||||
|
||||
return env
|
||||
|
||||
|
||||
def example_receive_message(msg):
|
||||
"""
|
||||
Example: Receive and process a NATS message.
|
||||
|
||||
Args:
|
||||
msg: The NATS message received (should be dict or JSON string)
|
||||
|
||||
Returns:
|
||||
list: List of (dataname, data, type) tuples
|
||||
"""
|
||||
print("\n=== Receive Message ===")
|
||||
print()
|
||||
|
||||
# Process the message
|
||||
payloads = smartreceive(
|
||||
msg,
|
||||
fileserver_download_handler=None, # Not needed for direct transport
|
||||
max_retries=3,
|
||||
base_delay=100,
|
||||
max_delay=1000
|
||||
)
|
||||
|
||||
print("Received {} payload(s):".format(len(payloads)))
|
||||
for dataname, data, type in payloads:
|
||||
print(" - {}: {} (type: {})".format(dataname, data, type))
|
||||
|
||||
return payloads
|
||||
|
||||
|
||||
def example_mixed_content():
|
||||
"""
|
||||
Example: Send mixed content (text + dictionary + binary).
|
||||
|
||||
This demonstrates the multi-payload capability.
|
||||
"""
|
||||
print("\n=== Mixed Content Example ===")
|
||||
print()
|
||||
|
||||
# Create mixed content
|
||||
image_data = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR" # Example PNG header
|
||||
|
||||
data = [
|
||||
("message_text", "Hello with image!", "text"),
|
||||
("user_config", {"theme": "dark", "notifications": True}, "dictionary"),
|
||||
("user_avatar", image_data, "binary")
|
||||
]
|
||||
|
||||
env = smartsend(
|
||||
"/chat/mixed",
|
||||
data,
|
||||
nats_url="nats://localhost:4222",
|
||||
msg_purpose="chat",
|
||||
sender_name="micropython-client"
|
||||
)
|
||||
|
||||
print("Mixed content sent!")
|
||||
print(" Subject: {}".format(env.send_to))
|
||||
print(" Payloads:")
|
||||
for p in env.payloads:
|
||||
print(" - {} (transport: {}, type: {}, size: {} bytes)".format(
|
||||
p.dataname, p.transport, p.type, p.size))
|
||||
|
||||
return env
|
||||
|
||||
|
||||
def example_reply():
|
||||
"""
|
||||
Example: Send a message with reply-to functionality.
|
||||
|
||||
This demonstrates request-response pattern.
|
||||
"""
|
||||
print("\n=== Request-Response Example ===")
|
||||
print()
|
||||
|
||||
# Send command
|
||||
data = [
|
||||
("command", {"action": "read_sensor", "sensor_id": "temp1"}, "dictionary")
|
||||
]
|
||||
|
||||
env = smartsend(
|
||||
"/device/command",
|
||||
data,
|
||||
nats_url="nats://localhost:4222",
|
||||
msg_purpose="command",
|
||||
sender_name="server",
|
||||
reply_to="/device/response",
|
||||
reply_to_msg_id="cmd-001"
|
||||
)
|
||||
|
||||
print("Command sent!")
|
||||
print(" Subject: {}".format(env.send_to))
|
||||
print(" Reply To: {}".format(env.reply_to))
|
||||
print(" Reply To Msg ID: {}".format(env.reply_to_msg_id))
|
||||
print()
|
||||
|
||||
print("Expected receiver behavior:")
|
||||
print(" 1. Receive command on /device/command")
|
||||
print(" 2. Process command")
|
||||
print(" 3. Send response to /device/response")
|
||||
print(" 4. Include replyToMsgId in response")
|
||||
|
||||
return env
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Micropython NATS Bridge Examples")
|
||||
print("================================")
|
||||
print()
|
||||
|
||||
# Run examples
|
||||
example_simple_chat()
|
||||
example_send_json()
|
||||
example_mixed_content()
|
||||
example_reply()
|
||||
|
||||
print("\n=== Examples Completed ===")
|
||||
print()
|
||||
print("To run these examples, you need:")
|
||||
print(" 1. A running NATS server at nats://localhost:4222")
|
||||
print(" 2. Import the nats_bridge module")
|
||||
print(" 3. Call the desired example function")
|
||||
print()
|
||||
print("For more examples, see test/test_micropython_basic.py")
|
||||
Reference in New Issue
Block a user