Commit Graph

104 Commits

Author SHA1 Message Date
Miguel 81e5ddec57 Refactor PlotHistoricalSession and TimePointSelector components for improved UI and functionality
- Removed the range display box from PlotHistoricalSession for a cleaner layout.
- Updated TimePointSelector to support fullscreen mode with a more compact design.
- Integrated a Popover for date and time selection in fullscreen mode.
- Enhanced the DataAvailabilityBar and slider functionality for better user experience.
- Added responsive styling adjustments for both normal and fullscreen modes.
- Updated system state with the latest last_update timestamp.
2025-08-27 15:34:01 +02:00
Miguel 76c6743537 Add TooltipFieldTemplate for enhanced user experience in forms
- Integrated TooltipFieldTemplate into PlotHistoricalManager, PlotManager, and Dashboard components to provide contextual tooltips for form fields.
- Updated templates in various forms to include the new TooltipFieldTemplate alongside the existing LayoutObjectFieldTemplate.
- Enhanced TooltipFieldTemplate with theme-aware colors and improved styling for better readability.
- Adjusted system state to enable connection and updated the last update timestamp.
2025-08-27 13:04:57 +02:00
Miguel dec3a49836 feat: Enhance application event logging; add tooltips for UI fields and improve PLC configuration descriptions 2025-08-27 12:45:19 +02:00
Miguel cda40ce0ab feat: Update UI schema help texts to descriptions for consistency; add new application event logs and update system state configuration 2025-08-27 12:02:57 +02:00
Miguel 01489aec59 feat: Add Playwright MCP testing suite with various automation scripts
- Implemented test client for Playwright MCP Server in `test-server.js`
- Created global automation script for Playwright MCP-like functionality in `playwright-mcp-global.js`
- Configured Playwright settings in `playwright.config.js`
- Added quick start script for testing setup in `quick-start.sh`
- Developed initial setup script for Playwright MCP configuration in `setup.js`
- Created basic connectivity and configuration tests in `tests/basic.spec.js` and `tests/configuration.spec.js`
- Implemented dashboard and plotting tests in `tests/dashboard.spec.js` and `tests/plotting.spec.js`
- Added data streaming feature tests in `tests/streaming.spec.js`
2025-08-27 10:16:08 +02:00
Miguel 1b6528977a feat: Update PLC configuration to support absolute and relative paths for records and symbols
- Changed records_directory in plc_config.json to an absolute path.
- Enhanced plc.schema.json to allow absolute and relative paths for records_directory and symbols_path with path-browser widget.
- Updated ui schema to reflect changes in records_directory and symbols_path with appropriate help texts.
- Modified ConfigManager to handle symbols_path in PLC configuration updates.
- Added functionality in PLCDataStreamer and schema_manager to manage symbols_path.
- Implemented Load Symbols button in PLCConfigManager and Dashboard components to load symbols from ASC files.
- Created new PathBrowserWidget for browsing files and directories, supporting both absolute and relative paths.
- Added SimpleFilePathWidget for simplified file path selection.
- Introduced DirectoryBrowserWidget for directory selection.
- Updated main.py to handle loading symbols from ASC files and browsing directories.
2025-08-27 09:24:41 +02:00
Miguel e77a5c3932 Refactor dataset variable schemas and UI handling in Dashboard component for improved clarity and external schema compatibility; streamline variable configuration process. 2025-08-25 18:43:43 +02:00
Miguel 551ec8b4a5 Refactor dataset variable areas to uppercase, update plot definitions and variables, and enhance UI schema for better clarity and consistency
- Changed memory area identifiers in dataset_variables.json and related schemas from lowercase to uppercase (e.g., "db" to "DB").
- Added new plot definition for "CTS306 Conductivimeter" in plot_definitions.json.
- Updated plot_variables.json to include new variables for "HMI_Instrument.QTM306.PVFiltered" and "HMI_Instrument.QTM307.PVFiltered".
- Enhanced dataset-variables.schema.json to enforce required fields based on area and type.
- Improved ui schema for dataset variables to provide clearer guidance on field usage.
- Updated PLC client to utilize new snap7.type module and improved error handling.
- Added support for new data types (DWORD) in PlcDataTypeWidget.
- Updated Dashboard.jsx to reflect changes in memory area identifiers and improve default configurations.
- Upgraded python-snap7 dependency to version 2.0.2 for enhanced functionality.
- Modified system_state.json to reflect changes in connection status and last update timestamp.
- Implemented optimized batch reading logic in optimized_batch_reader.py to support new area mappings.
- Added VSCode configuration files for improved development experience.
- Introduced ConditionalObjectFieldTemplate.jsx for dynamic field visibility based on PLC-specific logic.
2025-08-25 18:02:24 +02:00
Miguel aba83f843a Refactor dataset definitions and variables; update plot configurations and add system tray support
- Updated dataset definitions in `dataset_definitions.json` to change prefix for DAR and removed unused datasets.
- Modified dataset variables in `dataset_variables.json` to update variable names and added a new variable for CTS306_PEW.
- Simplified plot definitions in `plot_definitions.json` by removing old plots and updating the DAR plot configuration.
- Enhanced `main.py` to include system tray functionality using pystray, allowing users to manage the application from the tray.
- Updated `requirements.txt` to include dependencies for system tray support.
- Adjusted `system_state.json` to reflect changes in active datasets and removed references to obsolete datasets.
2025-08-25 16:02:15 +02:00
Miguel 250748446f Enhance PlotHistoricalSession component to update both central time and visible range on pan event; adjust background color opacity for better visibility. Update system state to include 'DAR' dataset and add PlotJuggler path. 2025-08-25 14:39:58 +02:00
Miguel cc4888fa18 Refactor disk usage retrieval in PLCDataStreamer for improved Windows compatibility and remove reliance on psutil. Enhance polling mechanism in useCoordinatedConnection to implement exponential backoff on consecutive errors. Update system_state.json to reorder active datasets and adjust last update timestamp. Add comprehensive test_disk_status.py script to validate disk_space functionality via the /api/status endpoint. 2025-08-22 17:39:58 +02:00
Miguel 9dae98bfdc Update plot definitions and frontend configurations for time window adjustments
- Changed the default time window in plot_definitions.json from 37 to 20 seconds.
- Updated the PlotRealtimeSession component to reflect the new default time window of 10 seconds instead of 60 seconds in multiple instances.
- Modified the time window input field to have a placeholder of 10 and adjusted the parsing logic to handle empty values.
- Updated system_state.json to reflect the latest timestamp and reordered active datasets.
- Added application_events.json to log significant application events, including application startup and CSV recording status.
- Created a new system_state.json file to track the last state of the application with relevant flags and timestamps.
2025-08-22 16:50:53 +02:00
Miguel 9bbf299826 fix: Address gap between historical and real-time data in ChartjsPlot
- Updated time_window in plot_definitions.json from 60 to 37 seconds to improve data continuity.
- Compensated for frontend processing delays by adjusting lastPushedX timestamp in ChartjsPlot.jsx.
- Enhanced logging for better visibility into data continuity issues, including filtering and ingestion logs.
- Modified system_state.json to reorder active datasets and updated last_update timestamp.
- Added comprehensive documentation in GAP_FIX_SOLUTION.md detailing the problem, root cause, solution, benefits, and testing procedures.
2025-08-22 16:23:30 +02:00
Miguel aa75a46d84 Enhance disk usage retrieval with multiple fallbacks for Windows compatibility
- Implemented a new method `_get_disk_usage_safe` in `PLCDataStreamer` to safely retrieve disk usage information using `psutil` and `shutil` with fallbacks for different scenarios.
- Updated the disk usage calculation logic to handle potential errors and log warnings when disk usage retrieval fails.
- Modified the `system_state.json` to reorder active datasets and add a new `plotjuggler_path` entry.
- Added a comprehensive test script `test_disk_space.py` to validate the disk space calculation functionality via the API.
2025-08-22 16:04:39 +02:00
Miguel 6302acfc0f Update backend manager and instance management logic
- Modified backend_manager.status to reflect updated timestamps and status.
- Refactored backmanager.py for improved readability and consistency in logging.
- Enhanced instance_manager.py to ensure robust backend instance checks and process management.
- Updated main.py to streamline backend instance verification and improve error handling.
- Adjusted main.spec to consolidate analysis for the main application and backend manager.
- Added a new spec file for comprehensive build configuration.
- Updated system_state.json with new timestamps and dataset order.
- Improved rotating_logger.py to enhance log file cleanup messages.
2025-08-22 15:29:28 +02:00
Miguel 082f8b1790 feat: Implement Backend Manager for PLC S7-315 Streamer Watchdog Service
- Added backmanager.py to monitor backend health and restart if necessary.
- Introduced backend_manager.status to track the state of the backend.
- Updated system_state.json to reflect changes in active datasets.
- Modified rotating_logger.py for improved log messages.
- Enhanced main.spec to support separate executables for main application and backend manager.
- Created backmanager.spec and backmanager_config.json for backend manager configuration.
- Added build_all.bat for streamlined build process.
2025-08-22 14:55:10 +02:00
Miguel ee6918445e feat: Implement robust backend instance management with HTTP health checks and PID verification
- Added InstanceManager class for managing backend instances.
- Introduced double HTTP health checks with configurable intervals.
- Implemented PID-based verification and cleanup of stale processes.
- Enhanced instance initialization and cleanup processes.
- Updated main.py to utilize the new instance management system.
- Modified system_state.json to reflect changes in active datasets and last update timestamp.
2025-08-22 14:13:07 +02:00
Miguel 88a6b805be Refactor: Remove legacy code and tests, update system state configuration
- Deleted legacy route handling in main_cleanup_notes.py.
- Updated system_state.json to reorder active datasets and add PlotJuggler path.
- Removed outdated DB1001 specific value verification test (test_db1001_specific_values.py).
- Removed PlotJuggler path detection test (test_plotjuggler_search.py).
- Removed system_state.json path handling test (test_system_state_paths.py).
- Added new tests for PlotJuggler and system state path handling in .tests directory.
- Introduced a comprehensive user guide for the frontend dashboard tabs in help.md.
2025-08-22 12:42:42 +02:00
Miguel 192c83ebce feat: Refactor state file path handling and update application events in JSON 2025-08-22 12:07:14 +02:00
Miguel c5ed02b4a2 feat: Update application events and system state, optimize JSON structure, and add build instructions to README 2025-08-22 11:37:15 +02:00
Miguel b7e491289b Add comprehensive tests for snap7 v2 functionality
- Implemented `test_simple_read_multi_vars.py` to validate read_multi_vars functionality with detailed logging and error handling.
- Created `test_snap7v2_comprehensive.py` for extensive testing of snap7 v2, covering various PLC variable types, performance comparisons, data consistency checks, and stress testing.
- Integrated existing backend components and optimized reading methods, with comprehensive reporting and logging features.
2025-08-21 20:30:41 +02:00
Miguel 12106a9fe9 feat: Implement dataset-specific optimization configuration
- Added `use_optimized_reading` parameter to dataset definitions for per-dataset control over reading methods.
- Updated JSON schema and UI schema to include the new parameter with appropriate descriptions and defaults.
- Modified `ConfigManager`, `PLCClient`, and `PLCDataStreamer` to handle the new optimization setting.
- Enhanced batch reading logic to prioritize dataset-specific settings over global configurations.
- Improved logging to indicate which reading method is being used for each dataset.
- Created comprehensive tests to validate the new functionality and ensure backward compatibility.
- Added documentation detailing the new feature, its benefits, and usage examples.
2025-08-20 00:28:07 +02:00
Miguel 5e89921f05 feat: Implement early instance check and enhance shutdown process
- Added a function to check for a running instance of the application before initializing PLCDataStreamer, providing faster feedback to the user.
- Improved the graceful shutdown process to ensure proper cleanup of resources and instance locks.
- Updated the main execution flow to include early instance checks and handle potential runtime errors more gracefully.
- Modified system_state.json to set "should_connect" to true and updated the active datasets.
2025-08-19 17:07:00 +02:00
Miguel 4a064937d3 Implement OptimizedBatchReader for efficient PLC variable reading
- Added OptimizedBatchReader class to handle batch reading of PLC variables using snap7's read_multi_vars function.
- Introduced automatic chunking to respect S7 PDU limits, allowing for efficient handling of large variable lists.
- Replaced the existing read_variables_batch method in PLCClient with the new optimized implementation.
- Updated system_state.json to reflect the latest last_update timestamp.
- Removed commented-out code related to the previous batch reading method.
2025-08-19 10:41:09 +02:00
Miguel a1c004f11b Update configuration and directory handling
- Increased time_window in plot_definitions.json from 10 to 60.
- Added external_path function in config_manager.py to handle paths for records and logs, ensuring compatibility with both development and PyInstaller executable environments.
- Updated PLCDataStreamer to use the new get_csv_directory_path method for retrieving the records directory.
- Refactored main.py to include get_records_directory function for consistent records directory path retrieval.
- Modified system_state.json to set should_connect to false and updated last_update timestamp.
2025-08-18 18:51:18 +02:00
Miguel 00c021f496 feat: Enhance DataStreamer with critical validation and performance monitoring improvements
- Refactored performance monitoring initialization for better readability.
- Added critical validation to ensure buffered data matches current dataset variables, preventing CSV corruption.
- Implemented logging for data inconsistencies and buffer clearing during variable modifications.
- Improved error handling and logging during CSV flushing and dataset reading.
- Enhanced UDP streaming error handling and logging.
- Updated threading management for CSV flushing and dataset streaming.
- Added comprehensive performance metrics recording for dataset reads and writes.

