PyAutomationIO 2.0.6__tar.gz → 2.0.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PKG-INFO +1 -1
  2. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/PKG-INFO +1 -1
  3. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/SOURCES.txt +2 -1
  4. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/__init__.py +5 -2
  5. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/core.py +77 -8
  6. pyautomationio-2.0.6/automation/hmi/assets/index-ClvaqkQf.js → pyautomationio-2.0.8/automation/hmi/assets/index-B8MiePQP.js +209 -209
  7. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/index.html +1 -1
  8. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/alarms.py +6 -1
  9. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/opcua_client.py +241 -7
  10. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/models.py +4 -0
  11. pyautomationio-2.0.8/automation/modules/machines/resources/machines.py +655 -0
  12. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/clients.py +101 -2
  13. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/models.py +443 -1
  14. pyautomationio-2.0.8/automation/tests/test_opcua_serialization.py +43 -0
  15. pyautomationio-2.0.8/version.py +2 -0
  16. pyautomationio-2.0.6/automation/modules/machines/resources/machines.py +0 -290
  17. pyautomationio-2.0.6/version.py +0 -2
  18. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/LICENSE +0 -0
  19. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/MANIFEST.in +0 -0
  20. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
  21. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/requires.txt +0 -0
  22. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/top_level.txt +0 -0
  23. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/README.md +0 -0
  24. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/__init__.py +0 -0
  25. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/states.py +0 -0
  26. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/trigger.py +0 -0
  27. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/buffer.py +0 -0
  28. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/__init__.py +0 -0
  29. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/alarms.py +0 -0
  30. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/core.py +0 -0
  31. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/events.py +0 -0
  32. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/logs.py +0 -0
  33. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/machines.py +0 -0
  34. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/opcua.py +0 -0
  35. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/opcua_server.py +0 -0
  36. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/tags.py +0 -0
  37. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/users.py +0 -0
  38. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/__init__.py +0 -0
  39. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/api.py +0 -0
  40. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/cors.py +0 -0
  41. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/filter/__init__.py +0 -0
  42. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/bootstrap-icons-BeopsB42.woff +0 -0
  43. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/bootstrap-icons-mSm7cUeB.woff2 +0 -0
  44. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-brands-400-D1LuMI3I.ttf +0 -0
  45. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-brands-400-D_cYUPeE.woff2 +0 -0
  46. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-regular-400-BjRzuEpd.woff2 +0 -0
  47. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-regular-400-DZaxPHgR.ttf +0 -0
  48. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-solid-900-CTAAxXor.woff2 +0 -0
  49. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-solid-900-D0aA9rwL.ttf +0 -0
  50. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-v4compatibility-C9RhG_FT.woff2 +0 -0
  51. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-v4compatibility-CCth-dXg.ttf +0 -0
  52. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/index-fe9Q2n8A.css +0 -0
  53. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/90/302/260 curve 2.svg" +0 -0
  54. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Analog gauge.svg +0 -0
  55. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Cool pump.svg +0 -0
  56. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Hand valve 4.svg +0 -0
  57. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Mass flowmeter.svg +0 -0
  58. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Short horizontal pipe.svg +0 -0
  59. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Tank 16.svg +0 -0
  60. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/__init__.py +0 -0
  61. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/frozen_data.py +0 -0
  62. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/out_of_range.py +0 -0
  63. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/outliers.py +0 -0
  64. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/__init__.py +0 -0
  65. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/alarms.py +0 -0
  66. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/core.py +0 -0
  67. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/datalogger.py +0 -0
  68. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/events.py +0 -0
  69. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/logdict.py +0 -0
  70. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/logs.py +0 -0
  71. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/machines.py +0 -0
  72. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/opcua_server.py +0 -0
  73. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/users.py +0 -0
  74. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/__init__.py +0 -0
  75. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/db.py +0 -0
  76. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/state_machine.py +0 -0
  77. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/__init__.py +0 -0
  78. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/__init__.py +0 -0
  79. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/__init__.py +0 -0
  80. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/alarms.py +0 -0
  81. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/summary.py +0 -0
  82. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/__init__.py +0 -0
  83. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/resources/__init__.py +0 -0
  84. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/resources/database.py +0 -0
  85. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/__init__.py +0 -0
  86. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/__init__.py +0 -0
  87. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/events.py +0 -0
  88. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/logs.py +0 -0
  89. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/__init__.py +0 -0
  90. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/resources/__init__.py +0 -0
  91. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/resources/health.py +0 -0
  92. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/machines/__init__.py +0 -0
  93. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/machines/resources/__init__.py +0 -0
  94. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/__init__.py +0 -0
  95. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/__init__.py +0 -0
  96. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/server.py +0 -0
  97. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/__init__.py +0 -0
  98. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/resources/__init__.py +0 -0
  99. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/resources/settings.py +0 -0
  100. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/__init__.py +0 -0
  101. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/resources/__init__.py +0 -0
  102. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/resources/tags.py +0 -0
  103. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/__init__.py +0 -0
  104. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/__init__.py +0 -0
  105. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/__init__.py +0 -0
  106. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/roles.py +0 -0
  107. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/users.py +0 -0
  108. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/roles.py +0 -0
  109. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/users.py +0 -0
  110. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/roles.py +0 -0
  111. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/users.py +0 -0
  112. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/__init__.py +0 -0
  113. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/subscription.py +0 -0
  114. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/__init__.py +0 -0
  115. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/alarms.py +0 -0
  116. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/alarms_history.py +0 -0
  117. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/assets/styles.css +0 -0
  118. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/__init__.py +0 -0
  119. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/alarms.py +0 -0
  120. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/alarms_summary.py +0 -0
  121. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/db.py +0 -0
  122. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/filter.py +0 -0
  123. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/machines.py +0 -0
  124. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/machines_detailed.py +0 -0
  125. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/opcua.py +0 -0
  126. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/opcua_server.py +0 -0
  127. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/tags.py +0 -0
  128. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/trends.py +0 -0
  129. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/communications.py +0 -0
  130. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/__init__.py +0 -0
  131. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/alarms.py +0 -0
  132. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/alarms_summary.py +0 -0
  133. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/database.py +0 -0
  134. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/gaussian_filter.py +0 -0
  135. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/machines.py +0 -0
  136. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/opcua.py +0 -0
  137. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/opcua_server.py +0 -0
  138. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/tags.py +0 -0
  139. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/trends.py +0 -0
  140. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/database.py +0 -0
  141. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/filter.py +0 -0
  142. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/machines.py +0 -0
  143. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/machines_detailed.py +0 -0
  144. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/main.py +0 -0
  145. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/opcua_server.py +0 -0
  146. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/tags.py +0 -0
  147. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/trends.py +0 -0
  148. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/singleton.py +0 -0
  149. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/state_machine.py +0 -0
  150. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/__init__.py +0 -0
  151. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/cvt.py +0 -0
  152. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/filter.py +0 -0
  153. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/tag.py +0 -0
  154. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/__init__.py +0 -0
  155. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_alarms.py +0 -0
  156. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_core.py +0 -0
  157. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_unit.py +0 -0
  158. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_user.py +0 -0
  159. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/__init__.py +0 -0
  160. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/decorators.py +0 -0
  161. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/observer.py +0 -0
  162. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/units.py +0 -0
  163. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/__init__.py +0 -0
  164. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/adimentional.py +0 -0
  165. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/current.py +0 -0
  166. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/density.py +0 -0
  167. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/eng_time.py +0 -0
  168. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/force.py +0 -0
  169. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/length.py +0 -0
  170. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/mass.py +0 -0
  171. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/mass_flow.py +0 -0
  172. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/percentage.py +0 -0
  173. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/power.py +0 -0
  174. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/pressure.py +0 -0
  175. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/temperature.py +0 -0
  176. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/volume.py +0 -0
  177. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/volumetric_flow.py +0 -0
  178. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/__init__.py +0 -0
  179. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/logger.py +0 -0
  180. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/state_machine.py +0 -0
  181. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/worker.py +0 -0
  182. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/requirements.txt +0 -0
  183. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/setup.cfg +0 -0
  184. {pyautomationio-2.0.6 → pyautomationio-2.0.8}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: A python framework to develop automation industrial processes applications and Artificial Intelligence applications for the industrial field
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 2.0.6
3
+ Version: 2.0.8
4
4
  Summary: A python framework to develop automation industrial processes applications and Artificial Intelligence applications for the industrial field
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -43,7 +43,7 @@ automation/hmi/assets/fa-solid-900-CTAAxXor.woff2
43
43
  automation/hmi/assets/fa-solid-900-D0aA9rwL.ttf
