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.
- pyautomationio-2.0.1/PKG-INFO +475 -0
- pyautomationio-2.0.1/PyAutomationIO.egg-info/PKG-INFO +475 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/SOURCES.txt +10 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/requires.txt +2 -4
- pyautomationio-2.0.1/README.md +420 -0
- pyautomationio-2.0.1/automation/__init__.py +96 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/__init__.py +13 -2
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/core.py +485 -44
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/alarms.py +83 -18
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/events.py +77 -6
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/logs.py +109 -12
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/users.py +28 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/alarms.py +10 -7
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/logs.py +27 -8
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/users.py +27 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/alarms.py +24 -3
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/db.py +7 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/opcua_client.py +6 -4
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/__init__.py +9 -1
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/alarms.py +228 -3
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/summary.py +39 -6
- pyautomationio-2.0.1/automation/modules/database/resources/__init__.py +9 -0
- pyautomationio-2.0.1/automation/modules/database/resources/database.py +150 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/events.py +40 -7
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/logs.py +74 -8
- pyautomationio-2.0.1/automation/modules/machines/__init__.py +2 -0
- pyautomationio-2.0.1/automation/modules/machines/resources/__init__.py +9 -0
- pyautomationio-2.0.1/automation/modules/machines/resources/machines.py +290 -0
- pyautomationio-2.0.1/automation/modules/opcua/resources/__init__.py +11 -0
- pyautomationio-2.0.1/automation/modules/opcua/resources/clients.py +425 -0
- pyautomationio-2.0.1/automation/modules/opcua/resources/server.py +116 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/resources/settings.py +19 -22
- pyautomationio-2.0.1/automation/modules/tags/__init__.py +0 -0
- pyautomationio-2.0.1/automation/modules/tags/resources/tags.py +603 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/users.py +4 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/users.py +116 -5
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/users.py +26 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/models.py +1 -1
- pyautomationio-2.0.1/automation/pages/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/requirements.txt +3 -7
- pyautomationio-2.0.1/version.py +2 -0
- pyautomationio-1.1.13/PKG-INFO +0 -200
- pyautomationio-1.1.13/PyAutomationIO.egg-info/PKG-INFO +0 -200
- pyautomationio-1.1.13/README.md +0 -143
- pyautomationio-1.1.13/automation/__init__.py +0 -50
- pyautomationio-1.1.13/automation/modules/tags/resources/tags.py +0 -290
- pyautomationio-1.1.13/version.py +0 -2
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/LICENSE +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/MANIFEST.in +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/PyAutomationIO.egg-info/top_level.txt +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/states.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/alarms/trigger.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/buffer.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/core.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/machines.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/opcua.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/opcua_server.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/dbmodels/tags.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/api.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/extensions/cors.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/filter/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/frozen_data.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/out_of_range.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/iad/outliers.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/core.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/datalogger.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/events.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/logdict.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/machines.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/logger/opcua_server.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/managers/state_machine.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/models.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/alarms/resources/__init__.py +0 -0
- {pyautomationio-1.1.13/automation/modules/events → pyautomationio-2.0.1/automation/modules/database}/__init__.py +0 -0
- {pyautomationio-1.1.13/automation/modules/tags → pyautomationio-2.0.1/automation/modules/events}/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/events/resources/__init__.py +0 -0
- {pyautomationio-1.1.13/automation/pages → pyautomationio-2.0.1/automation/modules/opcua}/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/settings/resources/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/tags/resources/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/models/roles.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/resources/roles.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/modules/users/roles.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/opcua/subscription.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/alarms.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/alarms_history.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/assets/styles.css +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/alarms.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/alarms_summary.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/db.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/filter.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/machines.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/machines_detailed.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/opcua.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/opcua_server.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/tags.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/callbacks/trends.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/communications.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/alarms.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/alarms_summary.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/database.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/gaussian_filter.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/machines.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/opcua.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/opcua_server.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/tags.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/components/trends.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/database.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/filter.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/machines.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/machines_detailed.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/main.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/opcua_server.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/tags.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/pages/trends.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/singleton.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/state_machine.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/cvt.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/filter.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tags/tag.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_alarms.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_core.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_unit.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/tests/test_user.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/decorators.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/observer.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/utils/units.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/adimentional.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/current.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/density.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/eng_time.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/force.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/length.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/mass.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/mass_flow.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/percentage.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/power.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/pressure.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/temperature.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/volume.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/variables/volumetric_flow.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/__init__.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/logger.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/state_machine.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/automation/workers/worker.py +0 -0
- {pyautomationio-1.1.13 → pyautomationio-2.0.1}/setup.cfg +0 -0
- {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
|
+
[](https://pyautomation.readthedocs.io/en/latest/?badge=latest)
|
|
63
|
+
[](https://opensource.org/licenses/MIT)
|
|
64
|
+
[](https://www.python.org/downloads/release/python-3100/)
|
|
65
|
+
[](https://www.docker.com/)
|
|
66
|
+
[](https://opcfoundation.org/)
|
|
67
|
+
[](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
|
+

|
|
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
|
+

|
|
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
|
+
[](https://pyautomation.readthedocs.io/)
|
|
469
|
+
[](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>
|