diff --git a/content/docs/getting-started/first-app.md b/content/docs/getting-started/first-app.md index afce6f6..449b8a4 100644 --- a/content/docs/getting-started/first-app.md +++ b/content/docs/getting-started/first-app.md @@ -10,10 +10,10 @@ Let us take a step-by-step approach in putting together your first Zenoh applica As the first step, let us see how we get some data from a temperature sensor in our kitchen. Then we see how we can route this data to store and perform some analytics. -Before cranking some code, let's define some terminology. +Before cranking some code, let's define some terminology. Zenoh deals with keys/values where each key is a path and is associated to a value. A key looks like just a Unix file system path, such as ```myhome/kitchen/temp```. The value can be defined with different -encodings (string, JSON, raw bytes buffer...). +encodings (string, JSON, raw bytes buffer...). Let's get started! @@ -37,15 +37,15 @@ def read_temp(): return random.randint(15, 30) if __name__ == "__main__": - session = zenoh.open(zenoh.Config()) - key = 'myhome/kitchen/temp' - pub = session.declare_publisher(key) - while True: - t = read_temp() - buf = f"{t}" - print(f"Putting Data ('{key}': '{buf}')...") - pub.put(buf) - time.sleep(1) + with zenoh.open(zenoh.Config()) as session: + key = 'myhome/kitchen/temp' + pub = session.declare_publisher(key) + while True: + t = read_temp() + buf = f"{t}" + print(f"Putting Data ('{key}': '{buf}')...") + pub.put(buf) + time.sleep(1) ``` Now we need a subscriber, `z_subscriber.py` that can receive the measurements: @@ -55,11 +55,11 @@ import zenoh, time def listener(sample): print(f"Received {sample.kind} ('{sample.key_expr}': '{sample.payload.to_string()}')") - + if __name__ == "__main__": - session = zenoh.open(zenoh.Config()) - sub = session.declare_subscriber('myhome/kitchen/temp', listener) - time.sleep(60) + with zenoh.open(zenoh.Config()) as session: + sub = session.declare_subscriber('myhome/kitchen/temp', listener) + time.sleep(60) ``` Start the subscriber: @@ -67,7 +67,7 @@ Start the subscriber: python3 z_subscriber.py ``` The subscriber waits for an update on `myhome/kitchen/temp`. - + Now start `z_sensor.py` as follows ```bash python3 z_sensor.py @@ -78,7 +78,7 @@ You can see the values produced by the sensor being consumed by the subscriber. ## Store and Query in Zenoh As the next step, let's see how the value generated by a publisher can be stored in Zenoh. -For this, we use [Zenoh router](../installation) (`zenohd`). +For this, we use [Zenoh router](../installation) (`zenohd`). By default, a Zenoh router starts without any storage. In order to store the temperature, we need to configure one. Create a `zenoh-myhome.json5` configuration file for Zenoh with this content: ```json5 @@ -107,24 +107,23 @@ Create a `zenoh-myhome.json5` configuration file for Zenoh with this content: zenohd -c zenoh-myhome.json5 ``` -Now the data generated by our temperature sensor is stored in memory. +Now the data generated by our temperature sensor is stored in memory. We can retrieve the latest temperature value stored in Zenoh: ```python import zenoh if __name__ == "__main__": - session = zenoh.open() - replies = session.get('myhome/kitchen/temp') - for reply in replies: - try: - print("Received ('{}': '{}')" - .format(reply.ok.key_expr, reply.ok.payload.to_string())) - except: - print("Received (ERROR: '{}')" - .format(reply.err.payload.to_string())) - -session.close() + with zenoh.open(zenoh.Config()) as session: + replies = session.get('myhome/kitchen/temp') + for reply in replies: + try: + print("Received ('{}': '{}')" + .format(reply.ok.key_expr, reply.ok.payload.to_string())) + except: + print("Received (ERROR: '{}')" + .format(reply.err.payload.to_string())) + ``` ## Other examples