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.
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PKG-INFO +1 -1
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/PKG-INFO +1 -1
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/SOURCES.txt +2 -1
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/__init__.py +5 -2
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/core.py +77 -8
- pyautomationio-2.0.6/automation/hmi/assets/index-ClvaqkQf.js → pyautomationio-2.0.8/automation/hmi/assets/index-B8MiePQP.js +209 -209
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/index.html +1 -1
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/alarms.py +6 -1
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/opcua_client.py +241 -7
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/models.py +4 -0
- pyautomationio-2.0.8/automation/modules/machines/resources/machines.py +655 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/clients.py +101 -2
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/models.py +443 -1
- pyautomationio-2.0.8/automation/tests/test_opcua_serialization.py +43 -0
- pyautomationio-2.0.8/version.py +2 -0
- pyautomationio-2.0.6/automation/modules/machines/resources/machines.py +0 -290
- pyautomationio-2.0.6/version.py +0 -2
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/LICENSE +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/MANIFEST.in +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/requires.txt +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/PyAutomationIO.egg-info/top_level.txt +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/README.md +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/states.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/alarms/trigger.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/buffer.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/core.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/events.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/logs.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/machines.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/opcua.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/opcua_server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/tags.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/dbmodels/users.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/api.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/extensions/cors.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/filter/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/bootstrap-icons-BeopsB42.woff +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/bootstrap-icons-mSm7cUeB.woff2 +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-brands-400-D1LuMI3I.ttf +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-brands-400-D_cYUPeE.woff2 +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-regular-400-BjRzuEpd.woff2 +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-regular-400-DZaxPHgR.ttf +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-solid-900-CTAAxXor.woff2 +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-solid-900-D0aA9rwL.ttf +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-v4compatibility-C9RhG_FT.woff2 +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/fa-v4compatibility-CCth-dXg.ttf +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/assets/index-fe9Q2n8A.css +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/90/302/260 curve 2.svg" +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Analog gauge.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Cool pump.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Hand valve 4.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Mass flowmeter.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Short horizontal pipe.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/hmi/industrial_pallete_icons/Tank 16.svg +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/frozen_data.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/out_of_range.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/iad/outliers.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/core.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/datalogger.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/events.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/logdict.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/logs.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/machines.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/opcua_server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/logger/users.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/db.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/managers/state_machine.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/alarms/resources/summary.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/database/resources/database.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/events.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/events/resources/logs.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/health/resources/health.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/machines/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/machines/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/opcua/resources/server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/settings/resources/settings.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/tags/resources/tags.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/roles.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/models/users.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/roles.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/resources/users.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/roles.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/modules/users/users.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/opcua/subscription.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/alarms_history.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/assets/styles.css +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/alarms_summary.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/db.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/filter.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/machines.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/machines_detailed.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/opcua.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/opcua_server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/tags.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/callbacks/trends.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/communications.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/alarms_summary.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/database.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/gaussian_filter.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/machines.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/opcua.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/opcua_server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/tags.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/components/trends.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/database.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/filter.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/machines.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/machines_detailed.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/main.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/opcua_server.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/tags.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/pages/trends.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/singleton.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/state_machine.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/cvt.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/filter.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tags/tag.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_alarms.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_core.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_unit.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/tests/test_user.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/decorators.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/observer.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/utils/units.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/adimentional.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/current.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/density.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/eng_time.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/force.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/length.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/mass.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/mass_flow.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/percentage.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/power.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/pressure.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/temperature.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/volume.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/variables/volumetric_flow.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/__init__.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/logger.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/state_machine.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/automation/workers/worker.py +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/requirements.txt +0 -0
- {pyautomationio-2.0.6 → pyautomationio-2.0.8}/setup.cfg +0 -0
- {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.
|
|
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.
|
|
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-
|
|
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
|
-
|
|
105
|
-
|
|
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(
|
|
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(
|
|
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 {
|
|
3216
|
-
print(_colorize_message(f"[{str_date}] [INFO] Tag {
|
|
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
|
-
|
|
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
|