feat: Localize historical plot management components

- Integrated i18n support in PlotHistoricalManager, PlotHistoricalSession, and TimePointSelector components.
- Translated various UI strings related to historical plots, time selection, and console logs into English, Spanish, and Italian.
- Improved user experience by providing localized messages for actions and statuses.

fix: Update system state configuration

- Changed `should_connect` to true and added active datasets to the system state.
- Updated the last update timestamp and specified the path for PlotJuggler.
2025-08-17 13:01:36 +02:00
Miguel ac87ce2568 feat: Update dataset configurations and improve PLC communication
- Changed sampling interval for "Fast" dataset from 0.1 to 0.5 seconds.
- Updated variable definitions for "Fast" dataset, including renaming and modifying properties for AUX Blink and M50 variables.
- Adjusted plot definitions to reduce time window from 36 to 10 seconds.
- Enhanced plot variables to ensure correct labeling and enablement of variables.
- Increased inter-read delay in PLCClient for improved stability and added batch reading functionality to optimize variable reads.
- Implemented asynchronous CSV writing system in DataStreamer to reduce I/O operations and improve performance.
- Updated ChartjsPlot component to modify refresh rates for real-time data handling.
- Adjusted system state to disable automatic connection and clear active datasets.
2025-08-17 11:41:31 +02:00
Miguel 61365240d6 Update dataset definitions and chart configuration for improved performance
- Changed the sampling interval for the "Fast" dataset from 1 to 0.1 for finer granularity.
- Adjusted the Chart.js plot configuration by setting the delay to 0 for real-time updates.
- Removed "Test" from the active datasets in the system state and updated the last update timestamp.
2025-08-17 11:00:22 +02:00
Miguel 3015fe4391 feat: Enhance coordinated polling with error handling and performance monitoring
- Updated `useCoordinatedPolling` to track connection errors and stop polling after consecutive failures.
- Modified `StatusBar` component to display connection status and performance data, including loading states and error messages.
- Implemented performance data fetching with automatic updates every 10 seconds when conditions are met.
- Added new API functions for retrieving current and historical performance data.
- Adjusted `system_state.json` to change the order of active datasets and updated the last update timestamp.
2025-08-17 10:39:57 +02:00
Miguel 030b691064 feat(i18n): add internationalization support with language detection and translations for English, Spanish, and Italian
- Integrated i18next and react-i18next for localization.
- Added language selector component to switch between English, Spanish, and Italian.
- Updated various components to use translation keys for dynamic text rendering.
- Created translation files for English, Spanish, and Italian with relevant keys.
- Modified the main application entry point to initialize i18n.
- Updated dashboard and configuration components to reflect translated content.
- Adjusted toast messages and dialog texts to support multiple languages.
- Updated system state to include new language settings.
2025-08-17 00:15:44 +02:00
Miguel 1ecb8c71ee feat: Add console logs display and export functionality
- Introduced ConsoleLogsDisplay component to replace EventsDisplay for showing console logs.
- Implemented log export feature to download console logs as a text file.
- Updated API to fetch console logs from the backend.
- Modified DashboardContent to load and display console logs instead of events.
- Adjusted UI elements for better user experience with logs.
- Added new endpoint in the backend to retrieve recent console logs.
- Updated system state and configuration files accordingly.
2025-08-16 23:55:27 +02:00
Miguel ca6d39cb06 feat: Add import/export functionality for configuration and dataset variables
- Implemented reusable ImportExportButtons component for handling JSON file import/export across various components.
- Enhanced PlotManager, Dashboard, and DatasetManager to support importing and exporting configurations and variables.
- Added validation for JSON structure during import to ensure data integrity.
- Updated dataset_variables.json to include new variable UR29_max.
- Modified system_state.json to reorder active datasets and update last_update timestamp.
2025-08-16 22:35:50 +02:00
Miguel c3c55dd3dc Enhance Chart.js dataset visibility management
- Introduced a mechanism to track and save the visibility state of datasets in the Chart.js historical plot component.
- Implemented functions to save, restore, and apply dataset visibility states during chart updates and creations.
- Modified the legend click behavior to update the visibility state in the dataset visibility map.
- Updated system state JSON to reflect changes in active datasets and last update timestamp.
2025-08-16 20:58:01 +02:00
Miguel 7738f1d241 feat: Enhance ChartjsHistoricalPlot with simple and fullscreen modes
- Added `isSimplePlot` prop to toggle simple plot mode for faster navigation.
- Introduced `isFullscreen` prop to enable fullscreen mode for a compact layout.
- Implemented chart resizing on fullscreen toggle.
- Updated dataset configuration to respect simple plot settings.
- Modified chart controls to hide/show based on fullscreen state.
- Added fullscreen modal with navigation controls in PlotHistoricalSession.
- Updated system state JSON to reflect changes in active datasets and last update timestamp.
2025-08-16 20:36:56 +02:00
Miguel 0f928c50e7 feat: Implement data availability visualization in historical plots
- Added DataAvailabilityBar component to visualize data segments on the timeline.
- Integrated DataAvailabilityBar into TimePointSelector and ChartjsHistoricalPlot components.
- Updated PlotHistoricalSession to fetch data segments from the backend.
- Modified API to include endpoint for retrieving historical data segments.
- Refactored date formatting to use 'en-US' locale for consistency.
- Removed reset zoom functionality and associated UI elements from ChartjsHistoricalPlot.
2025-08-16 19:20:42 +02:00
Miguel be2df781cf Implementación del sistema de monitoreo de rendimiento y gestión de prioridades para el recording de PLC
- Se creó el archivo PERFORMANCE_MONITORING.md que detalla el sistema de monitoreo de rendimiento en tiempo real, incluyendo métricas, logs y APIs de monitoreo.
- Se desarrolló el archivo PRIORITY_SYSTEM.md que describe la arquitectura de prioridades para asegurar que el recording de CSV tenga máxima prioridad.
- Se implementó el PerformanceMonitor en core/performance_monitor.py para registrar métricas de rendimiento, incluyendo tiempos de lectura, uso de CPU y errores.
- Se creó el PriorityThreadManager en core/priority_manager.py para gestionar la prioridad de los hilos y asegurar que las operaciones de recording no sean interrumpidas.
- Se implementó un sistema de logging rotativo en core/rotating_logger.py que permite la rotación automática de archivos de log y limpieza de archivos antiguos.
2025-08-16 18:34:31 +02:00
Miguel fe1df15942 feat: Enhance application event logging and improve historical plot components with new data handling and UI updates 2025-08-16 16:53:50 +02:00
Miguel d588574b4f feat: Enhance event logging and improve time navigation synchronization in historical plot components 2025-08-16 16:08:35 +02:00
Miguel 43d125bea1 feat: Add TimePointSelector component for time navigation and selection
- Introduced a new TimePointSelector component to allow users to select a specific date and time using a date picker and a slider.
- Integrated the TimePointSelector into the PlotHistoricalSession component for enhanced time navigation.
- Implemented state management for central time and time range in PlotHistoricalSession.
- Added API endpoint to fetch available date range for historical data.
- Updated ChartjsHistoricalPlot to improve data processing and logging.
- Enhanced error handling and logging in the backend for better debugging.
- Updated frontend dependencies, including the addition of react-datepicker.
2025-08-16 12:45:09 +02:00
Miguel 0f2b9b8fb4 feat: Enhance logging and error handling in symbol processing, update system state and dataset variables, and add symbol data expansion functionality 2025-08-15 21:05:58 +02:00
Miguel e7cee49b1e feat: Enhance PlotJuggler integration by launching with multiple files in a single instance, improve logging for application events, and update system state for active datasets 2025-08-15 20:38:05 +02:00
Miguel 02b622cb20 feat: Add file path copying functionality to CSV File Browser and update PlotJuggler launch command 2025-08-15 20:29:17 +02:00
Miguel 3a830fe100 feat: Add PlotJuggler integration with UDP streaming support, update system state and dataset variables for streaming, and enhance dashboard functionality 2025-08-15 20:23:10 +02:00
Miguel 60db337284 feat: Implement CSV File Browser component, add API endpoints for CSV file management, and update system state for dataset activation 2025-08-15 20:16:05 +02:00
Miguel 4481eb33a7 feat: Enhance logging for plot sessions, update UI widgets to use switches, and reorder active datasets in system state 2025-08-15 19:55:57 +02:00
Miguel 609ae865de feat: Add detailed logging for plot sessions and implement TabCoordinationDemo component for coordination status display 2025-08-15 19:41:01 +02:00
Miguel 696b79ba0d feat: Implement coordinated connection and polling for real-time data updates across tabs
- Introduced `useCoordinatedConnection` and `useCoordinatedPolling` hooks to manage data fetching and state synchronization between tabs.
- Refactored `DatasetCompleteManager`, `PlotRealtimeViewer`, and `VariableSelectorWidget` components to utilize SSE and polling for live data updates.
- Added `TabCoordinationDemo` component to visualize tab coordination status and leadership.
- Updated `Dashboard` to leverage coordinated polling for status updates, improving performance and reducing redundant connections.
- Enhanced `TabCoordinator` utility to manage leadership and data broadcasting between tabs effectively.
2025-08-15 18:55:58 +02:00
Miguel e97cd5260b feat: Implement multi-browser support for plot sessions
- Enhanced session ID generation to include browser tab identifiers, allowing multiple instances of the same plot in different tabs.
- Updated PlotManager to manage sessions more effectively, including cleanup of inactive sessions.
- Modified frontend components to handle dynamic session IDs and ensure independent operation across tabs.
- Added new API endpoints for retrieving sessions by plot ID and manual cleanup of inactive sessions.
- Improved error handling and logging for better debugging and user experience.
2025-08-15 16:56:02 +02:00
Miguel 405edd682e feat: Enhance logging and configuration for plot sessions, update dataset handling, and improve chart rendering logic 2025-08-15 15:49:13 +02:00
Miguel 5caa74fa27 feat: Add detailed logging for plot sessions, update plot configuration, and enhance chart handling 2025-08-15 13:17:08 +02:00