44
44
  automation/hmi/assets/fa-v4compatibility-C9RhG_FT.woff2
45
45
  automation/hmi/assets/fa-v4compatibility-CCth-dXg.ttf
46
- automation/hmi/assets/index-ClvaqkQf.js
46
+ automation/hmi/assets/index-B8MiePQP.js
47
47
  automation/hmi/assets/index-fe9Q2n8A.css
48
48
  automation/hmi/industrial_pallete_icons/90° curve 2.svg
49
49
  automation/hmi/industrial_pallete_icons/Analog gauge.svg
@@ -152,6 +152,7 @@ automation/tags/tag.py
152
152
  automation/tests/__init__.py
153
153
  automation/tests/test_alarms.py
154
154
  automation/tests/test_core.py
155
+ automation/tests/test_opcua_serialization.py
155
156
  automation/tests/test_unit.py
156
157
  automation/tests/test_user.py
157
158
  automation/utils/__init__.py
@@ -101,8 +101,11 @@ class Alarm(StateMachine):
101
101
  self.tag_engine = CVTEngine()
102
102
  self.name = name
103
103
  self.tag = tag
104
- self.segment = tag.segment
105
- self.manufacturer = tag.manufacturer
104
+ # Verificar que tag no sea None antes de acceder a sus atributos
105
+ if tag is None:
106
+ raise ValueError(f"Cannot create alarm '{name}': tag is None")
107
+ self.segment = tag.segment if hasattr(tag, 'segment') else None
108
+ self.manufacturer = tag.manufacturer if hasattr(tag, 'manufacturer') else None
106
109
  self.attach(machine=self, tag=tag)
