import httpx import json from datetime import datetime # GraphQL Query für alle Sensoren query = ''' query GetAllSensors { sensors { id name nameExtern description measureConcept { id name description } } } ''' # API Aufruf with httpx.Client() as client: response = client.post( f"{EXTERNAL_BASE_URL}/graphql", json={"query": query}, headers=AUTH_HEADERS, timeout=30.0 ) if response.status_code != 200: result = f"
Fehler beim Abrufen der Sensoren: {response.status_code}
" else: data = response.json() sensors = data.get('data', {}).get('sensors', []) # Sortiere Sensoren nach MeasureConcept Name sensors.sort(key=lambda s: (s['measureConcept']['name'].strip() if s['measureConcept']['name'] else '', s['name'].strip())) # Gruppiere nach MeasureConcept measure_concepts = {} for sensor in sensors: mc_id = sensor['measureConcept']['id'] mc_name = sensor['measureConcept']['name'].strip() if sensor['measureConcept']['name'] else 'Unbekannt' mc_desc = sensor['measureConcept']['description'] or '' if mc_id not in measure_concepts: measure_concepts[mc_id] = { 'name': mc_name, 'description': mc_desc, 'sensors': [] } measure_concepts[mc_id]['sensors'].append(sensor) # Statistiken total_sensors = len(sensors) total_concepts = len(measure_concepts) # HTML generieren html = f''' Sensor Liste

🔧 Sensor Übersicht

{total_sensors}
Sensoren gesamt
{total_concepts}
MeasureConcepts
''' # MeasureConcepts und Sensoren ausgeben for mc_id, mc_data in sorted(measure_concepts.items(), key=lambda x: x[1]['name']): mc_name = mc_data['name'] mc_desc = mc_data['description'] sensors_in_concept = mc_data['sensors'] html += f'''

📊 {mc_name} {len(sensors_in_concept)} Sensoren

''' if mc_desc: html += f'
{mc_desc}
\n' html += '''
''' for sensor in sensors_in_concept: sensor_id = sensor['id'] sensor_name = sensor['name'].strip() if sensor['name'] else 'Unbekannter Name' sensor_extern = sensor.get('nameExtern', '') or '' sensor_desc = sensor.get('description', '') or '' html += f'''
ID: {sensor_id}
{sensor_name}
''' if sensor_extern and sensor_extern.strip() != '-': html += f'
Extern: {sensor_extern}
\n' if sensor_desc: html += f'
{sensor_desc}
\n' else: html += '
Keine Beschreibung verfügbar
\n' html += '
\n' html += '''
''' # Timestamp und JavaScript current_time = datetime.now().strftime('%d.%m.%Y um %H:%M:%S') html += f'''
📅 Erstellt am {current_time}
''' result = html