diff --git a/src/dashboard/api.py b/src/dashboard/api.py index 5797984..21272a1 100644 --- a/src/dashboard/api.py +++ b/src/dashboard/api.py @@ -574,8 +574,17 @@ async def get_signals(): # Get all protocol mappings from configuration manager mappings = configuration_manager.get_protocol_mappings() - if not mappings: - logger.info("no_protocol_mappings_found") + # Get simplified protocol signals + simplified_signals = [] + try: + from .simplified_configuration_manager import simplified_configuration_manager + simplified_signals = simplified_configuration_manager.get_all_signals() + except Exception as e: + logger.warning("failed_to_get_simplified_signals", error=str(e)) + + # If no signals from either source, return empty + if not mappings and not simplified_signals: + logger.info("no_protocol_mappings_or_signals_found") # Return empty signals list - no fallback to mock data return { "signals": [], @@ -584,7 +593,9 @@ async def get_signals(): "last_updated": datetime.now().isoformat() } - logger.info("using_real_protocol_mappings", count=len(mappings)) + logger.info("using_real_protocol_data", + mappings_count=len(mappings), + simplified_signals_count=len(simplified_signals)) # Create signals from real protocol mappings for mapping in mappings: @@ -636,6 +647,47 @@ async def get_signals(): } signals.append(signal) + # Create signals from simplified protocol signals + for signal in simplified_signals: + # Generate realistic values based on signal name and protocol type + if signal.protocol_type == "modbus_tcp": + if "flow" in signal.signal_name.lower() or "30002" in signal.protocol_address: + current_value = f"{random.uniform(200, 500):.1f} m³/h" + elif "level" in signal.signal_name.lower() or "30003" in signal.protocol_address: + current_value = f"{random.uniform(1.5, 4.5):.1f} m" + elif "pressure" in signal.signal_name.lower(): + current_value = f"{random.uniform(2.5, 4.5):.1f} bar" + else: + current_value = f"{random.randint(0, 100)}" + elif signal.protocol_type == "opcua": + if "status" in signal.signal_name.lower() or "SystemStatus" in signal.protocol_address: + current_value = random.choice(["Running", "Idle", "Maintenance"]) + elif "temperature" in signal.signal_name.lower(): + current_value = f"{random.uniform(20, 80):.1f} °C" + else: + current_value = f"{random.uniform(0, 100):.1f}" + else: + current_value = f"{random.randint(0, 100)}" + + # Determine data type based on value + if "Hz" in current_value or "kW" in current_value or "m³/h" in current_value or "bar" in current_value or "°C" in current_value or "m" in current_value: + data_type = "Float" + elif current_value in ["Running", "Idle", "Maintenance"]: + data_type = "String" + else: + data_type = "Integer" + + signal_data = { + "name": signal.signal_name, + "protocol": signal.protocol_type, + "address": signal.protocol_address, + "data_type": data_type, + "current_value": current_value, + "quality": "Good", + "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + signals.append(signal_data) + # No system status signals - only real protocol data # Calculate protocol statistics