107
110
  self.description = description
108
111
  self.alarm_setpoint = Trigger()
@@ -1963,7 +1963,16 @@ class PyAutomation(Singleton):
1963
1963
  return self.opcua_client_manager.get_node_attributes(client_name=client_name, namespaces=namespaces)
1964
1964
 
1965
1965
  @logging_error_handler
1966
- def get_opcua_tree(self, client_name:str):
1966
+ def get_opcua_tree(
1967
+ self,
1968
+ client_name: str,
1969
+ *,
1970
+ mode: str = "generic",
1971
+ max_depth: int = 10,
1972
+ max_nodes: int = 50_000,
1973
+ include_properties: bool = True,
1974
+ include_property_values: bool = False,
1975
+ ):
1967
1976
  r"""
1968
1977
  Retrieves the hierarchical node tree structure from a connected OPC UA server.
1969
1978
 
@@ -1987,7 +1996,61 @@ class PyAutomation(Singleton):
1987
1996
 
1988
1997
  ```
1989
1998
  """
1990
- return self.opcua_client_manager.get_opcua_tree(client_name=client_name)
1999
+ return self.opcua_client_manager.get_opcua_tree(
2000
+ client_name=client_name,
2001
+ mode=mode,
2002
+ max_depth=max_depth,
2003
+ max_nodes=max_nodes,
2004
+ include_properties=include_properties,
2005
+ include_property_values=include_property_values,
2006
+ )
2007
+
2008
+ @logging_error_handler
2009
+ def get_opcua_tree_children(
2010
+ self,
2011
+ client_name: str,
2012
+ node_id: str,
2013
+ *,
2014
+ mode: str = "generic",
2015
+ max_nodes: int = 5_000,
2016
+ include_properties: bool = True,
2017
+ include_property_values: bool = False,
2018
+ fallback_to_legacy: bool = True,
2019
+ ):
2020
+ """
2021
+ Devuelve los hijos directos de un NodeId (lazy-loading), para expandir carpetas profundas
2022
+ desde el HMI sin pedir todo el árbol.
2023
+ """
2024
+ return self.opcua_client_manager.get_opcua_tree_children(
2025
+ client_name=client_name,
2026
+ node_id=node_id,
2027
+ mode=mode,
2028
+ max_nodes=max_nodes,
2029
+ include_properties=include_properties,
2030
+ include_property_values=include_property_values,
2031
+ fallback_to_legacy=fallback_to_legacy,
2032
+ )
2033
+
2034
+ @logging_error_handler
2035
+ def get_opcua_variables(
2036
+ self,
2037
+ client_name: str,
2038
+ *,
2039
+ mode: str = "generic",
2040
+ max_depth: int = 20,
2041
+ max_nodes: int = 50_000,
2042
+ fallback_to_legacy: bool = True,
2043
+ ):
2044
+ """
2045
+ Devuelve SOLO Variables del servidor OPC UA (para dropdowns de Tags).
2046
+ """
2047
+ return self.opcua_client_manager.get_opcua_variables(
2048
+ client_name=client_name,
2049
+ mode=mode,
2050
+ max_depth=max_depth,
2051
+ max_nodes=max_nodes,
2052
+ fallback_to_legacy=fallback_to_legacy,
2053
+ )
1991
2054
 
