index.rst 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. .. OpenLEADR documentation master file, created by
  2. sphinx-quickstart on Thu Jul 9 14:09:27 2020.
  3. You can adapt this file completely to your liking, but it should at least
  4. contain the root `toctree` directive.
  5. ====================
  6. Welcome to OpenLEADR
  7. ====================
  8. A friendly and compliant OpenADR implementation for Python 3.
  9. Key Features
  10. ============
  11. - Fully compliant OpenADR 2.0b implementation for both servers (Virtual Top Node) and clients (Virtual End Node)
  12. - Fully asyncio: you set up the coroutines that can handle certain events, and they get called when needed.
  13. - Fully pythonic: all messages are represented as simple Python dictionaries. All XML parsing and generation is done for you.
  14. Take a :ref:`feature_tour`!
  15. Project Status
  16. ==============
  17. The current version is |release|.
  18. This project is still a work in progress. Please see our :ref:`roadmap` for information.
  19. License
  20. =======
  21. This project is licensed under the Apache 2.0 license.
  22. Library Installation
  23. ====================
  24. .. code-block:: bash
  25. $ pip install openleadr
  26. OpenLEADR is compatible with Python 3.6+
  27. Getting Started
  28. ===============
  29. Client example::
  30. from openleadr import OpenADRClient
  31. import asyncio
  32. async def main():
  33. client = OpenADRClient(ven_name="Device001",
  34. vtn_url="http://localhost:8080/OpenADR2/Simple/2.0b")
  35. client.on_event = handle_event
  36. await client.run()
  37. async def handle_event(event):
  38. """
  39. This coroutine will be called
  40. when there is an event to be handled.
  41. """
  42. print("There is an event!")
  43. print(event)
  44. # Do something to determine whether to Opt In or Opt Out
  45. return 'optIn'
  46. loop = asyncio.get_event_loop()
  47. loop.create_task(main())
  48. loop.run_forever()
  49. This will connect to an OpenADR server (indicated by the vtn_url parameter), handle registration, start polling for events and reports, and will call your coroutines whenever an event or report is created for you.
  50. We have more examples available over at the :ref:`examples` page.
  51. Table of Contents
  52. =================
  53. .. toctree::
  54. :name: mastertoc
  55. :maxdepth: 2
  56. features
  57. openadr
  58. client
  59. server
  60. examples
  61. representations
  62. message_signing
  63. roadmap
  64. API Reference <api/modules>
  65. Representations of OpenADR payloads
  66. ===================================
  67. OpenLEADR uses Python dictionaries and vanilla Python types (like datetime and timedelta) to represent the OpenADR payloads. These pages serve as a reference to these representations.
  68. For example, this XML payload:
  69. .. code-block:: xml
  70. <?xml version="1.0" encoding="utf-8"?>
  71. <oadrPayload xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://openadr.org/oadr-2.0b/2012/07" xsi:schemaLocation="http://openadr.org/oadr-2.0b/2012/07 oadr_20b.xsd">
  72. <oadrSignedObject>
  73. <oadrResponse ei:schemaVersion="2.0b" xmlns:ei="http://docs.oasis-open.org/ns/energyinterop/201110">
  74. <ei:eiResponse>
  75. <ei:responseCode>200</ei:responseCode>
  76. <ei:responseDescription>OK</ei:responseDescription>
  77. <requestID xmlns="http://docs.oasis-open.org/ns/energyinterop/201110/payloads" />
  78. </ei:eiResponse>
  79. <ei:venID>o57b65be83</ei:venID>
  80. </oadrResponse>
  81. </oadrSignedObject>
  82. </oadrPayload>
  83. is represented in OpenLEADR as:
  84. .. code-block:: python3
  85. {'response': {'response_code': 200,
  86. 'response_description': 'OK'},
  87. 'ven_id': 'o57b65be83'}
  88. Read more about the representations at :ref:`representations`
  89. Indices and tables
  90. ==================
  91. * :ref:`genindex`
  92. * :ref:`modindex`
  93. * :ref:`search`