PyAutomationIO 1.1.13__tar.gz → 2.0.1__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 (164) hide show
  1. pyautomationio-2.0.1/PKG-INFO +475 -0
  2. pyautomationio-2.0.1/PyAutomationIO.egg-info/PKG-INFO +475 -0
  3. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/SOURCES.txt +10 -0
  4. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/requires.txt +2 -4
  5. pyautomationio-2.0.1/README.md +420 -0
  6. pyautomationio-2.0.1/automation/__init__.py +96 -0
  7. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/__init__.py +13 -2
  8. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/core.py +485 -44
  9. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/alarms.py +83 -18
  10. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/events.py +77 -6
  11. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/logs.py +109 -12
  12. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/users.py +28 -0
  13. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/alarms.py +10 -7
  14. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/logs.py +27 -8
  15. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/users.py +27 -0
  16. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/alarms.py +24 -3
  17. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/db.py +7 -0
  18. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/opcua_client.py +6 -4
  19. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/__init__.py +9 -1
  20. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/alarms.py +228 -3
  21. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/summary.py +39 -6
  22. pyautomationio-2.0.1/automation/modules/database/resources/__init__.py +9 -0
  23. pyautomationio-2.0.1/automation/modules/database/resources/database.py +150 -0
  24. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/events.py +40 -7
  25. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/logs.py +74 -8
  26. pyautomationio-2.0.1/automation/modules/machines/__init__.py +2 -0
  27. pyautomationio-2.0.1/automation/modules/machines/resources/__init__.py +9 -0
  28. pyautomationio-2.0.1/automation/modules/machines/resources/machines.py +290 -0
  29. pyautomationio-2.0.1/automation/modules/opcua/resources/__init__.py +11 -0
  30. pyautomationio-2.0.1/automation/modules/opcua/resources/clients.py +425 -0
  31. pyautomationio-2.0.1/automation/modules/opcua/resources/server.py +116 -0
  32. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/resources/settings.py +19 -22
  33. pyautomationio-2.0.1/automation/modules/tags/__init__.py +0 -0
  34. pyautomationio-2.0.1/automation/modules/tags/resources/tags.py +603 -0
  35. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/users.py +4 -0
  36. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/users.py +116 -5
  37. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/users.py +26 -0
  38. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/models.py +1 -1
  39. pyautomationio-2.0.1/automation/pages/__init__.py +0 -0
  40. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/requirements.txt +3 -7
  41. pyautomationio-2.0.1/version.py +2 -0
  42. pyautomationio-1.1.13/PKG-INFO +0 -200
  43. pyautomationio-1.1.13/PyAutomationIO.egg-info/PKG-INFO +0 -200
  44. pyautomationio-1.1.13/README.md +0 -143
  45. pyautomationio-1.1.13/automation/__init__.py +0 -50
  46. pyautomationio-1.1.13/automation/modules/tags/resources/tags.py +0 -290
  47. pyautomationio-1.1.13/version.py +0 -2
  48. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/LICENSE +0 -0
  49. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/MANIFEST.in +0 -0
  50. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
  51. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/top_level.txt +0 -0
  52. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/states.py +0 -0
  53. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/trigger.py +0 -0
  54. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/buffer.py +0 -0
  55. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/__init__.py +0 -0
  56. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/core.py +0 -0
  57. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/machines.py +0 -0
  58. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/opcua.py +0 -0
  59. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/opcua_server.py +0 -0
  60. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/tags.py +0 -0
  61. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/__init__.py +0 -0
  62. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/api.py +0 -0
  63. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/cors.py +0 -0
  64. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/filter/__init__.py +0 -0
  65. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/__init__.py +0 -0
  66. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/frozen_data.py +0 -0
  67. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/out_of_range.py +0 -0
  68. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/outliers.py +0 -0
  69. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/__init__.py +0 -0
  70. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/core.py +0 -0
  71. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/datalogger.py +0 -0
  72. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/events.py +0 -0
  73. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/logdict.py +0 -0
  74. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/machines.py +0 -0
  75. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/opcua_server.py +0 -0
  76. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/__init__.py +0 -0
  77. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/state_machine.py +0 -0
  78. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/models.py +0 -0
  79. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/__init__.py +0 -0
  80. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/__init__.py +0 -0
  81. {pyautomationio-1.1.13/automation/modules/events → pyautomationio-2.0.1/automation/modules/database}/__init__.py +0 -0
  82. {pyautomationio-1.1.13/automation/modules/tags → pyautomationio-2.0.1/automation/modules/events}/__init__.py +0 -0
  83. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/__init__.py +0 -0
  84. {pyautomationio-1.1.13/automation/pages → pyautomationio-2.0.1/automation/modules/opcua}/__init__.py +0 -0
  85. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/__init__.py +0 -0
  86. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/resources/__init__.py +0 -0
  87. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/tags/resources/__init__.py +0 -0
  88. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/__init__.py +0 -0
  89. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/__init__.py +0 -0
  90. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/__init__.py +0 -0
  91. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/roles.py +0 -0
  92. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/roles.py +0 -0
  93. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/roles.py +0 -0
  94. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/__init__.py +0 -0
  95. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/subscription.py +0 -0
  96. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/alarms.py +0 -0
  97. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/alarms_history.py +0 -0
  98. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/assets/styles.css +0 -0
  99. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/__init__.py +0 -0
  100. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/alarms.py +0 -0
  101. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/alarms_summary.py +0 -0
  102. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/db.py +0 -0
  103. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/filter.py +0 -0
  104. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/machines.py +0 -0
  105. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/machines_detailed.py +0 -0
  106. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/opcua.py +0 -0
  107. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/opcua_server.py +0 -0
  108. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/tags.py +0 -0
  109. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/trends.py +0 -0
  110. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/communications.py +0 -0
  111. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/__init__.py +0 -0
  112. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/alarms.py +0 -0
  113. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/alarms_summary.py +0 -0
  114. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/database.py +0 -0
  115. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/gaussian_filter.py +0 -0
  116. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/machines.py +0 -0
  117. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/opcua.py +0 -0
  118. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/opcua_server.py +0 -0
  119. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/tags.py +0 -0
  120. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/trends.py +0 -0
  121. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/database.py +0 -0
  122. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/filter.py +0 -0
  123. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/machines.py +0 -0
  124. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/machines_detailed.py +0 -0
  125. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/main.py +0 -0
  126. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/opcua_server.py +0 -0
  127. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/tags.py +0 -0
  128. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/trends.py +0 -0
  129. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/singleton.py +0 -0
  130. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/state_machine.py +0 -0
  131. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/__init__.py +0 -0
  132. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/cvt.py +0 -0
  133. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/filter.py +0 -0
  134. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/tag.py +0 -0
  135. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/__init__.py +0 -0
  136. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_alarms.py +0 -0
  137. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_core.py +0 -0
  138. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_unit.py +0 -0
  139. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_user.py +0 -0
  140. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/__init__.py +0 -0
  141. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/decorators.py +0 -0
  142. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/observer.py +0 -0
  143. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/units.py +0 -0
  144. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/__init__.py +0 -0
  145. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/adimentional.py +0 -0
  146. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/current.py +0 -0
  147. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/density.py +0 -0
  148. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/eng_time.py +0 -0
  149. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/force.py +0 -0
  150. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/length.py +0 -0
  151. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/mass.py +0 -0
  152. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/mass_flow.py +0 -0
  153. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/percentage.py +0 -0
  154. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/power.py +0 -0
  155. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/pressure.py +0 -0
  156. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/temperature.py +0 -0
  157. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/volume.py +0 -0
  158. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/volumetric_flow.py +0 -0
  159. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/__init__.py +0 -0
  160. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/logger.py +0 -0
  161. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/state_machine.py +0 -0
  162. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/worker.py +0 -0
  163. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/setup.cfg +0 -0
  164. {pyautomationio-1.1.13 → pyautomationio-2.0.1}/setup.py +0 -0
