models.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. import logging
  2. logging.basicConfig()
  3. logger = logging.getLogger("kalliope")
  4. class Topic(object):
  5. def __init__(self, name=None, synapses=None, is_json=False):
  6. self.name = name
  7. self.synapses = synapses
  8. self.is_json = is_json
  9. def serialize(self):
  10. """
  11. This method allows to serialize in a proper way this object
  12. :return: A dict of name and parameters
  13. :rtype: Dict
  14. """
  15. return {
  16. 'name': self.name,
  17. 'is_json': self.is_json,
  18. 'synapses': [e.serialize() for e in self.synapses],
  19. }
  20. def __str__(self):
  21. return str(self.serialize())
  22. def __eq__(self, other):
  23. """
  24. This is used to compare 2 objects
  25. :param other:
  26. :return:
  27. """
  28. return self.__dict__ == other.__dict__
  29. class Broker(object):
  30. def __init__(self, broker_ip=None, topics=None, port=1883, client_id="kalliope", keepalive=60,
  31. username=None, password=None, protocol="MQTTv311", ca_cert=None, certfile=None, keyfile=None,
  32. tls_insecure=False):
  33. self.broker_ip = broker_ip
  34. self.topics = topics
  35. if self.topics is None:
  36. self.topics = list()
  37. # optional value
  38. self.port = port
  39. self.client_id = client_id
  40. self.keepalive = keepalive
  41. self.username = username
  42. self.password = password
  43. self.protocol = protocol
  44. self.ca_cert = ca_cert
  45. self.certfile = certfile
  46. self.keyfile = keyfile
  47. self.tls_insecure = tls_insecure
  48. def serialize(self):
  49. """
  50. This method allows to serialize in a proper way this object
  51. :return: A dict of name and parameters
  52. :rtype: Dict
  53. """
  54. return {
  55. 'broker_ip': self.broker_ip,
  56. 'port': self.port,
  57. 'client_id': self.client_id,
  58. 'keepalive': self.keepalive,
  59. 'username': self.username,
  60. 'password': self.password,
  61. 'protocol': self.protocol,
  62. 'ca_cert': self.ca_cert,
  63. 'certfile': self.certfile,
  64. 'keyfile': self.keyfile,
  65. 'tls_insecure': self.tls_insecure,
  66. 'topics': [e.serialize() for e in self.topics],
  67. }
  68. def __str__(self):
  69. return str(self.serialize())
  70. def build_from_signal_dict(self, dict_parameters):
  71. """
  72. Build the Broker object from a received dict of parameters
  73. :param dict_parameters: dict of parameters used to build the Broker object
  74. """
  75. logger.debug("[Broker] Build broker object from received parameters: %s" % dict_parameters)
  76. self.broker_ip = dict_parameters["broker_ip"]
  77. if "broker_port" in dict_parameters:
  78. self.port = dict_parameters["broker_port"]
  79. # keep alive must be an integer
  80. if not isinstance(self.keepalive, int):
  81. try:
  82. self.port = int(self.port)
  83. except ValueError:
  84. logger.debug("[Broker] Invalid port value, fallback to 1883")
  85. self.port = 1883
  86. else:
  87. # set default port
  88. self.port = 1883
  89. if "client_id" in dict_parameters:
  90. self.client_id = dict_parameters["client_id"]
  91. else:
  92. self.client_id = "kalliope"
  93. if "username" in dict_parameters:
  94. self.username = dict_parameters["username"]
  95. if "password" in dict_parameters:
  96. self.password = dict_parameters["password"]
  97. if "keepalive" in dict_parameters:
  98. self.keepalive = dict_parameters["keepalive"]
  99. # keep alive must be an integer
  100. if not isinstance(self.keepalive, int):
  101. try:
  102. self.keepalive = int(self.keepalive)
  103. except ValueError:
  104. logger.debug("[Broker] Invalid keepalive value, fallback to 60")
  105. self.keepalive = 60
  106. else:
  107. # set default value
  108. self.keepalive = 60
  109. if "protocol" in dict_parameters:
  110. if dict_parameters["protocol"] not in ["MQTTv31", "MQTTv311"]:
  111. logger.debug("[Broker] Invalid protocol value, fallback to MQTTv311")
  112. self.protocol = "MQTTv311"
  113. else:
  114. self.protocol = dict_parameters["protocol"]
  115. else:
  116. self.protocol = "MQTTv311"
  117. if "ca_cert" in dict_parameters:
  118. self.ca_cert = dict_parameters["ca_cert"]
  119. if "certfile" in dict_parameters:
  120. self.certfile = dict_parameters["certfile"]
  121. if "keyfile" in dict_parameters:
  122. self.keyfile = dict_parameters["keyfile"]
  123. if "tls_insecure" in dict_parameters:
  124. self.tls_insecure = dict_parameters["tls_insecure"]
  125. self.tls_insecure = bool(self.tls_insecure)
  126. else:
  127. self.tls_insecure = False
  128. def __eq__(self, other):
  129. """
  130. This is used to compare 2 objects
  131. :param other:
  132. :return:
  133. """
  134. return self.__dict__ == other.__dict__