Skip to content

Recipe: Pub/Sub telemetry

Broadcast telemetry and react to it on the same fabric.

from contextlib import asynccontextmanager
from istos import Istos

istos = Istos()

@istos.subscribe("drone/telemetry")
async def on_telemetry(data: dict):
    print(f"battery={data['battery']} altitude={data['altitude']}")

@istos.publish("drone/telemetry")
async def emit_telemetry(battery: int, altitude: int):
    return {"battery": battery, "altitude": altitude}

@asynccontextmanager
async def on_start(app):
    await emit_telemetry(battery=85, altitude=120)
    # or: await app.publish_once("drone/telemetry", {"battery": 85, "altitude": 120})
    yield

istos.lifespan = on_start

if __name__ == "__main__":
    istos.run()

For continuous publishing, schedule work from lifespan (background task) or call publish_once from a timer — always after the session is open.

See Publish & Subscribe.