@@ -0,0 +1,475 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyAutomationIO
3
+ Version: 2.0.1
4
+ Summary: A python framework to develop automation industrial processes applications and Artificial Intelligence applications for the industrial field
5
+ Home-page: https://github.com/know-ai/PyAutomation
6
+ Author: KnowAI
7
+ Author-email: dev.know.ai@gmail.com
8
+ License: GNU AFFERO GENERAL PUBLIC LICENSE
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Topic :: Software Development :: Libraries
17
+ Classifier: Topic :: System :: Logging
18
+ Classifier: Topic :: System :: Monitoring
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ Requires-Dist: python-statemachine==2.4.0
22
+ Requires-Dist: python-statemachine[diagrams]
23
+ Requires-Dist: peewee==3.18.3
24
+ Requires-Dist: psycopg2-binary==2.9.9; sys_platform != "win32"
25
+ Requires-Dist: psycopg2==2.9.9; sys_platform == "win32"
26
+ Requires-Dist: numpy==1.25.0; python_version <= "3.11"
27
+ Requires-Dist: numpy==1.26.0; python_version == "3.12"
28
+ Requires-Dist: numpy==2.0.0; python_version == "3.13"
29
+ Requires-Dist: numpy==2.1.0; python_version >= "3.14"
30
+ Requires-Dist: PyWavelets==1.6.0; python_version == "3.9"
31
+ Requires-Dist: PyWavelets==1.7.0; python_version >= "3.10" and python_version <= "3.11"
32
+ Requires-Dist: PyWavelets==1.9.0; python_version >= "3.12" and python_version <= "3.14"
33
+ Requires-Dist: opcua==0.98.13
34
+ Requires-Dist: python-dotenv==1.2.1
35
+ Requires-Dist: cryptography==43.0.3
36
+ Requires-Dist: Flask==3.1.2
37
+ Requires-Dist: requests==2.32.5
38
+ Requires-Dist: Flask-Cors==6.0.1
39
+ Requires-Dist: flask-restx==1.3.2
40
+ Requires-Dist: Flask-SocketIO==5.5.1
41
+ Requires-Dist: gunicorn==23.0.0
42
+ Requires-Dist: websocket-client==1.9.0
43
+ Requires-Dist: gevent-websocket==0.10.1
44
+ Requires-Dist: PyJWT==2.10.1
45
+ Dynamic: author
46
+ Dynamic: author-email
47
+ Dynamic: classifier
48
+ Dynamic: description
49
+ Dynamic: description-content-type
50
+ Dynamic: home-page
51
+ Dynamic: license
52
+ Dynamic: license-file
53
+ Dynamic: requires-dist
54
+ Dynamic: summary
55
+
56
+ <div align="center">
57
+
58
+ # PyAutomation 2.0.0
59
+
60
+ ### Industrial Automation Meets Modern Web Technology
61
+
62
+ [![Documentation Status](https://readthedocs.org/projects/pyautomation/badge/?version=latest)](https://pyautomation.readthedocs.io/en/latest/?badge=latest)
63
+ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
64
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/release/python-3100/)
65
+ [![Docker](https://img.shields.io/badge/docker-ready-blue.svg)](https://www.docker.com/)
66
+ [![OPC UA](https://img.shields.io/badge/OPC--UA-compliant-orange.svg)](https://opcfoundation.org/)
67
+ [![ISA-18.2](https://img.shields.io/badge/ISA--18.2-compliant-green.svg)](https://www.isa.org/)
68
+
69
+ **Empowering Industry 4.0 with Python, React, and Open Standards**
70
+
71
+ [Features](#-features) • [Quick Start](#-quick-start) • [Documentation](#-documentation) • [Contributing](#-contributing)
72
+
73
+ </div>
74
+
75
+ ---
76
+
77
+ ## 🚀 What is PyAutomation?
78
+
79
+ **PyAutomation** is a comprehensive, enterprise-grade Python framework designed for Industrial IoT (IIoT) and Automation projects. Version 2.0.0 introduces a **revolutionary modern React-based web interface** that combines powerful industrial automation capabilities with an exceptional user experience.
80
+
81
+ PyAutomation serves as the **bridge between Operational Technology (OT) and Information Technology (IT)**, enabling seamless integration of industrial systems with modern web applications and data analytics platforms.
82
+
83
+ ![PyAutomation Dashboard](docs/Users_Guide/images/FirstPageAfterLogin.png)
84
+
85
+ *PyAutomation 2.0.0 - Modern React-based Human Machine Interface (HMI)*
86
+
87
+ ---
88
+
89
+ ## 💥 The Open Source Revolution
90
+
91
+ <div align="center">
92
+
93
+ ### 🎯 Enterprise-Grade Features. Zero Cost. Open Source.
94
+
95
+ **PyAutomation delivers the same industrial automation power as traditional SCADA systems**—monitoring, alarm management, data logging, real-time trends, and more—**completely FREE**.
96
+
97
+ </div>
98
+
99
+ ### Why Open Source Wins
100
+
101
+ | Traditional SCADA | PyAutomation |
102
+ |-------------------|--------------|
103
+ | 💰 Expensive licensing (per-seat, per-tag) | ✅ **FREE forever** |
104
+ | 🔒 Proprietary, vendor lock-in | ✅ **Open source, full control** |
105
+ | 📈 High initial costs (6-figure investments) | ✅ **Zero upfront costs** |
106
+ | 💸 Annual maintenance fees | ✅ **No ongoing fees** |
107
+ | 🚫 Limited customization | ✅ **Fully customizable** |
108
+
109
+ **You get the same power. You get the same reliability. You get the same features. But you pay $0. Forever.**
110
+
111
+ ---
112
+
113
+ ## ✨ Features
114
+
115
+ ### 🎨 Modern Web Interface (v2.0.0)
116
+
117
+ - **React-Based HMI**: Fast, responsive, and intuitive user experience
118
+ - **Real-Time Updates**: Live data visualization without page refreshes
119
+ - **Mobile-Friendly**: Responsive design that adapts to different screen sizes
120
+ - **Dark/Light Themes**: Customizable interface themes
121
+ - **Multi-Language Support**: Internationalization ready
122
+
123
+ ### 🔌 Industrial Connectivity
124
+
125
+ - **OPC UA Client & Server**: Native support for OPC UA protocol
126
+ - **Multi-Connection Support**: Connect to multiple OPC UA servers simultaneously
127
+ - **Data Acquisition**:
128
+ - **DAQ**: Polling-based data collection
129
+ - **DAS**: Event-driven data collection by subscription
130
+ - **Node Browser**: Visual exploration of OPC UA address spaces
131
+
132
+ ### 📊 Real-Time Monitoring & Visualization
133
+
134
+ - **Current Value Table (CVT)**: In-memory real-time database for fast access
135
+ - **Real-Time Trends**: Configurable strip charts with multiple tags
136
+ - **Custom Dashboards**: Drag-and-drop dashboard customization
137
+ - **Historical Trends**: Long-term data visualization and analysis
138
+
139
+ ### 🚨 Alarm Management
140
+
141
+ - **ISA-18.2 Compliant**: Industry-standard alarm management
142
+ - **Multiple Alarm Types**: BOOL, HIGH, LOW, HIGH-HIGH, LOW-LOW
143
+ - **State Management**: Complete lifecycle tracking
144
+ - **Alarm History**: Comprehensive audit trail
145
+ - **Export Capabilities**: CSV export for compliance reporting
146
+
147
+ ### 💾 Data Logging & Persistence
148
+
149
+ - **Multi-Database Support**: SQLite, PostgreSQL, MySQL
150
+ - **Historical Data Logging**: Configurable sampling rates
151
+ - **Event Logging**: Complete system event tracking
152
+ - **Operational Logs**: Manual log entry for documentation
153
+ - **Data Export**: Flexible filtering and export capabilities
154
+
155
+ ### 🔐 Security & User Management
156
+
157
+ - **Role-Based Access Control (RBAC)**: Admin, Operator, Guest roles
158
+ - **Secure Authentication**: Password management and policies
159
+ - **User Administration**: Complete user lifecycle management
160
+ - **Audit Trails**: Comprehensive activity logging
161
+
162
+ ### ⚙️ State Machines & Concurrency
163
+
164
+ - **Concurrent Execution**: Run multiple state machines in parallel
165
+ - **State Machine Framework**: Define complex control logic
166
+ - **Machine Monitoring**: Real-time state machine status
167
+ - **Interval Configuration**: Performance tuning capabilities
168
+
169
+ ### 🔧 Extensibility
170
+
171
+ - **Modular Architecture**: Easy to extend with custom logic
172
+ - **RESTful API**: Full API access for integration
173
+ - **Custom State Machines**: Build your own automation logic
174
+ - **Plugin Support**: Extensible driver and logger system
175
+
176
+ ---
177
+
178
+ ## 🎯 What You Can Do
179
+
180
+ ### 🔍 Monitoring System
181
+ Comprehensive real-time monitoring with intuitive dashboards and live data visualization.
182
+
183
+ ### 📊 Real-Time Trends
184
+ Advanced strip chart visualization with configurable dashboards and multiple chart support.
185
+
186
+ ### 🚨 Alarm Management
187
+ Enterprise-grade alarm management following ISA-18.2 standards.
188
+
189
+ ### 💾 Historical Data Logging
190
+ Comprehensive historical data logging for trend analysis and compliance.
191
+
192
+ ### 👥 User Management
193
+ Robust user management with role-based access control.
194
+
195
+ ### 🔮 Coming Soon
196
+ - **Configurable SCADA Diagram Access**: Customizable SCADA diagram access with visual process flows
197
+ - **Role-Based View Access Control**: Granular permissions for dashboard and view access
198
+ - **Modbus TCP**: Direct integration with Modbus-enabled devices
199
+ - **MQTT**: IoT and cloud connectivity support
200
+
201
+ ---
202
+
203
+ ## 🚀 Quick Start
204
+
205
+ ### Prerequisites
206
+
207
+ - Python 3.10 or higher
208
+ - Docker and Docker Compose (recommended)
209
+ - pip and virtualenv (for local setup)
210
+
211
+ ### Option 1: Docker Deployment (Recommended)
212
+
213
+ 1. **Clone the repository:**
214
+
215
+ ```bash
216
+ git clone https://github.com/know-ai/PyAutomation.git
217
+ cd PyAutomation
218
+ ```
219
+
220
+ 2. **Create an `.env` file:**
221
+
222
+ ```ini
223
+ AUTOMATION_PORT=8050
224
+ AUTOMATION_HMI_PORT=3000
225
+ AUTOMATION_VERSION=latest
226
+ AUTOMATION_OPCUA_SERVER_PORT=53530
227
+ AUTOMATION_APP_SECRET_KEY="CHANGE_ME_TO_A_SECURE_RANDOM_VALUE"
228
+ AUTOMATION_SUPERUSER_PASSWORD="CHANGE_ME_SUPERUSER_PASSWORD"
229
+ ```
230
+
231
+ 3. **Create a `docker-compose.yml`:**
232
+
233
+ ```yaml
234
+ services:
235
+ automation:
236
+ container_name: "Automation"
237
+ image: "knowai/automation:${AUTOMATION_VERSION:-latest}"
238
+ restart: always
239
+ ports:
240
+ - ${AUTOMATION_PORT:-8050}:${AUTOMATION_PORT:-8050}
241
+ - ${AUTOMATION_HMI_PORT:-3000}:3000
242
+ volumes:
243
+ - automation_db:/app/db
244
+ - automation_logs:/app/logs
245
+ environment:
246
+ AUTOMATION_OPCUA_SERVER_PORT: ${AUTOMATION_OPCUA_SERVER_PORT:-53530}
247
+ AUTOMATION_APP_SECRET_KEY: ${AUTOMATION_APP_SECRET_KEY}
248
+ AUTOMATION_SUPERUSER_PASSWORD: ${AUTOMATION_SUPERUSER_PASSWORD}
249
+ healthcheck:
250
+ test: ["CMD", "python", "/app/healthcheck.py"]
251
+ interval: 15s
252
+ timeout: 10s
253
+ retries: 3
254
+
255
+ volumes:
256
+ automation_db:
257
+ automation_logs:
258
+ ```
259
+
260
+ 4. **Start the service:**
261
+
262
+ ```bash
263
+ docker-compose --env-file .env up -d
264
+ ```
265
+
266
+ 5. **Access the HMI:**
267
+
268
+ Open your browser and navigate to `http://localhost:3000` (or your configured HMI port).
269
+
270
+ ### Option 2: Local Development Setup
271
+
272
+ 1. **Clone the repository:**
273
+
274
+ ```bash
275
+ git clone https://github.com/know-ai/PyAutomation.git
276
+ cd PyAutomation
277
+ ```
278
+
279
+ 2. **Create a virtual environment:**
280
+
281
+ ```bash
282
+ python3 -m venv venv
283
+ source venv/bin/activate # On Windows: venv\Scripts\activate
284
+ ```
285
+
286
+ 3. **Install dependencies:**
287
+
288
+ ```bash
289
+ pip install --upgrade pip
290
+ pip install -r requirements.txt
291
+ ```
292
+
293
+ 4. **Run the application:**
294
+
295
+ ```bash
296
+ ./docker-entrypoint.sh
297
+ # Or directly:
298
+ # python wsgi.py
299
+ ```
300
+
301
+ 5. **Access the application:**
302
+
303
+ Open your browser and navigate to `http://localhost:8050`.
304
+
305
+ ---
306
+
307
+ ## 📚 Documentation
308
+
309
+ Comprehensive documentation is available at **[Read the Docs](https://pyautomation.readthedocs.io/)**.
310
+
311
+ ### Documentation Sections
312
+
313
+ - **[User Guide](https://pyautomation.readthedocs.io/en/latest/Users_Guide/index.html)**: Complete guide for operators and engineers
314
+ - Tags Management
315
+ - Alarm Configuration
316
+ - Database Setup
317
+ - Real-Time Trends
318
+ - User Management
319
+ - And much more...
320
+
321
+ - **[Developer Guide](https://pyautomation.readthedocs.io/en/latest/Developments_Guide/index.html)**: For developers and integrators
322
+ - Architecture Overview
323
+ - API Reference
324
+ - State Machine Development
325
+ - Custom Extensions
326
+
327
+ - **[Quick Start Guide](https://pyautomation.readthedocs.io/en/latest/Users_Guide/QuickStart.html)**: Get up and running quickly with Docker
328
+
329
+ ---
330
+
331
+ ## 🏗️ Architecture
332
+
333
+ PyAutomation is built on a modular, extensible architecture:
334
+
335
+ ![Core Architecture](docs/img/PyAutomationCore.svg)
336
+
337
+ ### Core Components
338
+
339
+ - **State Machines**: Concurrent execution engine for automation logic
340
+ - **CVT (Current Value Table)**: In-memory real-time database
341
+ - **OPC UA Client/Server**: Industrial protocol integration
342
+ - **Data Logger**: Historical data persistence
343
+ - **Alarm Manager**: ISA-18.2 compliant alarm system
344
+ - **Web Server**: React-based HMI with RESTful API
345
+
346
+ ---
347
+
348
+ ## 🎯 Use Cases
349
+
350
+ ### 🏭 Industrial Monitoring
351
+ Real-time monitoring of process variables, equipment status, and system health.
352
+
353
+ ### 📊 Process Visualization
354
+ Create custom dashboards and strip charts for live process visualization.
355
+
356
+ ### 🚨 Alarm Management
357
+ Enterprise-grade alarm handling with complete lifecycle management.
358
+
359
+ ### 📈 Data Analytics
360
+ Historical data logging and analysis for process optimization.
361
+
362
+ ### 🔐 Secure Operations
363
+ Role-based access control and comprehensive audit trails.
364
+
365
+ ### 🔌 System Integration
366
+ OPC UA integration for seamless connectivity with industrial systems.
367
+
368
+ ---
369
+
370
+ ## 🌟 Why Choose PyAutomation?
371
+
372
+ ### Modern Technology Stack
373
+ - ✅ React-based interface for exceptional UX
374
+ - ✅ Python backend for flexibility and power
375
+ - ✅ Open standards (OPC UA, ISA-18.2)
376
+ - ✅ Docker-ready for easy deployment
377
+
378
+ ### Enterprise Features
379
+ - ✅ Comprehensive monitoring and visualization
380
+ - ✅ Industry-standard alarm management
381
+ - ✅ Secure user management
382
+ - ✅ Reliable data logging
383
+ - ✅ Complete audit trails
384
+
385
+ ### Developer Friendly
386
+ - ✅ Well-documented with extensive examples
387
+ - ✅ Modular architecture for easy extension
388
+ - ✅ RESTful API for integration
389
+ - ✅ Open source and community-driven
390
+
391
+ ### Cost Effective
392
+ - ✅ **FREE forever** - No licensing costs
393
+ - ✅ **Open Source** - Full source code access
394
+ - ✅ **No Vendor Lock-in** - Complete freedom
395
+ - ✅ **Community Support** - Active development
396
+
397
+ ---
398
+
399
+ ## 🤝 Contributing
400
+
401
+ We welcome contributions! PyAutomation is an open-source project, and we're excited to work with the community.
402
+
403
+ ### How to Contribute
404
+
405
+ 1. **Fork the repository**
406
+ 2. **Create a feature branch** (`git checkout -b feature/amazing-feature`)
407
+ 3. **Commit your changes** (`git commit -m 'Add some amazing feature'`)
408
+ 4. **Push to the branch** (`git push origin feature/amazing-feature`)
409
+ 5. **Open a Pull Request**
410
+
411
+ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines on:
412
+ - Code of conduct
413
+ - Development setup
414
+ - Coding standards
415
+ - Pull request process
416
+ - Issue reporting
417
+
418
+ ---
419
+
420
+ ## 📄 License
421
+
422
+ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) file for details.
423
+
424
+ The MIT License means you are free to:
425
+ - ✅ Use PyAutomation commercially
426
+ - ✅ Modify the source code
427
+ - ✅ Distribute your modifications
428
+ - ✅ Use privately
429
+
430
+ ---
431
+
432
+ ## 🌐 Community & Support
433
+
434
+ ### Resources
435
+
436
+ - 📖 **[Full Documentation](https://pyautomation.readthedocs.io/)**: Comprehensive guides and API reference
437
+ - 🐛 **[Issue Tracker](https://github.com/know-ai/PyAutomation/issues)**: Report bugs and request features
438
+ - 💬 **[Discussions](https://github.com/know-ai/PyAutomation/discussions)**: Ask questions and share ideas
439
+ - 📧 **Contact**: Reach out through GitHub issues or discussions
440
+
441
+ ### Stay Updated
442
+
443
+ - ⭐ **Star this repository** to stay updated on new releases
444
+ - 🔔 **Watch the repository** for notifications
445
+ - 📢 **Follow our releases** for the latest features
446
+
447
+ ---
448
+
449
+ ## 🎉 Acknowledgments
450
+
451
+ PyAutomation is made possible by:
452
+
453
+ - The **open-source community** and contributors
454
+ - **Industry standards** (OPC UA, ISA-18.2) for interoperability
455
+ - **Modern web technologies** (React, Python, Docker) for innovation
456
+ - **Users and feedback** that drive continuous improvement
457
+
458
+ ---
459
+
460
+ <div align="center">
461
+
462
+ ## 🚀 Ready to Transform Your Industrial Automation?
463
+
464
+ **Start your journey with PyAutomation 2.0.0 today**
465
+
466
+ *Experience the power of modern industrial automation with a world-class user interface*
467
+
468
+ [![Get Started](https://img.shields.io/badge/Get%20Started-Documentation-blue)](https://pyautomation.readthedocs.io/)
469
+ [![Quick Start](https://img.shields.io/badge/Quick%20Start-Docker-green)](https://pyautomation.readthedocs.io/en/latest/Users_Guide/QuickStart.html)
470
+
471
+ **Welcome to PyAutomation 2.0.0 - Where Industrial Excellence Meets Modern Innovation!**
472
+
473
+ Made with ❤️ by the PyAutomation Team
474
+
475
+ </div>