1992
2055
  @logging_error_handler
1993
2056
  @validate_types(client_name=str, host=str|type(None), port=int|type(None), output=(bool, str|dict))
@@ -3206,14 +3269,14 @@ class PyAutomation(Singleton):
3206
3269
  print(_colorize_message(f"[{str_date}] [INFO] {len(tags_machine)} tags found for state machine {machine.name.value} in database", "INFO"))
3207
3270
  for tag_machine in tags_machine:
3208
3271
 
3209
- logging.info(f"Loading tag {tag_machine.name} from database")
3210
- print(_colorize_message(f"[{str_date}] [INFO] Loading tag {tag_machine.name} from database", "INFO"))
3211
3272
  _tag = tag_machine.serialize()
3212
3273
  tag_name = _tag["tag"]["name"]
3274
+ logging.info(f"Loading tag {tag_name} from database")
3275
+ print(_colorize_message(f"[{str_date}] [INFO] Loading tag {tag_name} from database", "INFO"))
3213
3276
  tag = self.cvt.get_tag_by_name(name=tag_name)
3214
3277
  machine.subscribe_to(tag=tag, default_tag_name=_tag["default_tag_name"])
3215
- logging.info(f"Tag {tag_machine.name} loaded from database")
3216
- print(_colorize_message(f"[{str_date}] [INFO] Tag {tag_machine.name} loaded from database", "INFO"))
3278
+ logging.info(f"Tag {tag_name} loaded from database")
3279
+ print(_colorize_message(f"[{str_date}] [INFO] Tag {tag_name} loaded from database", "INFO"))
3217
3280
  else:
3218
3281
  logging.info(f"State machine {machine.name.value} is a data acquisition system, skipping tag subscriptions")
3219
3282
  print(_colorize_message(f"[{str_date}] [INFO] State machine {machine.name.value} is a data acquisition system, skipping tag subscriptions", "INFO"))
@@ -3307,7 +3370,7 @@ class PyAutomation(Singleton):
3307
3370
  ack_timestamp=str|type(None),
3308
3371
  user=User|type(None),
3309
3372
  reload=bool,
3310
- output=(Alarm, str)
3373
+ output=(Alarm|type(None), str)
3311
3374
  )
3312
3375
  def create_alarm(
3313
3376
  self,
@@ -3359,7 +3422,7 @@ class PyAutomation(Singleton):
3359
3422
  8.5
3360
3423
  ```
3361
3424
  """
3362
- alarm, message = self.alarm_manager.append_alarm(
3425
+ result = self.alarm_manager.append_alarm(
3363
3426
  name=name,
3364
3427
  tag=tag,
3365
3428
  type=alarm_type,
@@ -3374,6 +3437,12 @@ class PyAutomation(Singleton):
3374
3437
  sio=self.sio
3375
3438
  )
3376
3439
 
3440
+ # Verificar que result no sea None antes de desempaquetar
3441
+ if result is None:
3442
+ return None, f"Failed to create alarm '{name}': append_alarm returned None"
3443
+
3444
+ alarm, message = result
3445
+
3377
3446
  if alarm:
3378
3447
 
3379
3448
  # Persist Tag on Database