diff --git a/docs/getting-started/first-app/index.html b/docs/getting-started/first-app/index.html index f8355d67..0fb7cfef 100644 --- a/docs/getting-started/first-app/index.html +++ b/docs/getting-started/first-app/index.html @@ -1,6 +1,6 @@ Your first Zenoh app · Zenoh - pub/sub, geo distributed storage, query

Your first Zenoh app

Let us take a step-by-step approach in putting together your first Zenoh application in Python. +

Your first Zenoh app

Let us take a step-by-step approach in putting together your first Zenoh application in Python. 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.

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…).

Let’s get started!

Pub/sub in Zenoh

First thing first, we need to install the zenoh Python library.

pip install eclipse-zenoh
@@ -12,24 +12,24 @@
     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:

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:

python3 z_subscriber.py
 

The subscriber waits for an update on myhome/kitchen/temp.

Now start z_sensor.py as follows

python3 z_sensor.py
 

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. @@ -57,17 +57,15 @@ We can retrieve the latest temperature value stored in Zenoh:

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

You can also have a look at the examples provided with each client API:

Next up: Installation