Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.12 KB | None | 0 0
  1. #!/usr/bin/env python
  2. from __future__ import print_function # Print function in Python 2 and 3
  3. from coapthon import defines
  4. from coapthon.client.helperclient import HelperClient
  5. from time import sleep
  6. from functools import partial
  7.  
  8. import logging
  9. import argparse
  10. from kafka import KafkaProducer
  11.  
  12. # Global variables
  13. observables = [] # list of observed paths.
  14.  
  15. # Observe callback receive function
  16. def observe_callback(response, producer):
  17. producer.send('bigdataroom', str(response.payload).encode()) # Send the messageprint(response.payload)
  18.  
  19. def update_observable_resources(response):
  20. resources_list = response.payload.split(",")
  21.  
  22. for resource in resources_list:
  23. elems = str(resource).split(";")
  24.  
  25. if "obs" in elems: # if resource is observable
  26. # get path (position 0) and remove undesired characters
  27. observable_path = elems[0].translate(str.maketrans({'<': '', '>': ''}))
  28.  
  29. # only append to global list if it has not been observed yet
  30. if observable_path not in observables:
  31. observables.append(observable_path)
  32.  
  33. def main(args):
  34.  
  35. logging.disable(logging.DEBUG) # Disable DEBUG logging
  36.  
  37. while True:
  38. client = HelperClient(server=(args.host, args.port))
  39. response = client.discover()
  40. producer = KafkaProducer()
  41.  
  42. # catching exception if the response doesn't contain a payload
  43. try:
  44. update_observable_resources(response)
  45.  
  46. for path in observables:
  47. client.observe(path, partial(observe_callback, producer=producer))
  48.  
  49. except AttributeError:
  50. print("Empty resource: Doesn't contain a payload")
  51.  
  52. finally:
  53. sleep(20) # 20 seconds between new discover
  54.  
  55.  
  56. if __name__ == '__main__':
  57. parser = argparse.ArgumentParser()
  58.  
  59. parser.add_argument(
  60. '-H', '--host',
  61. help="IP direction of the CoAP server, default: MULTICAST. ",
  62. default=defines.ALL_COAP_NODES
  63. )
  64. parser.add_argument(
  65. '-P', '--port',
  66. help="Port where CoAP server is listening, default: 5683",
  67. default=5683
  68. )
  69.  
  70. main(parser.parse_args())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement