diff --git a/lib/data/catalog_data.dart b/lib/data/catalog_data.dart index 2f83b9a..5a699ac 100644 --- a/lib/data/catalog_data.dart +++ b/lib/data/catalog_data.dart @@ -1,10 +1,11 @@ import 'package:flutter/material.dart'; +import '../l10n/app_localizations.dart'; import '../models/room.dart'; import '../models/device.dart'; class CatalogData { static String localizeText(String source) => - DeviceDomainI18n.localize(source); + AppLocalizations.translate(source); static String roomName(Room room) => localizeText(room.name); @@ -12,23 +13,27 @@ class CatalogData { localizeText(template.name); static const List allRooms = [ - Room(id: 'living', name: 'Wohnzimmer', icon: Icons.weekend), - Room(id: 'kitchen', name: 'Küche', icon: Icons.kitchen), - Room(id: 'bedroom', name: 'Schlafzimmer', icon: Icons.hotel), - Room(id: 'child_bedroom', name: 'Kinderzimmer', icon: Icons.child_care), - Room(id: 'bathroom', name: 'Badezimmer', icon: Icons.bathtub), - Room(id: 'office', name: 'Arbeitszimmer', icon: Icons.computer), - Room(id: 'hallway', name: 'Flur / Eingang', icon: Icons.meeting_room), - Room(id: 'garden', name: 'Garten / Außenbereich', icon: Icons.yard), - Room(id: 'basement', name: 'Keller / Speisekammer', icon: Icons.food_bank), - Room(id: 'whole_home', name: 'Ganze Wohnung', icon: Icons.home), + Room(id: 'living', name: 'room_living', icon: Icons.weekend), + Room(id: 'kitchen', name: 'room_kitchen', icon: Icons.kitchen), + Room(id: 'bedroom', name: 'room_bedroom', icon: Icons.hotel), + Room( + id: 'child_bedroom', + name: 'room_child_bedroom', + icon: Icons.child_care, + ), + Room(id: 'bathroom', name: 'room_bathroom', icon: Icons.bathtub), + Room(id: 'office', name: 'room_office', icon: Icons.computer), + Room(id: 'hallway', name: 'room_hallway', icon: Icons.meeting_room), + Room(id: 'garden', name: 'room_garden', icon: Icons.yard), + Room(id: 'basement', name: 'room_basement', icon: Icons.food_bank), + Room(id: 'whole_home', name: 'room_whole_home', icon: Icons.home), ]; static const List allDeviceTemplates = [ // ── Sensors ─────────────────────────────────────────────────────── DeviceTemplate( id: 'simple_sensor', - name: 'Einfacher Sensor (z. B. Bewegungs- oder Türsensor)', + name: 'device_simple_sensor', icon: Icons.sensors, baseRiskScore: 20, roomIds: [ @@ -46,7 +51,7 @@ class CatalogData { ), DeviceTemplate( id: 'humidity_sensor', - name: 'Feuchtigkeitssensor', + name: 'device_humidity_sensor', icon: Icons.water_drop, baseRiskScore: 15, roomIds: [ @@ -64,7 +69,7 @@ class CatalogData { ), DeviceTemplate( id: 'temperature_sensor', - name: 'Temperatursensor', + name: 'device_temperature_sensor', icon: Icons.thermostat, baseRiskScore: 15, roomIds: [ @@ -82,7 +87,7 @@ class CatalogData { ), DeviceTemplate( id: 'light_sensor', - name: 'Lichtsensor', + name: 'device_light_sensor', icon: Icons.light_mode, baseRiskScore: 15, roomIds: [ @@ -102,7 +107,7 @@ class CatalogData { // ── Smart Speaker / Voice ────────────────────────────────────────── DeviceTemplate( id: 'smart_speaker', - name: 'Smart Speaker / Sprachassistent', + name: 'device_smart_speaker', icon: Icons.speaker, baseRiskScore: 50, hasMicrophone: true, @@ -111,7 +116,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_display', - name: 'Smart Display (z. B. Nest Hub)', + name: 'device_smart_display', icon: Icons.tablet_android, baseRiskScore: 50, hasCamera: true, @@ -123,7 +128,7 @@ class CatalogData { // ── TV & Entertainment ──────────────────────────────────────────── DeviceTemplate( id: 'smart_tv', - name: 'Smart TV', + name: 'device_smart_tv', icon: Icons.tv, baseRiskScore: 40, roomIds: ['living', 'bedroom'], @@ -133,7 +138,7 @@ class CatalogData { // ── Cameras ─────────────────────────────────────────────────────── DeviceTemplate( id: 'indoor_camera', - name: 'Smarte Innenkamera', + name: 'device_indoor_camera', icon: Icons.videocam, baseRiskScore: 60, hasCamera: true, @@ -142,7 +147,7 @@ class CatalogData { ), DeviceTemplate( id: 'outdoor_camera', - name: 'Smarte Außenkamera', + name: 'device_outdoor_camera', icon: Icons.camera_outdoor, baseRiskScore: 60, hasCamera: true, @@ -151,7 +156,7 @@ class CatalogData { ), DeviceTemplate( id: 'doorbell_camera', - name: 'Smarte Türklingel mit Kamera', + name: 'device_doorbell_camera', icon: Icons.doorbell, baseRiskScore: 60, hasCamera: true, @@ -161,7 +166,7 @@ class CatalogData { ), DeviceTemplate( id: 'baby_monitor', - name: 'Babymonitor / Babykamera', + name: 'device_baby_monitor', icon: Icons.child_care, baseRiskScore: 60, hasCamera: true, @@ -173,7 +178,7 @@ class CatalogData { // ── Robots & Appliances ─────────────────────────────────────────── DeviceTemplate( id: 'robot_vacuum', - name: 'Saugroboter', + name: 'device_robot_vacuum', icon: Icons.cleaning_services, baseRiskScore: 35, roomIds: ['living', 'kitchen', 'hallway', 'bedroom', 'whole_home'], @@ -181,7 +186,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_fridge', - name: 'Smarter Kühlschrank', + name: 'device_smart_fridge', icon: Icons.kitchen, baseRiskScore: 30, roomIds: ['kitchen'], @@ -189,7 +194,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_oven', - name: 'Smarter Backofen / Herd', + name: 'device_smart_oven', icon: Icons.microwave, baseRiskScore: 25, roomIds: ['kitchen'], @@ -197,7 +202,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_coffee', - name: 'Smarte Kaffeemaschine', + name: 'device_smart_coffee', icon: Icons.coffee, baseRiskScore: 20, roomIds: ['kitchen'], @@ -205,7 +210,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_washing', - name: 'Smarte Waschmaschine / Trockner', + name: 'device_smart_washing', icon: Icons.local_laundry_service, baseRiskScore: 20, roomIds: ['basement', 'bathroom', 'whole_home'], @@ -215,7 +220,7 @@ class CatalogData { // ── Smart Home Controls ─────────────────────────────────────────── DeviceTemplate( id: 'smart_thermostat', - name: 'Smarter Thermostat / Heizungssteuerung', + name: 'device_smart_thermostat', icon: Icons.thermostat, baseRiskScore: 30, roomIds: ['living', 'bedroom', 'hallway', 'whole_home'], @@ -223,7 +228,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_plug', - name: 'Smarte Steckdose', + name: 'device_smart_plug', icon: Icons.electrical_services, baseRiskScore: 20, roomIds: [ @@ -239,7 +244,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_light', - name: 'Smarte Beleuchtung', + name: 'device_smart_light', icon: Icons.lightbulb, baseRiskScore: 15, roomIds: [ @@ -255,7 +260,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_lock', - name: 'Smartes Türschloss', + name: 'device_smart_lock', icon: Icons.lock, baseRiskScore: 50, roomIds: ['hallway', 'whole_home'], @@ -263,7 +268,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_blind', - name: 'Smarte Jalousie / Rolllade', + name: 'device_smart_blind', icon: Icons.window, baseRiskScore: 20, roomIds: ['living', 'bedroom', 'office', 'whole_home'], @@ -273,7 +278,7 @@ class CatalogData { // ── Wearables ───────────────────────────────────────────────────── DeviceTemplate( id: 'fitness_tracker', - name: 'Fitness-Tracker / Smartwatch', + name: 'device_fitness_tracker', icon: Icons.watch, baseRiskScore: 40, roomIds: ['bedroom', 'bathroom', 'whole_home'], @@ -283,7 +288,7 @@ class CatalogData { // ── Kids ────────────────────────────────────────────────────────── DeviceTemplate( id: 'smart_toy', - name: 'Smartes Spielzeug', + name: 'device_smart_toy', icon: Icons.toys, baseRiskScore: 55, hasMicrophone: true, @@ -294,7 +299,7 @@ class CatalogData { // ── Network & Hub ───────────────────────────────────────────────── DeviceTemplate( id: 'smart_router', - name: 'Smart Router / Mesh-System', + name: 'device_smart_router', icon: Icons.router, baseRiskScore: 40, roomIds: ['whole_home', 'office'], @@ -302,7 +307,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_hub', - name: 'Smart-Home-Hub (z. B. Homey, Home Assistant)', + name: 'device_smart_hub', icon: Icons.hub, baseRiskScore: 35, roomIds: ['whole_home', 'living'], @@ -310,7 +315,7 @@ class CatalogData { ), DeviceTemplate( id: 'smart_meter', - name: 'Intelligenter Stromzähler / Smart Meter', + name: 'device_smart_meter', icon: Icons.bolt, baseRiskScore: 30, roomIds: ['whole_home', 'basement'], @@ -320,7 +325,7 @@ class CatalogData { // ── Garden ──────────────────────────────────────────────────────── DeviceTemplate( id: 'smart_irrigation', - name: 'Smarte Bewässerungsanlage', + name: 'device_smart_irrigation', icon: Icons.water_drop, baseRiskScore: 15, roomIds: ['garden'], @@ -330,7 +335,7 @@ class CatalogData { // ── Health & Bathroom ───────────────────────────────────────────── DeviceTemplate( id: 'smart_scale', - name: 'Smarte Waage', + name: 'device_smart_scale', icon: Icons.monitor_weight, baseRiskScore: 35, roomIds: ['bathroom', 'bedroom'], @@ -340,7 +345,7 @@ class CatalogData { // ── Office ──────────────────────────────────────────────────────── DeviceTemplate( id: 'smart_printer', - name: 'Smarter Drucker', + name: 'device_smart_printer', icon: Icons.print, baseRiskScore: 30, roomIds: ['office'], @@ -361,534 +366,15 @@ class CatalogData { return allDeviceTemplates.where((d) => d.roomIds.contains(roomId)).toList(); } - /// Device-specific questions based on device type and BSI recommendations - static List getDeviceSpecificQuestions( - DeviceTemplate template, - ) { - // Simple sensors typically have no app, dedicated password, or software updates, - // so they get a tailored, minimal question set focused on data minimisation. - if (template.deviceType == 'sensor') { - return [ - const DeviceQuestion( - id: 'sensor_informed', - text: - 'Sind alle Personen im Haushalt über diesen Sensor und seine Funktion informiert?', - hint: - 'Alle Mitbewohnenden sollten wissen, welche Daten der Sensor erfasst.', - ), - const DeviceQuestion( - id: 'sensor_network', - text: - 'Ist der Sensor in einem separaten Smart-Home- oder IoT-WLAN eingebunden (sofern netzwerkfähig)?', - hint: - 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.', - ), - const DeviceQuestion( - id: 'sensor_frequency', - text: - 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?', - hint: - 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.', - ), - const DeviceQuestion( - id: 'sensor_data_deletion', - text: 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?', - hint: - 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.', - ), - const DeviceQuestion( - id: 'sensor_granularity', - text: - 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?', - hint: - 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.', - ), - const DeviceQuestion( - id: 'sensor_local', - text: - 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?', - hint: - 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.', - ), - ]; - } - - final baseQuestions = [ - const DeviceQuestion( - id: 'password', - text: - 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?', - hint: - 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.', - ), - const DeviceQuestion( - id: 'updates', - text: 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?', - hint: 'Updates schließen bekannte Sicherheitslücken zeitnah.', - ), - const DeviceQuestion( - id: 'network', - text: - 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?', - hint: - 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.', - ), - const DeviceQuestion( - id: 'informed', - text: - 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?', - hint: - 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.', - ), - const DeviceQuestion( - id: 'permissions', - text: - 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?', - hint: 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.', - ), - ]; - - // Add device-type-specific questions - if (template.deviceType == 'speaker') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'voice_history', - text: - 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?', - hint: - 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.', - ), - const DeviceQuestion( - id: 'voice_local', - text: - 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?', - hint: - 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.', - ), - const DeviceQuestion( - id: 'skills_permissions', - text: - 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?', - hint: - 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.', - ), - ]); - } else if (template.deviceType == 'camera') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'video_encryption', - text: - 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?', - hint: - 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.', - ), - const DeviceQuestion( - id: 'video_storage', - text: - 'Werden Aufnahmen lokal gespeichert oder exklusiv in der Cloud des Anbieters?', - hint: - 'Lokale Speicherung gibt Ihnen mehr Kontrolle; Cloud-Speicherung erfordert zusätzliche Vertrauensebene.', - ), - const DeviceQuestion( - id: 'sharing_restrictions', - text: - 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?', - hint: - 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.', - ), - const DeviceQuestion( - id: 'motion_detection', - text: - 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?', - hint: - 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.', - ), - ]); - } else if (template.deviceType == 'tv') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'account_required', - text: - 'Müssen Sie ein Online-Konto erstellen, um das Gerät zu nutzen?', - hint: - 'Konten mit Werbe-Tracking können Ihre Sehgewohnheiten speichern und auswerten.', - ), - const DeviceQuestion( - id: 'tracking_disabled', - text: - 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?', - hint: - 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.', - ), - const DeviceQuestion( - id: 'local_mode', - text: - 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?', - hint: - 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.', - ), - ]); - } else if (template.deviceType == 'thermostat') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'data_collection', - text: - 'Werden Temperatur-Historien und Zeitpläne an den Hersteller übermittelt?', - hint: - 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren.', - ), - const DeviceQuestion( - id: 'offline_control', - text: - 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?', - hint: - 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.', - ), - const DeviceQuestion( - id: 'family_access', - text: - 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?', - hint: - 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.', - ), - ]); - } else if (template.deviceType == 'light' || - template.deviceType == 'plug' || - template.deviceType == 'blind') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'local_control', - text: - 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?', - hint: - 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.', - ), - const DeviceQuestion( - id: 'usage_tracking', - text: - 'Werden Ihre Schaltmuster und Nutzungszeiten vom Hersteller erfasst?', - hint: - 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren.', - ), - const DeviceQuestion( - id: 'offline_fallback', - text: - 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?', - hint: - 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.', - ), - ]); - } else if (template.deviceType == 'lock') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'offline_unlock', - text: - 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?', - hint: - 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.', - ), - const DeviceQuestion( - id: 'access_logging', - text: 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?', - hint: - 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.', - ), - const DeviceQuestion( - id: 'two_factor', - text: - 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?', - hint: - 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.', - ), - ]); - } else if (template.deviceType == 'robot') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'map_privacy', - text: - 'Werden die erstellten Grundrisse lokal gespeichert oder an den Hersteller übermittelt?', - hint: - 'Grundrisse Ihres Hauses sind sensible Informationen; sie sollten lokal bleiben.', - ), - const DeviceQuestion( - id: 'cloud_required', - text: - 'Ist eine Cloud-Verbindung für die Grundriss-Navigation erforderlich?', - hint: - 'Geräte mit lokaler Navigation datenschutzfreundlicher als Varianten, die Cloud brauchen.', - ), - const DeviceQuestion( - id: 'vision_data', - text: - 'Wenn der Robot Kameras nutzt: Werden die Kamerabilder gespeichert oder übertragen?', - hint: - 'Kamerabilder sollten nur lokal für Navigation verwendet, nicht gespeichert oder gesendet werden.', - ), - ]); - } else if (template.deviceType == 'toy') { - baseQuestions.addAll([ - const DeviceQuestion( - id: 'parental_control', - text: - 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?', - hint: - 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.', - ), - const DeviceQuestion( - id: 'child_data_limits', - text: - 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?', - hint: - 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.', - ), - const DeviceQuestion( - id: 'recording_disable', - text: - 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?', - hint: - 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.', - ), - ]); - } - - // Add camera/microphone specific questions if applicable - if (template.hasCamera) { - baseQuestions.add( - const DeviceQuestion( - id: 'camera_consent', - text: - 'Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?', - hint: - 'Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.', - ), - ); - } - if (template.hasMicrophone) { - baseQuestions.add( - const DeviceQuestion( - id: 'mic_active', - text: - 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?', - hint: - 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.', - ), - ); - } - - return baseQuestions; - } - - /// Device-specific privacy actions based on BSI recommendations - static List getDeviceSpecificActions(DeviceTemplate template) { - final actions = []; - - // General security actions for all devices - if (template.deviceType == 'speaker') { - actions.addAll([ - const PrivacyAction( - title: 'Sprachaufzeichnungen löschen', - description: - 'BSI-Empfehlung: Löschen Sie regelmäßig (monatlich) Ihre Sprachaufzeichnungen im Hersteller-Konto. Dies reduziert das Risiko bei Kontohack oder Datenbreach.', - type: ActionType.technical, - priority: ActionPriority.high, - deviceType: 'speaker', - ), - const PrivacyAction( - title: 'Skills/Fähigkeiten überprüfen und einschränken', - description: - 'Überprüfen Sie, welche Drittanbieter-Skills/Fähigkeiten Zugriff auf Ihr Konto haben. Deaktivieren Sie unnötige Skills; diese könnten auf Ihre Daten zugreifen.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'speaker', - ), - const PrivacyAction( - title: 'Sprachverarbeitung lokal aktivieren (falls verfügbar)', - description: - 'Suchen Sie in den Geräteinstellungen nach Optionen für lokale Verarbeitung (z. B. „Local Voice Processing" bei Amazon Alexa). Dies verhindert Cloud-Verarbeitung.', - type: ActionType.technical, - priority: ActionPriority.high, - deviceType: 'speaker', - ), - ]); - } else if (template.deviceType == 'camera') { - actions.addAll([ - const PrivacyAction( - title: 'WLAN-Verschlüsselung (WPA2/WPA3) prüfen', - description: - 'BSI-Empfehlung: Verwenden Sie WPA2 oder WPA3 für Ihr Heimnetz. WEP und WPA sind veraltet und unsicher. Kamera-Verbindung sollte verschlüsselt sein.', - type: ActionType.technical, - priority: ActionPriority.high, - deviceType: 'camera', - ), - const PrivacyAction( - title: 'Speicherort der Aufnahmen klären', - description: - 'Finden Sie heraus, ob Aufnahmen lokal auf SD-Karte oder in der Cloud gespeichert werden. Bevorzugen Sie lokale Speicherung; falls Cloud: regelmäßig überprüfen und löschen.', - type: ActionType.social, - priority: ActionPriority.high, - deviceType: 'camera', - ), - const PrivacyAction( - title: 'Zugriffsrechte der Kamera periodisch überprüfen', - description: - 'Überprüfen Sie monatlich in der Hersteller-App, wer auf Live-View und Aufnahmen zugreifen kann. Entfernen Sie Zugriffe ehemaliger Haushaltsmitglieder sofort.', - type: ActionType.social, - priority: ActionPriority.high, - deviceType: 'camera', - ), - const PrivacyAction( - title: 'Bewegungserkennung zeitlich planen', - description: - 'Falls möglich, aktivieren Sie Bewegungserkennung nur in Abwesenheitszeiten. Dies reduziert unnötige Aufnahmen und Speichernutzung.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'camera', - ), - const PrivacyAction( - title: 'Physische Sicherheit beachten', - description: - 'BSI-Empfehlung: Stellen Sie sicher, dass Außenkameras nicht von Fremden manipuliert, abgeklebt oder gestohlen werden können. Anbringung überprüfen.', - type: ActionType.security, - priority: ActionPriority.high, - deviceType: 'camera', - ), - ]); - } else if (template.deviceType == 'tv') { - actions.addAll([ - const PrivacyAction( - title: 'Tracking und Werbe-Optionen deaktivieren', - description: - 'Gehen Sie in die Datenschutzeinstellungen und deaktivieren Sie „Tracking" und „Interest-Based Ads". Dies verhindert, dass Ihre Sehgewohnheiten gesammelt werden.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'tv', - ), - const PrivacyAction( - title: 'Offline-Nutzung bevorzugen', - description: - 'Nutzen Sie Ihr Smart-TV über HDMI für externe Quellen (Media-Player, Konsolen) oder lokale Speicherung. Dies vermeidet Cloud-Tracking Ihrer Inhalte.', - type: ActionType.social, - priority: ActionPriority.medium, - deviceType: 'tv', - ), - ]); - } else if (template.deviceType == 'thermostat') { - actions.addAll([ - const PrivacyAction( - title: 'Datenerfassung in Sicherheit/Datenschutz prüfen', - description: - 'Überprüfen Sie die Thermostat-App und klären Sie: Werden Temperaturhistorien und Zeitpläne an den Hersteller gesendet? Falls ja: deaktivieren, wenn möglich.', - type: ActionType.social, - priority: ActionPriority.high, - deviceType: 'thermostat', - ), - const PrivacyAction( - title: 'Lokale Automatisierung einrichten (ohne Cloud)', - description: - 'Viele moderne Thermostats unterstützen lokale Zeit- und Temperaturpläne. Nutzen Sie diese statt Cloud-basierte Zeitpläne, um Daten lokal zu halten.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'thermostat', - ), - ]); - } else if (template.deviceType == 'lock') { - actions.addAll([ - const PrivacyAction( - title: 'Zwei-Faktor-Authentifizierung (2FA) aktivieren', - description: - 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto. Dies verhindert, dass Hacker Ihr Schloss ferngesteuert öffnen können, selbst wenn Ihr Passwort bekannt ist.', - type: ActionType.technical, - priority: ActionPriority.high, - deviceType: 'lock', - ), - const PrivacyAction( - title: 'Notfall-Zugang vorbereiten', - description: - 'Erstellen Sie Notfall-Codes oder bewahren Sie einen Backup-Schlüssel sicher auf. Dies hilft bei Internet- oder Stromausfällen und technischen Problemen.', - type: ActionType.security, - priority: ActionPriority.high, - deviceType: 'lock', - ), - const PrivacyAction( - title: 'Regelmäßige Zugriffsprotokolle überprüfen', - description: - 'Überprüfen Sie wöchentlich, wer das Schloss geöffnet hat. Verdächtige Einträge könnten auf Sicherheitsprobleme oder unbefugten Zugang hinweisen.', - type: ActionType.security, - priority: ActionPriority.medium, - deviceType: 'lock', - ), - ]); - } else if (template.deviceType == 'robot') { - actions.addAll([ - const PrivacyAction( - title: 'Grundriss-Speicherung klären', - description: - 'Überprüfen Sie die Saugroboter-App: Werden erstellte Grundrisse lokal oder in der Cloud gespeichert? Bevorzugen Sie lokale Speicherung oder löschen Sie Cloud-Kopien regelmäßig.', - type: ActionType.social, - priority: ActionPriority.high, - deviceType: 'robot', - ), - const PrivacyAction( - title: 'Offline-Betrieb priorisieren', - description: - 'Falls verfügbar: Nutzen Sie den Offline-Modus des Roboters, um Grundrisse und Navigationsdaten lokal zu speichern statt in der Cloud.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'robot', - ), - ]); - } else if (template.deviceType == 'wearable') { - actions.addAll([ - const PrivacyAction( - title: 'Gesundheitsdaten-Sharing begrenzen', - description: - 'Überprüfen Sie in der Wearable-App, welche Drittanbieter (z. B. Versicherungen, Fitness-Apps) Zugriff auf Ihre Gesundheitsdaten haben. Entfernen Sie unnötige Verbindungen.', - type: ActionType.technical, - priority: ActionPriority.high, - deviceType: 'wearable', - ), - const PrivacyAction( - title: 'Standortverfolgung deaktivieren (falls nicht benötigt)', - description: - 'Falls das Wearable über GPS verfügt und Sie Standortverfolgung nicht benötigen, deaktivieren Sie es. Dies spart Akkulaufzeit und Datenschutz.', - type: ActionType.technical, - priority: ActionPriority.medium, - deviceType: 'wearable', - ), - ]); - } else if (template.deviceType == 'toy') { - actions.addAll([ - const PrivacyAction( - title: 'Elternkontrolle vollständig konfigurieren', - description: - 'BSI-Empfehlung: Richtet Sie umfassende Elternkontrolle ein. Beschränken Sie Kontakte, Funktionen und Datenerfassung auf das Nötigste.', - type: ActionType.social, - priority: ActionPriority.high, - deviceType: 'toy', - ), - const PrivacyAction( - title: 'Aufnahmen deaktivieren, wenn nicht verwendet', - description: - 'Falls das Spielzeug ein Mikrofon hat: Deaktivieren Sie es, wenn das Kind damit nicht aktiv spielt. Manuelles Stummschalten ist besser als Sprachaktivierung.', - type: ActionType.security, - priority: ActionPriority.high, - deviceType: 'toy', - ), - ]); - } - - return actions; - } - // General recommendations always shown on the summary screen static const List _generalRecommendations = [ - 'Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).', - 'Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.', - 'Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.', - 'Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.', - 'Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.', - 'Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.', - 'Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.', + 'gen_rec_0', + 'gen_rec_1', + 'gen_rec_2', + 'gen_rec_3', + 'gen_rec_4', + 'gen_rec_5', + 'gen_rec_6', ]; static List get generalRecommendations => diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index eb1b20a..7e96a48 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -250,6 +250,487 @@ class AppLocalizations { 'Mehrere Geräte haben erhebliche Privatsphäre-/Datenschutzrisiken. Bitte setzen Sie die Maßnahmen mit hoher Priorität zeitnah um.', 'dontKnowHint': ' Es wurden {count} Antwort{suffix} mit "Weiß ich nicht" gegeben - nehmen Sie sich Zeit, die Einstellungen Ihrer Geräte besser kennenzulernen.', + // ── Rooms ─────────────────────────────────────────────────────────────── + 'room_living': 'Wohnzimmer', + 'room_kitchen': 'Küche', + 'room_bedroom': 'Schlafzimmer', + 'room_child_bedroom': 'Kinderzimmer', + 'room_bathroom': 'Badezimmer', + 'room_office': 'Arbeitszimmer', + 'room_hallway': 'Flur / Eingang', + 'room_garden': 'Garten / Außenbereich', + 'room_basement': 'Keller / Speisekammer', + 'room_whole_home': 'Ganze Wohnung', + // ── Device names ───────────────────────────────────────────────────────── + 'device_simple_sensor': + 'Einfacher Sensor (z. B. Bewegungs- oder Türsensor)', + 'device_humidity_sensor': 'Feuchtigkeitssensor', + 'device_temperature_sensor': 'Temperatursensor', + 'device_light_sensor': 'Lichtsensor', + 'device_smart_speaker': 'Smart Speaker / Sprachassistent', + 'device_smart_display': 'Smart Display (z. B. Nest Hub)', + 'device_smart_tv': 'Smart TV', + 'device_indoor_camera': 'Smarte Innenkamera', + 'device_outdoor_camera': 'Smarte Außenkamera', + 'device_doorbell_camera': 'Smarte Türklingel mit Kamera', + 'device_baby_monitor': 'Babymonitor / Babykamera', + 'device_robot_vacuum': 'Saugroboter', + 'device_smart_fridge': 'Smarter Kühlschrank', + 'device_smart_oven': 'Smarter Backofen / Herd', + 'device_smart_coffee': 'Smarte Kaffeemaschine', + 'device_smart_washing': 'Smarte Waschmaschine / Trockner', + 'device_smart_thermostat': 'Smarter Thermostat / Heizungssteuerung', + 'device_smart_plug': 'Smarte Steckdose', + 'device_smart_light': 'Smarte Beleuchtung', + 'device_smart_lock': 'Smartes Türschloss', + 'device_smart_blind': 'Smarte Jalousie / Rolllade', + 'device_fitness_tracker': 'Fitness-Tracker / Smartwatch', + 'device_smart_toy': 'Smartes Spielzeug', + 'device_smart_router': 'Smart Router / Mesh-System', + 'device_smart_hub': 'Smart-Home-Hub (z. B. Homey, Home Assistant)', + 'device_smart_meter': 'Intelligenter Stromzähler / Smart Meter', + 'device_smart_irrigation': 'Smarte Bewässerungsanlage', + 'device_smart_scale': 'Smarte Waage', + 'device_smart_printer': 'Smarter Drucker', + // ── Question texts & hints ─────────────────────────────────────────────── + 'q_password_text': + 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?', + 'q_password_hint': + 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.', + 'q_updates_text': + 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?', + 'q_updates_hint': 'Updates schließen bekannte Sicherheitslücken zeitnah.', + 'q_network_text': + 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?', + 'q_network_hint': + 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.', + 'q_informed_text': + 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?', + 'q_informed_hint': + 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.', + 'q_permissions_text': + 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?', + 'q_permissions_hint': + 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.', + 'q_mic_active_text': + 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?', + 'q_mic_active_hint': + 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.', + 'q_camera_consent_text': + 'Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?', + 'q_camera_consent_hint': + 'Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.', + 'q_sensor_frequency_text': + 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?', + 'q_sensor_frequency_hint': + 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.', + 'q_sensor_data_deletion_text': + 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?', + 'q_sensor_data_deletion_hint': + 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.', + 'q_sensor_granularity_text': + 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?', + 'q_sensor_granularity_hint': + 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.', + 'q_sensor_local_text': + 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?', + 'q_sensor_local_hint': + 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.', + 'q_voice_history_text': + 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?', + 'q_voice_history_hint': + 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.', + 'q_voice_local_text': + 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?', + 'q_voice_local_hint': + 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.', + 'q_skills_permissions_text': + 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?', + 'q_skills_permissions_hint': + 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.', + 'q_video_encryption_text': + 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?', + 'q_video_encryption_hint': + 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.', + 'q_video_storage_text': + 'Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?', + 'q_video_storage_hint': + 'Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.', + 'q_sharing_restrictions_text': + 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?', + 'q_sharing_restrictions_hint': + 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.', + 'q_motion_detection_text': + 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?', + 'q_motion_detection_hint': + 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.', + 'q_account_required_text': + 'Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?', + 'q_account_required_hint': + 'Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.', + 'q_tracking_disabled_text': + 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?', + 'q_tracking_disabled_hint': + 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.', + 'q_local_mode_text': + 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?', + 'q_local_mode_hint': + 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.', + 'q_data_collection_text': + 'Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?', + 'q_data_collection_hint': + 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.', + 'q_offline_control_text': + 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?', + 'q_offline_control_hint': + 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.', + 'q_family_access_text': + 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?', + 'q_family_access_hint': + 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.', + 'q_local_control_text': + 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?', + 'q_local_control_hint': + 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.', + 'q_usage_tracking_text': + 'Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?', + 'q_usage_tracking_hint': + 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.', + 'q_offline_fallback_text': + 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?', + 'q_offline_fallback_hint': + 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.', + 'q_offline_unlock_text': + 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?', + 'q_offline_unlock_hint': + 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.', + 'q_access_logging_text': + 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?', + 'q_access_logging_hint': + 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.', + 'q_two_factor_text': + 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?', + 'q_two_factor_hint': + 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.', + 'q_map_privacy_text': + 'Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?', + 'q_map_privacy_hint': + 'Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.', + 'q_cloud_required_text': + 'Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?', + 'q_cloud_required_hint': + 'Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.', + 'q_vision_data_text': + 'Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?', + 'q_vision_data_hint': + 'Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.', + 'q_parental_control_text': + 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?', + 'q_parental_control_hint': + 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.', + 'q_child_data_limits_text': + 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?', + 'q_child_data_limits_hint': + 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.', + 'q_recording_disable_text': + 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?', + 'q_recording_disable_hint': + 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.', + 'q_health_sharing_text': + 'Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?', + 'q_health_sharing_hint': + 'Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.', + 'q_location_tracking_text': + 'Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?', + 'q_location_tracking_hint': + 'GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.', + 'q_expert_data_retention_duration_text': + 'Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?', + 'q_expert_data_retention_duration_hint': + 'Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.', + 'q_expert_access_control_granular_text': + 'Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?', + 'q_expert_access_control_granular_hint': + 'Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.', + 'q_expert_third_party_sharing_limited_text': + 'Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?', + 'q_expert_third_party_sharing_limited_hint': + 'Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.', + 'q_expert_data_sale_disabled_text': + 'Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?', + 'q_expert_data_sale_disabled_hint': + 'Eine ausdrückliche "kein Datenverkauf"-Option ist ein starkes Datenschutzsignal.', + 'q_expert_update_support_window_text': + 'Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?', + 'q_expert_update_support_window_hint': + 'Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.', + 'q_expert_vulnerability_process_text': + 'Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?', + 'q_expert_vulnerability_process_hint': + 'Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.', + 'q_expert_offline_functionality_text': + 'Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?', + 'q_expert_offline_functionality_hint': + 'Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.', + 'q_expert_bystander_transparency_text': + 'Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?', + 'q_expert_bystander_transparency_hint': + 'Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.', + 'q_expert_child_data_protection_text': + 'Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?', + 'q_expert_child_data_protection_hint': + 'Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.', + 'q_expert_access_revocation_text': + 'Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?', + 'q_expert_access_revocation_hint': + 'Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.', + 'q_expert_sensitive_inference_controls_text': + 'Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?', + 'q_expert_sensitive_inference_controls_hint': + 'Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.', + // ── Action titles & descriptions ───────────────────────────────────────── + 'a_password_title': 'Standard-Passwort ändern', + 'a_password_desc': + 'Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.', + 'a_updates_title': 'Automatische Updates aktivieren', + 'a_updates_desc': + 'Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.', + 'a_network_title': 'Separates IoT-WLAN einrichten', + 'a_network_desc': + 'Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.', + 'a_informed_title': 'Haushaltsmitglieder informieren', + 'a_informed_desc': + 'Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.', + 'a_permissions_title': 'App-Berechtigungen einschränken', + 'a_permissions_desc': + 'Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.', + 'a_camera_consent_title': 'Kameraausrichtung mit Bewohnern abstimmen', + 'a_camera_consent_desc': + 'Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.', + 'a_mic_active_title': 'Mikrofon bei Nichtnutzung deaktivieren', + 'a_mic_active_desc': + 'Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.', + 'a_sensor_frequency_title': 'Messintervall reduzieren', + 'a_sensor_frequency_desc': + 'Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.', + 'a_sensor_data_deletion_title': 'Alte Messwerte löschen', + 'a_sensor_data_deletion_desc': + 'Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.', + 'a_sensor_granularity_title': 'Daten weniger detailliert anzeigen', + 'a_sensor_granularity_desc': + 'Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.', + 'a_sensor_local_title': 'Lokale Verarbeitung bevorzugen', + 'a_sensor_local_desc': + 'Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.', + 'a_voice_history_title': 'Sprachaufzeichnungen löschen', + 'a_voice_history_desc': + 'BSI-Empfehlung: Löschen Sie Sprachaufzeichnungen regelmäßig und deaktivieren Sie die Speicherung von Sprachverlauf, falls die Option verfügbar ist.', + 'a_voice_local_title': 'Lokale Sprachverarbeitung aktivieren', + 'a_voice_local_desc': + 'Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.', + 'a_skills_permissions_title': 'Skills/Fähigkeiten überprüfen', + 'a_skills_permissions_desc': + 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.', + 'a_video_encryption_title': 'WLAN-Verschlüsselung prüfen', + 'a_video_encryption_desc': + 'BSI-Empfehlung: Verwenden Sie WPA2 oder WPA3 für Ihr Heimnetz. WEP und WPA sind veraltet.', + 'a_video_storage_title': 'Aufnahmen lokal speichern', + 'a_video_storage_desc': + 'Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.', + 'a_sharing_restrictions_title': 'Kamera-Zugriffe einschränken', + 'a_sharing_restrictions_desc': + 'Entfernen Sie in der App alle unnötigen Freigaben und erlauben Sie Live-View/Aufnahmen nur für benötigte Konten.', + 'a_motion_detection_title': + 'Bewegungserkennung bei Anwesenheit deaktivieren', + 'a_motion_detection_desc': + 'Deaktivieren Sie Bewegungserkennung, wenn Personen zu Hause sind, oder setzen Sie einen Zeitplan, der sie nur in Abwesenheitszeiten aktiviert.', + 'a_account_required_title': 'Kontopflicht datenschutzarm umsetzen', + 'a_account_required_desc': + 'Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.', + 'a_tracking_disabled_title': 'Tracking und Werbung deaktivieren', + 'a_tracking_disabled_desc': + 'Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.', + 'a_local_mode_title': 'Offline-Nutzung bevorzugen', + 'a_local_mode_desc': + 'Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.', + 'a_data_collection_title': 'Historien-Upload deaktivieren', + 'a_data_collection_desc': + 'Deaktivieren Sie in der Thermostat-App die Übertragung von Temperaturhistorien an den Hersteller und verkürzen Sie die Speicherdauer.', + 'a_offline_control_title': 'Lokale Steuerung einrichten', + 'a_offline_control_desc': + 'Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.', + 'a_family_access_title': 'Zugriffsrechte für Haushaltsmitglieder trennen', + 'a_family_access_desc': + 'Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.', + 'a_local_control_title': 'Lokale Automatisierungen aktivieren', + 'a_local_control_desc': + 'Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.', + 'a_usage_tracking_title': 'Nutzungs-Tracking deaktivieren', + 'a_usage_tracking_desc': + 'Schalten Sie in den App-Einstellungen Analyse-, Telemetrie- und Nutzungsdatenerfassung aus.', + 'a_offline_fallback_title': 'Offline-Notbetrieb sicherstellen', + 'a_offline_fallback_desc': + 'Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.', + 'a_offline_unlock_title': 'Offline-Zugang absichern', + 'a_offline_unlock_desc': + 'Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.', + 'a_access_logging_title': 'Zugriffsprotokoll aktivieren', + 'a_access_logging_desc': + 'Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.', + 'a_two_factor_title': 'Zwei-Faktor-Authentifizierung aktivieren', + 'a_two_factor_desc': + 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.', + 'a_map_privacy_title': 'Cloud-Grundrissspeicherung deaktivieren', + 'a_map_privacy_desc': + 'Stellen Sie die Speicherung auf lokal um und deaktivieren Sie Cloud-Backups von Grundrissen, falls diese Option verfügbar ist.', + 'a_cloud_required_title': 'Cloud-Abhängigkeit reduzieren', + 'a_cloud_required_desc': + 'Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.', + 'a_vision_data_title': 'Kameradaten nur lokal verarbeiten', + 'a_vision_data_desc': + 'Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.', + 'a_parental_control_title': 'Elternkontrolle einrichten', + 'a_parental_control_desc': + 'Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.', + 'a_child_data_limits_title': 'Datenerfassung minimieren', + 'a_child_data_limits_desc': + 'Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.', + 'a_recording_disable_title': 'Audio/Video-Aufnahmen deaktivieren', + 'a_recording_disable_desc': + 'Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.', + 'a_health_sharing_title': 'Gesundheitsdaten-Freigaben einschränken', + 'a_health_sharing_desc': + 'Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.', + 'a_location_tracking_title': 'Standortfreigabe reduzieren', + 'a_location_tracking_desc': + 'Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.', + 'a_expert_data_retention_duration_title': 'Speicherfristen festlegen', + 'a_expert_data_retention_duration_desc': + 'Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.', + 'a_expert_access_control_granular_title': + 'Granulare Rollen und Konten einführen', + 'a_expert_access_control_granular_desc': + 'Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.', + 'a_expert_third_party_sharing_limited_title': 'Drittweitergabe begrenzen', + 'a_expert_third_party_sharing_limited_desc': + 'Deaktivieren Sie Partner-, Werbe- und Analyseweitergaben in Datenschutz- und Kontoeinstellungen.', + 'a_expert_data_sale_disabled_title': 'Datenverkauf widersprechen', + 'a_expert_data_sale_disabled_desc': + 'Aktivieren Sie vorhandene "Do not sell"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.', + 'a_expert_update_support_window_title': 'Update-Zusage verifizieren', + 'a_expert_update_support_window_desc': + 'Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.', + 'a_expert_vulnerability_process_title': + 'Hersteller-Sicherheitsprozess prüfen', + 'a_expert_vulnerability_process_desc': + 'Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.', + 'a_expert_offline_functionality_title': + 'Offline-Funktionalität priorisieren', + 'a_expert_offline_functionality_desc': + 'Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.', + 'a_expert_bystander_transparency_title': + 'Transparenzhinweise für Umfeld ergänzen', + 'a_expert_bystander_transparency_desc': + 'Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.', + 'a_expert_child_data_protection_title': 'Kinderdatenschutz verschärfen', + 'a_expert_child_data_protection_desc': + 'Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.', + 'a_expert_access_revocation_title': + 'Schnellen Zugriffswiderruf einrichten', + 'a_expert_access_revocation_desc': + 'Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.', + 'a_expert_sensitive_inference_controls_title': + 'Inferenzfunktionen einschränken', + 'a_expert_sensitive_inference_controls_desc': + 'Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.', + 'a_dont_know_title': 'Geräteeinstellungen besser kennenlernen', + 'a_dont_know_desc': + 'Mindestens eine Frage wurde mit "Weiß ich nicht" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.', + // ── Scoring factor short labels ────────────────────────────────────────── + 'sl_base_risk': 'Grundrisiko des Gerätetyps', + 'sl_child_room_bonus': 'Erhöhte Sensibilität: Kinderzimmer', + 'sl_password': 'Standard-Passwort nicht geändert', + 'sl_updates': 'Automatische Updates nicht aktiv', + 'sl_network': 'Kein separates IoT-WLAN eingerichtet', + 'sl_informed': 'Haushaltsmitglieder nicht informiert', + 'sl_permissions': 'App-Berechtigungen nicht reduziert', + 'sl_camera_consent': 'Kein Einverständnis für Kamerabereich', + 'sl_mic_active': 'Mikrofon nicht bei Nichtnutzung deaktiviert', + 'sl_sensor_frequency': 'Messintervall nicht reduziert', + 'sl_sensor_data_deletion': 'Alte Messwerte nicht gelöscht', + 'sl_sensor_granularity': 'Daten zu fein granular gespeichert', + 'sl_sensor_local': 'Daten in die Cloud übertragen', + 'sl_voice_history': 'Sprachaufnahmen nicht löschbar', + 'sl_voice_local': 'Keine lokale Sprachverarbeitung', + 'sl_skills_permissions': 'Skills nicht regelmäßig geprüft', + 'sl_video_encryption': 'Videoübertragung nicht verschlüsselt', + 'sl_video_storage': 'Aufnahmen nur in Anbieter-Cloud', + 'sl_sharing_restrictions': 'Zugriff auf Aufnahmen nicht kontrolliert', + 'sl_motion_detection': 'Bewegungserkennung immer aktiv', + 'sl_account_required': 'Pflichtkonto beim Hersteller nötig', + 'sl_tracking_disabled': 'Werbe-Tracking nicht deaktiviert', + 'sl_local_mode': 'Kein Offline-Betrieb möglich', + 'sl_data_collection': 'Temperaturverlauf an Hersteller übertragen', + 'sl_offline_control': 'Kein Offline-Betrieb möglich', + 'sl_family_access': 'Zugriff nicht einschränkbar', + 'sl_local_control': 'Automatisierungen nur mit Internet', + 'sl_usage_tracking': 'Schaltmuster vom Hersteller erfasst', + 'sl_offline_fallback': 'Gerät offline nicht nutzbar', + 'sl_offline_unlock': 'Kein Offline-Öffnen möglich', + 'sl_access_logging': 'Kein Zugriffsprotokoll verfügbar', + 'sl_two_factor': '2-Faktor-Authentifizierung fehlt', + 'sl_map_privacy': 'Grundriss an Hersteller übertragen', + 'sl_cloud_required': 'Navigation nur mit Cloud möglich', + 'sl_vision_data': 'Kamerabilder gespeichert oder übertragen', + 'sl_parental_control': 'Elternkontrolle nicht eingerichtet', + 'sl_child_data_limits': 'Datenmenge nicht eingeschränkt', + 'sl_recording_disable': 'Aufnahmen nicht deaktivierbar', + 'sl_health_sharing': 'Gesundheitsdaten mit Dritten geteilt', + 'sl_location_tracking': 'Standortverfolgung aktiv', + 'sl_expert_data_retention_duration': 'Aufbewahrungsdauer unklar/zu lang', + 'sl_expert_access_control_granular': 'Granulare Zugriffskontrolle fehlt', + 'sl_expert_third_party_sharing_limited': + 'Weitergabe an Dritte nicht begrenzt', + 'sl_expert_data_sale_disabled': 'Datenverkauf nicht ausgeschlossen', + 'sl_expert_update_support_window': + 'Garantierter Update-Zeitraum unbekannt', + 'sl_expert_vulnerability_process': + 'Schwachstellenprozess nicht dokumentiert', + 'sl_expert_offline_functionality': + 'Sinnvoller Betrieb ohne Internet nicht möglich', + 'sl_expert_bystander_transparency': + 'Transparenz für Betroffene im Umfeld fehlt', + 'sl_expert_child_data_protection': + 'Schutzmaßnahmen für Kinderdaten fehlen', + 'sl_expert_access_revocation': 'Einzelner Zugriffswiderruf nicht möglich', + 'sl_expert_sensitive_inference_controls': + 'Kontrollen gegen sensible Inferenz fehlen', + // ── Inherent risk hints ────────────────────────────────────────────────── + 'risk_hint_camera': + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.', + 'risk_hint_mic': + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.', + 'risk_hint_lock': + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.', + 'risk_hint_child_room': + 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.', + 'risk_hint_generic': + 'Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.', + // ── General recommendations ────────────────────────────────────────────── + 'gen_rec_0': + 'Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).', + 'gen_rec_1': + 'Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.', + 'gen_rec_2': + 'Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.', + 'gen_rec_3': + 'Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.', + 'gen_rec_4': + 'Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.', + 'gen_rec_5': + 'Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.', + 'gen_rec_6': + 'Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.', }, 'en': { 'appTitle': 'Simplications', @@ -441,6 +922,484 @@ class AppLocalizations { 'Several devices have significant privacy/data-protection risks. Please implement high-priority measures promptly.', 'dontKnowHint': ' {count} answer{suffix} were marked as "I don\'t know" - take time to understand your device settings better.', + // ── Rooms ─────────────────────────────────────────────────────────────── + 'room_living': 'Living room', + 'room_kitchen': 'Kitchen', + 'room_bedroom': 'Bedroom', + 'room_child_bedroom': "Child's bedroom", + 'room_bathroom': 'Bathroom', + 'room_office': 'Office', + 'room_hallway': 'Hallway / Entrance', + 'room_garden': 'Garden / Outdoor area', + 'room_basement': 'Basement / Pantry', + 'room_whole_home': 'Entire home', + // ── Device names ───────────────────────────────────────────────────────── + 'device_simple_sensor': 'Basic sensor (e.g., motion or door sensor)', + 'device_humidity_sensor': 'Humidity sensor', + 'device_temperature_sensor': 'Temperature sensor', + 'device_light_sensor': 'Light sensor', + 'device_smart_speaker': 'Smart speaker / voice assistant', + 'device_smart_display': 'Smart display (e.g., Nest Hub)', + 'device_smart_tv': 'Smart TV', + 'device_indoor_camera': 'Smart indoor camera', + 'device_outdoor_camera': 'Smart outdoor camera', + 'device_doorbell_camera': 'Smart doorbell with camera', + 'device_baby_monitor': 'Baby monitor / baby camera', + 'device_robot_vacuum': 'Robot vacuum', + 'device_smart_fridge': 'Smart fridge', + 'device_smart_oven': 'Smart oven / stove', + 'device_smart_coffee': 'Smart coffee machine', + 'device_smart_washing': 'Smart washer / dryer', + 'device_smart_thermostat': 'Smart thermostat / heating control', + 'device_smart_plug': 'Smart plug', + 'device_smart_light': 'Smart lighting', + 'device_smart_lock': 'Smart door lock', + 'device_smart_blind': 'Smart blind / shutter', + 'device_fitness_tracker': 'Fitness tracker / smartwatch', + 'device_smart_toy': 'Smart toy', + 'device_smart_router': 'Smart router / mesh system', + 'device_smart_hub': 'Smart home hub (e.g., Homey, Home Assistant)', + 'device_smart_meter': 'Intelligent electricity meter / smart meter', + 'device_smart_irrigation': 'Smart irrigation system', + 'device_smart_scale': 'Smart scale', + 'device_smart_printer': 'Smart printer', + // ── Question texts & hints ─────────────────────────────────────────────── + 'q_password_text': + 'Have you changed the default password of the device or its linked account?', + 'q_password_hint': + 'Default passwords are often publicly known and easy to crack.', + 'q_updates_text': + 'Are automatic security updates enabled for the device?', + 'q_updates_hint': + 'Updates close known security vulnerabilities promptly.', + 'q_network_text': + 'Is the device connected to a separate smart home or IoT Wi-Fi network?', + 'q_network_hint': + 'A dedicated network for smart devices protects your main home network.', + 'q_informed_text': + 'Are all people in the household informed about this device and its function?', + 'q_informed_hint': + 'All household members should know what data the device captures.', + 'q_permissions_text': + 'Have you disabled unnecessary app permissions (e.g., location, contacts)?', + 'q_permissions_hint': + 'Only permissions that are truly needed should be enabled.', + 'q_mic_active_text': + 'Do you deactivate the microphone when you are not actively using it?', + 'q_mic_active_hint': + 'Smart speakers and devices with microphones can be activated unintentionally.', + 'q_camera_consent_text': + 'Does the camera only record areas for which everyone affected has given their consent?', + 'q_camera_consent_hint': + 'Cameras in communal or private areas require the consent of all residents.', + 'q_sensor_frequency_text': + 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?', + 'q_sensor_frequency_hint': + 'A lower measurement frequency produces less data and limits inferences about your behavior.', + 'q_sensor_data_deletion_text': + 'Are older measurement values deleted automatically or on request?', + 'q_sensor_data_deletion_hint': + 'Old historical data should not be stored permanently. Check retention settings.', + 'q_sensor_granularity_text': + 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?', + 'q_sensor_granularity_hint': + 'Less granular views help prevent inferences about precise presence or behavior patterns.', + 'q_sensor_local_text': + 'Is measurement data processed and stored locally without being transferred to the cloud?', + 'q_sensor_local_hint': + 'Local processing prevents the vendor from accessing your measurement data.', + 'q_voice_history_text': + 'Can you delete voice recordings from device history or disable this feature?', + 'q_voice_history_hint': + 'BSI recommendation: Minimize recording retention or delete recordings regularly.', + 'q_voice_local_text': + 'Is voice processing performed partly on the device locally?', + 'q_voice_local_hint': + 'Local processing reduces the amount of data sent to the cloud.', + 'q_skills_permissions_text': + 'Do you regularly review which skills have access to your account?', + 'q_skills_permissions_hint': + 'Third-party skills can access sensitive data. Enable only necessary skills.', + 'q_video_encryption_text': + 'Is video recording and transmission encrypted end-to-end?', + 'q_video_encryption_hint': + 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.', + 'q_video_storage_text': + 'Are recordings stored locally (not only in the vendor cloud)?', + 'q_video_storage_hint': + 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.', + 'q_sharing_restrictions_text': + 'Can you control who can access live view and recordings?', + 'q_sharing_restrictions_hint': + 'You should be able to precisely control access to video recordings.', + 'q_motion_detection_text': + 'Can you disable or schedule motion detection when you are at home?', + 'q_motion_detection_hint': + 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.', + 'q_account_required_text': + 'Can you use the device without a mandatory online account?', + 'q_account_required_hint': + 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.', + 'q_tracking_disabled_text': + 'Can you completely disable advertising and tracking features?', + 'q_tracking_disabled_hint': + 'Smart TVs often collect viewing habit data. Look for privacy settings.', + 'q_local_mode_text': + 'Can you use the device via HDMI or local sources without internet?', + 'q_local_mode_hint': + 'Offline use protects usage data from being sent to the vendor.', + 'q_data_collection_text': + 'Do temperature history and schedules stay on-device (not sent to the vendor)?', + 'q_data_collection_hint': + 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.', + 'q_offline_control_text': + 'Can you operate the thermostat offline (without internet)?', + 'q_offline_control_hint': + 'Offline operation or local automation protects data from cloud access.', + 'q_family_access_text': + 'Can you control who may adjust heating (e.g., restrict guests)?', + 'q_family_access_hint': + 'Household members should have control without visitors changing everything.', + 'q_local_control_text': 'Can automations run locally without internet?', + 'q_local_control_hint': + 'Local scenes and schedules protect your privacy better.', + 'q_usage_tracking_text': + 'Have you disabled or limited vendor collection of switching patterns and usage times?', + 'q_usage_tracking_hint': + 'Usage patterns can reveal presence and habits. Check app privacy settings.', + 'q_offline_fallback_text': + 'Do devices still work if internet or app connection fails?', + 'q_offline_fallback_hint': + 'Reliable local operation is important for daily use and privacy.', + 'q_offline_unlock_text': + 'Can you unlock the lock offline (e.g., with code or key)?', + 'q_offline_unlock_hint': + 'Backup options prevent lockout during internet or power outages.', + 'q_access_logging_text': 'Can you track who opened the lock and when?', + 'q_access_logging_hint': + 'An access log helps you detect suspicious activity.', + 'q_two_factor_text': + 'Is two-factor authentication (2FA) available for the lock account?', + 'q_two_factor_hint': + 'BSI recommendation: 2FA protects your account from unauthorized remote access.', + 'q_map_privacy_text': + 'Are created floor plans stored exclusively on the device locally?', + 'q_map_privacy_hint': + 'Home floor plans are sensitive information and should not be sent to the vendor.', + 'q_cloud_required_text': + 'Does floor-plan navigation work without cloud connection?', + 'q_cloud_required_hint': + 'Devices with local navigation are more privacy-friendly because no room data is uploaded.', + 'q_vision_data_text': + 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?', + 'q_vision_data_hint': + 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.', + 'q_parental_control_text': + 'Are there parental control features to manage the toy?', + 'q_parental_control_hint': + 'Parental controls should allow restricting contacts and features.', + 'q_child_data_limits_text': + 'Can you limit which personal data the toy collects?', + 'q_child_data_limits_hint': + 'Child-focused devices should collect and store minimal data.', + 'q_recording_disable_text': + 'Can you disable audio and video recording on the device?', + 'q_recording_disable_hint': + 'BSI recommendation: Recordings of children should only be possible with explicit control.', + 'q_health_sharing_text': + 'Can you control which third parties can access your health data?', + 'q_health_sharing_hint': + 'Health data is sensitive. Only authorized apps should have access.', + 'q_location_tracking_text': + 'Can you disable location tracking when not needed?', + 'q_location_tracking_hint': + 'GPS tracking uses battery and can reveal movement patterns.', + 'q_expert_data_retention_duration_text': + 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?', + 'q_expert_data_retention_duration_hint': + 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.', + 'q_expert_access_control_granular_text': + 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?', + 'q_expert_access_control_granular_hint': + 'Granular access control reduces the risk of unauthorized access and misuse.', + 'q_expert_third_party_sharing_limited_text': + 'Is third-party sharing disabled or clearly limited to necessary services?', + 'q_expert_third_party_sharing_limited_hint': + 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.', + 'q_expert_data_sale_disabled_text': + 'Is the sale of your data excluded (or actively disabled, where possible)?', + 'q_expert_data_sale_disabled_hint': + 'An explicit "no data sale" option is a strong privacy signal.', + 'q_expert_update_support_window_text': + 'Is it known how long the vendor guarantees security updates?', + 'q_expert_update_support_window_hint': + 'A transparent update commitment reduces long-term security and privacy risks.', + 'q_expert_vulnerability_process_text': + 'Is there a documented process for reporting and fixing vulnerabilities?', + 'q_expert_vulnerability_process_hint': + 'Prefer vendors that provide responsible disclosure policies or clear security contact information.', + 'q_expert_offline_functionality_text': + 'Does the device remain meaningfully usable with limited internet connectivity?', + 'q_expert_offline_functionality_hint': + 'More offline functionality often means less continuous data transfer to the cloud.', + 'q_expert_bystander_transparency_text': + 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?', + 'q_expert_bystander_transparency_hint': + 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.', + 'q_expert_child_data_protection_text': + 'Are child-data protections active (minimization, no profiling, restrictive sharing)?', + 'q_expert_child_data_protection_hint': + 'Devices in child-related contexts require especially strict privacy safeguards.', + 'q_expert_access_revocation_text': + 'Can digital keys/access rights be revoked quickly and individually?', + 'q_expert_access_revocation_hint': + 'Fast revocation is crucial when devices are shared or users change.', + 'q_expert_sensitive_inference_controls_text': + 'Are features that infer sensitive health or behavior profiles restricted or disableable?', + 'q_expert_sensitive_inference_controls_hint': + 'Inference controls reduce risks from secondary use of sensitive data.', + // ── Action titles & descriptions ───────────────────────────────────────── + 'a_password_title': 'Change default password', + 'a_password_desc': + 'Replace the default password with a strong, unique password. Use a password manager.', + 'a_updates_title': 'Enable automatic updates', + 'a_updates_desc': + 'Enable automatic security updates in device or app settings.', + 'a_network_title': 'Set up separate IoT Wi-Fi', + 'a_network_desc': + "Set up a dedicated Wi-Fi network for smart home devices, for example with your router's guest network.", + 'a_informed_title': 'Inform household members', + 'a_informed_desc': + 'Inform all residents about what data the device collects, who has access, and how it can be disabled.', + 'a_permissions_title': 'Restrict app permissions', + 'a_permissions_desc': + 'Check companion-app permissions in phone settings and disable unnecessary ones.', + 'a_camera_consent_title': 'Align camera positioning with residents', + 'a_camera_consent_desc': + 'Obtain consent from everyone affected. The camera must not record areas without consent.', + 'a_mic_active_title': 'Disable microphone when not in use', + 'a_mic_active_desc': + 'Use the physical mute switch or disable the microphone in settings.', + 'a_sensor_frequency_title': 'Reduce measurement interval', + 'a_sensor_frequency_desc': + 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.', + 'a_sensor_data_deletion_title': 'Delete old measurement values', + 'a_sensor_data_deletion_desc': + 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.', + 'a_sensor_granularity_title': 'Show less detailed data', + 'a_sensor_granularity_desc': + 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.', + 'a_sensor_local_title': 'Prefer local processing', + 'a_sensor_local_desc': + 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.', + 'a_voice_history_title': 'Delete voice recordings', + 'a_voice_history_desc': + 'BSI recommendation: Regularly delete voice recordings and disable voice history storage if the option is available.', + 'a_voice_local_title': 'Enable local voice processing', + 'a_voice_local_desc': + 'Enable local voice processing if available. If not, minimize cloud storage of voice data.', + 'a_skills_permissions_title': 'Review skills/integrations', + 'a_skills_permissions_desc': + 'Review which third-party skills have access. Disable unnecessary skills.', + 'a_video_encryption_title': 'Check Wi-Fi encryption', + 'a_video_encryption_desc': + 'BSI recommendation: Use WPA2 or WPA3 on your home network. WEP and WPA are outdated.', + 'a_video_storage_title': 'Store recordings locally', + 'a_video_storage_desc': + 'Configure local storage if possible. If cloud-only storage is unavoidable, shorten the retention period and delete recordings regularly.', + 'a_sharing_restrictions_title': 'Restrict camera access', + 'a_sharing_restrictions_desc': + 'Remove all unnecessary shares in the app and allow live view/recordings only for required accounts.', + 'a_motion_detection_title': 'Disable motion detection when at home', + 'a_motion_detection_desc': + 'Disable motion detection when people are home, or set a schedule that activates it only during absence.', + 'a_account_required_title': 'Minimize privacy impact of required account', + 'a_account_required_desc': + 'If account-free operation is not possible, use a separate account with minimal profile data and disable personalized services.', + 'a_tracking_disabled_title': 'Disable tracking and advertising', + 'a_tracking_disabled_desc': + 'Disable tracking, personalized advertising, and optional telemetry in privacy settings.', + 'a_local_mode_title': 'Prefer offline use', + 'a_local_mode_desc': + 'Use the device primarily via local sources (e.g., HDMI) to reduce data transfer to the vendor.', + 'a_data_collection_title': 'Disable history upload', + 'a_data_collection_desc': + 'Disable transmission of temperature history to the vendor in the thermostat app and shorten the retention period.', + 'a_offline_control_title': 'Set up local control', + 'a_offline_control_desc': + 'Configure local schedules and control without cloud dependency if the device supports it.', + 'a_family_access_title': 'Separate access rights for household members', + 'a_family_access_desc': + 'Set up separate roles/accounts so that only authorized people can adjust the heating.', + 'a_local_control_title': 'Enable local automations', + 'a_local_control_desc': + 'Use local scenes/schedules instead of cloud automations where available.', + 'a_usage_tracking_title': 'Disable usage tracking', + 'a_usage_tracking_desc': + 'Disable analytics, telemetry, and usage data collection in app settings.', + 'a_offline_fallback_title': 'Ensure offline fallback', + 'a_offline_fallback_desc': + 'Check local switches/buttons and set up fallback controls so the device remains usable without internet.', + 'a_offline_unlock_title': 'Secure offline access', + 'a_offline_unlock_desc': + 'Set up a physical key or emergency code and test access when internet is unavailable.', + 'a_access_logging_title': 'Enable access log', + 'a_access_logging_desc': + 'Enable logging and notifications for lock openings so unauthorized access can be detected.', + 'a_two_factor_title': 'Enable two-factor authentication', + 'a_two_factor_desc': + 'BSI recommendation: Enable 2FA for your lock account to protect remote access.', + 'a_map_privacy_title': 'Disable cloud floor-plan storage', + 'a_map_privacy_desc': + 'Switch storage to local and disable cloud backups of floor plans if the option is available.', + 'a_cloud_required_title': 'Reduce cloud dependency', + 'a_cloud_required_desc': + 'Enable local navigation or offline mode if available. If not, consider switching to a more privacy-friendly model.', + 'a_vision_data_title': 'Process camera data locally only', + 'a_vision_data_desc': + 'Disable upload/storage of camera images and use exclusively local navigation processing where possible.', + 'a_parental_control_title': 'Set up parental controls', + 'a_parental_control_desc': + 'Enable parental controls with a PIN and restrict contacts, features, and sharing to what is necessary.', + 'a_child_data_limits_title': 'Minimize data collection', + 'a_child_data_limits_desc': + 'Disable optional profile data and collect only the child data required for core functionality.', + 'a_recording_disable_title': 'Disable audio/video recordings', + 'a_recording_disable_desc': + 'Disable recording features by default and enable them only briefly when specifically needed.', + 'a_health_sharing_title': 'Restrict health data sharing', + 'a_health_sharing_desc': + 'Revoke health data access from unnecessary third-party apps in app and account settings.', + 'a_location_tracking_title': 'Reduce location sharing', + 'a_location_tracking_desc': + 'Disable location tracking outside active use or allow it only while the app is in use.', + 'a_expert_data_retention_duration_title': 'Define retention periods', + 'a_expert_data_retention_duration_desc': + 'Set short, clear retention periods in settings and regularly delete old data.', + 'a_expert_access_control_granular_title': + 'Introduce granular roles and accounts', + 'a_expert_access_control_granular_desc': + 'Use separate accounts instead of shared logins and grant only the minimum necessary permissions.', + 'a_expert_third_party_sharing_limited_title': 'Limit third-party sharing', + 'a_expert_third_party_sharing_limited_desc': + 'Disable partner, advertising, and analytics sharing in privacy and account settings.', + 'a_expert_data_sale_disabled_title': 'Opt out of data sale', + 'a_expert_data_sale_disabled_desc': + 'Enable available "Do not sell" options or object to data sharing for commercial purposes.', + 'a_expert_update_support_window_title': 'Verify update commitment', + 'a_expert_update_support_window_desc': + "Review the vendor's official update policy and plan a device replacement if no commitment is given.", + 'a_expert_vulnerability_process_title': 'Review vendor security process', + 'a_expert_vulnerability_process_desc': + 'Prefer vendors with a clear security contact and responsible disclosure process.', + 'a_expert_offline_functionality_title': + 'Prioritize offline functionality', + 'a_expert_offline_functionality_desc': + 'Enable local operating modes and minimize mandatory cloud features where the device allows.', + 'a_expert_bystander_transparency_title': + 'Add transparency notices for bystanders', + 'a_expert_bystander_transparency_desc': + 'Provide visible notices, recording indicators, and clear information for people in the surrounding area.', + 'a_expert_child_data_protection_title': + 'Strengthen child data protection', + 'a_expert_child_data_protection_desc': + 'Enable child-appropriate profiles, minimize data collection, and disable profiling/sharing.', + 'a_expert_access_revocation_title': 'Set up rapid access revocation', + 'a_expert_access_revocation_desc': + 'Ensure that digital keys can be revoked individually and immediately, e.g., in case of device loss.', + 'a_expert_sensitive_inference_controls_title': + 'Restrict inference features', + 'a_expert_sensitive_inference_controls_desc': + 'Disable features that infer sensitive health or behavioral profiles unless strictly necessary.', + 'a_dont_know_title': 'Get to know device settings better', + 'a_dont_know_desc': + "At least one question was answered with \"I don't know\". Review your device settings and documentation to reduce risk more effectively.", + // ── Scoring factor short labels ────────────────────────────────────────── + 'sl_base_risk': 'Baseline risk of device type', + 'sl_child_room_bonus': "Increased sensitivity: child's bedroom", + 'sl_password': 'Default password not changed', + 'sl_updates': 'Automatic updates not enabled', + 'sl_network': 'No separate IoT Wi-Fi configured', + 'sl_informed': 'Household members not informed', + 'sl_permissions': 'App permissions not reduced', + 'sl_camera_consent': 'No consent for camera-covered area', + 'sl_mic_active': 'Microphone not disabled when unused', + 'sl_sensor_frequency': 'Measurement interval not reduced', + 'sl_sensor_data_deletion': 'Old measurement values not deleted', + 'sl_sensor_granularity': 'Data stored with too much granularity', + 'sl_sensor_local': 'Data transferred to cloud', + 'sl_voice_history': 'Voice recordings not deletable', + 'sl_voice_local': 'No local voice processing', + 'sl_skills_permissions': 'Skills not reviewed regularly', + 'sl_video_encryption': 'Video transmission not encrypted', + 'sl_video_storage': 'Recordings only in vendor cloud', + 'sl_sharing_restrictions': 'Recording access not controlled', + 'sl_motion_detection': 'Motion detection always active', + 'sl_account_required': 'Mandatory vendor account required', + 'sl_tracking_disabled': 'Ad tracking not disabled', + 'sl_local_mode': 'No offline operation possible', + 'sl_data_collection': 'Temperature history sent to vendor', + 'sl_offline_control': 'No offline operation possible', + 'sl_family_access': 'Access cannot be restricted', + 'sl_local_control': 'Automations require internet connection', + 'sl_usage_tracking': 'Switching patterns collected by vendor', + 'sl_offline_fallback': 'Device unusable offline', + 'sl_offline_unlock': 'No offline unlock possible', + 'sl_access_logging': 'No access log available', + 'sl_two_factor': 'Two-factor authentication missing', + 'sl_map_privacy': 'Floor plan transmitted to vendor', + 'sl_cloud_required': 'Navigation only possible via cloud', + 'sl_vision_data': 'Camera images stored or transmitted', + 'sl_parental_control': 'Parental controls not configured', + 'sl_child_data_limits': 'Data collection not limited', + 'sl_recording_disable': 'Recording cannot be disabled', + 'sl_health_sharing': 'Health data shared with third parties', + 'sl_location_tracking': 'Location tracking enabled', + 'sl_expert_data_retention_duration': + 'Retention duration unclear or too long', + 'sl_expert_access_control_granular': 'Granular access control missing', + 'sl_expert_third_party_sharing_limited': + 'Third-party sharing not limited', + 'sl_expert_data_sale_disabled': 'Data sale not excluded', + 'sl_expert_update_support_window': + 'Guaranteed update support window unknown', + 'sl_expert_vulnerability_process': 'Vulnerability process not documented', + 'sl_expert_offline_functionality': + 'Meaningful offline operation not possible', + 'sl_expert_bystander_transparency': + 'Transparency for nearby bystanders missing', + 'sl_expert_child_data_protection': + 'Child-data protection measures missing', + 'sl_expert_access_revocation': + 'Individual access revocation not possible', + 'sl_expert_sensitive_inference_controls': + 'Controls against sensitive inference missing', + // ── Inherent risk hints ────────────────────────────────────────────────── + 'risk_hint_camera': + 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.', + 'risk_hint_mic': + 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.', + 'risk_hint_lock': + 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.', + 'risk_hint_child_room': + "You answered all questions positively. However, baseline risk remains elevated in a child's bedroom because especially sensitive data about children and their daily life can be affected there.", + 'risk_hint_generic': + 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.', + // ── General recommendations ────────────────────────────────────────────── + 'gen_rec_0': + "Set up a separate Wi-Fi network for smart home devices (e.g., your router's guest network).", + 'gen_rec_1': + 'Use a password manager and assign a unique, strong password to each device.', + 'gen_rec_2': + 'Enable multi-factor authentication (MFA) for all vendor accounts.', + 'gen_rec_3': + 'Define who in your household is responsible for updates, backups, and accounts.', + 'gen_rec_4': + 'Regularly review (at least once per quarter) all access permissions and accounts.', + 'gen_rec_5': + 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.', + 'gen_rec_6': + 'Use a household consent check before buying new devices and involve all household members.', }, 'cs': { 'appTitle': 'Simplications', diff --git a/lib/models/device.dart b/lib/models/device.dart index be5688f..6b743df 100644 --- a/lib/models/device.dart +++ b/lib/models/device.dart @@ -1,7 +1,5 @@ import 'package:flutter/material.dart'; -import '../l10n/app_localizations.dart'; - enum RiskLevel { low, medium, high } enum ActionType { social, technical, security } @@ -10,404 +8,6 @@ enum ActionPriority { high, medium, low } enum QuestionAnswer { yes, no, dontKnow, notApplicable } -class DeviceDomainI18n { - static const Map _deToEn = { - 'Wohnzimmer': 'Living room', - 'Küche': 'Kitchen', - 'Schlafzimmer': 'Bedroom', - 'Kinderzimmer': "Child's bedroom", - 'Badezimmer': 'Bathroom', - 'Arbeitszimmer': 'Office', - 'Flur / Eingang': 'Hallway / Entrance', - 'Garten / Außenbereich': 'Garden / Outdoor area', - 'Keller / Speisekammer': 'Basement / Pantry', - 'Ganze Wohnung': 'Entire home', - 'Einfacher Sensor (z. B. Bewegungs- oder Türsensor)': - 'Basic sensor (e.g., motion or door sensor)', - 'Feuchtigkeitssensor': 'Humidity sensor', - 'Temperatursensor': 'Temperature sensor', - 'Lichtsensor': 'Light sensor', - 'Smart Speaker / Sprachassistent': 'Smart speaker / voice assistant', - 'Smart Display (z. B. Nest Hub)': 'Smart display (e.g., Nest Hub)', - 'Smart TV': 'Smart TV', - 'Smarte Innenkamera': 'Smart indoor camera', - 'Smarte Außenkamera': 'Smart outdoor camera', - 'Smarte Türklingel mit Kamera': 'Smart doorbell with camera', - 'Babymonitor / Babykamera': 'Baby monitor / baby camera', - 'Saugroboter': 'Robot vacuum', - 'Smarter Kühlschrank': 'Smart fridge', - 'Smarter Backofen / Herd': 'Smart oven / stove', - 'Smarte Kaffeemaschine': 'Smart coffee machine', - 'Smarte Waschmaschine / Trockner': 'Smart washer / dryer', - 'Smarter Thermostat / Heizungssteuerung': - 'Smart thermostat / heating control', - 'Smarte Steckdose': 'Smart plug', - 'Smarte Beleuchtung': 'Smart lighting', - 'Smartes Türschloss': 'Smart door lock', - 'Smarte Jalousie / Rolllade': 'Smart blind / shutter', - 'Fitness-Tracker / Smartwatch': 'Fitness tracker / smartwatch', - 'Smartes Spielzeug': 'Smart toy', - 'Smart Router / Mesh-System': 'Smart router / mesh system', - 'Smart-Home-Hub (z. B. Homey, Home Assistant)': - 'Smart home hub (e.g., Homey, Home Assistant)', - 'Intelligenter Stromzähler / Smart Meter': - 'Intelligent electricity meter / smart meter', - 'Smarte Bewässerungsanlage': 'Smart irrigation system', - 'Smarte Waage': 'Smart scale', - 'Smarter Drucker': 'Smart printer', - 'Richten Sie ein separates WLAN nur für Smart-Home-Geräte ein (z. B. Gastnetz Ihres Routers).': - 'Set up a separate Wi-Fi network for smart home devices (e.g., your router\'s guest network).', - 'Nutzen Sie einen Passwortmanager und vergeben Sie für jedes Gerät ein einzigartiges, starkes Passwort.': - 'Use a password manager and assign a unique, strong password to each device.', - 'Aktivieren Sie Mehrfaktor-Authentifizierung (MFA) für alle Hersteller-Konten.': - 'Enable multi-factor authentication (MFA) for all vendor accounts.', - 'Legen Sie im Haushalt fest, wer für Updates, Backups und Konten verantwortlich ist.': - 'Define who in your household is responsible for updates, backups, and accounts.', - 'Überprüfen Sie regelmäßig (mind. 1× pro Quartal) alle Zugriffsberechtigungen und Konten.': - 'Regularly review (at least once per quarter) all access permissions and accounts.', - 'Entsorgen Sie alte Geräte datenschutzgerecht: Werksreset durchführen und aus der Hersteller-Cloud austragen.': - 'Dispose of old devices in a privacy-safe way: perform a factory reset and remove them from vendor cloud accounts.', - 'Nutzen Sie ein Konsens-Protokoll, bevor Sie neue Geräte kaufen - beziehen Sie alle Haushaltsmitglieder ein.': - 'Use a household consent check before buying new devices and involve all household members.', - 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?': - 'Have you changed the default password of the device or its linked account?', - 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.': - 'Default passwords are often publicly known and easy to crack.', - 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?': - 'Are automatic security updates enabled for the device?', - 'Updates schließen bekannte Sicherheitslücken zeitnah.': - 'Updates close known security vulnerabilities promptly.', - 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?': - 'Is the device connected to a separate smart home or IoT Wi-Fi network?', - 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.': - 'A dedicated network for smart devices protects your main home network.', - 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?': - 'Are all people in the household informed about this device and its function?', - 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.': - 'All household members should know what data the device captures.', - 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?': - 'Have you disabled unnecessary app permissions (e.g., location, contacts)?', - 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.': - 'Only permissions that are truly needed should be enabled.', - 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?': - 'Do you deactivate the microphone when you are not actively using it?', - 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.': - 'Smart speakers and devices with microphones can be activated unintentionally.', - 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?': - 'Can you reduce the sensor measurement interval (e.g., measure less frequently)?', - 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.': - 'A lower measurement frequency produces less data and limits inferences about your behavior.', - 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?': - 'Are older measurement values deleted automatically or on request?', - 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.': - 'Old historical data should not be stored permanently. Check retention settings.', - 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?': - 'Does the system show sensor data only in aggregated form (e.g., daily instead of minute values)?', - 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.': - 'Less granular views help prevent inferences about precise presence or behavior patterns.', - 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?': - 'Is measurement data processed and stored locally without being transferred to the cloud?', - 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.': - 'Local processing prevents the vendor from accessing your measurement data.', - 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?': - 'Can you delete voice recordings from device history or disable this feature?', - 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.': - 'BSI recommendation: Minimize recording retention or delete recordings regularly.', - 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?': - 'Is voice processing performed partly on the device locally?', - 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.': - 'Local processing reduces the amount of data sent to the cloud.', - 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?': - 'Do you regularly review which skills have access to your account?', - 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.': - 'Third-party skills can access sensitive data. Enable only necessary skills.', - 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?': - 'Is video recording and transmission encrypted end-to-end?', - 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.': - 'BSI recommendation: Encrypted connections prevent interception and data theft in transit.', - 'Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?': - 'Are recordings stored locally (not only in the vendor cloud)?', - 'Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.': - 'Local storage gives you more control over your data; cloud-only storage depends on vendor security.', - 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?': - 'Can you control who can access live view and recordings?', - 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.': - 'You should be able to precisely control access to video recordings.', - 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?': - 'Can you disable or schedule motion detection when you are at home?', - 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.': - 'BSI recommendation: Avoiding unnecessary recordings reduces data volume and misuse risk.', - 'Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?': - 'Can you use the device without a mandatory online account?', - 'Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.': - 'Mandatory accounts enable ad tracking and storage of viewing habits. Account-free use protects privacy.', - 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?': - 'Can you completely disable advertising and tracking features?', - 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.': - 'Smart TVs often collect viewing habit data. Look for privacy settings.', - 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?': - 'Can you use the device via HDMI or local sources without internet?', - 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.': - 'Offline use protects usage data from being sent to the vendor.', - 'Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?': - 'Do temperature history and schedules stay on-device (not sent to the vendor)?', - 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.': - 'History can reveal presence patterns and habits. Local storage reduces unwanted analysis.', - 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?': - 'Can you operate the thermostat offline (without internet)?', - 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.': - 'Offline operation or local automation protects data from cloud access.', - 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?': - 'Can you control who may adjust heating (e.g., restrict guests)?', - 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.': - 'Household members should have control without visitors changing everything.', - 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?': - 'Can automations run locally without internet?', - 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.': - 'Local scenes and schedules protect your privacy better.', - 'Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?': - 'Have you disabled or limited vendor collection of switching patterns and usage times?', - 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.': - 'Usage patterns can reveal presence and habits. Check app privacy settings.', - 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?': - 'Do devices still work if internet or app connection fails?', - 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.': - 'Reliable local operation is important for daily use and privacy.', - 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?': - 'Can you unlock the lock offline (e.g., with code or key)?', - 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.': - 'Backup options prevent lockout during internet or power outages.', - 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?': - 'Can you track who opened the lock and when?', - 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.': - 'An access log helps you detect suspicious activity.', - 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?': - 'Is two-factor authentication (2FA) available for the lock account?', - 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.': - 'BSI recommendation: 2FA protects your account from unauthorized remote access.', - 'Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?': - 'Are created floor plans stored exclusively on the device locally?', - 'Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.': - 'Home floor plans are sensitive information and should not be sent to the vendor.', - 'Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?': - 'Does floor-plan navigation work without cloud connection?', - 'Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.': - 'Devices with local navigation are more privacy-friendly because no room data is uploaded.', - 'Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?': - 'If the robot uses cameras: are camera images used locally only for navigation (no storing or transfer)?', - 'Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.': - 'Camera images should be processed locally for navigation and neither stored nor sent to the vendor.', - 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?': - 'Are there parental control features to manage the toy?', - 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.': - 'Parental controls should allow restricting contacts and features.', - 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?': - 'Can you limit which personal data the toy collects?', - 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.': - 'Child-focused devices should collect and store minimal data.', - 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?': - 'Can you disable audio and video recording on the device?', - 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.': - 'BSI recommendation: Recordings of children should only be possible with explicit control.', - 'Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?': - 'Can you control which third parties can access your health data?', - 'Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.': - 'Health data is sensitive. Only authorized apps should have access.', - 'Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?': - 'Can you disable location tracking when not needed?', - 'GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.': - 'GPS tracking uses battery and can reveal movement patterns.', - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.': - 'You answered all questions positively. However, baseline risk remains higher for cameras because they capture highly sensitive observation data and can be misused for surveillance if misconfigured.', - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.': - 'You answered all questions positively. However, baseline risk remains elevated for microphone devices because voice data is highly sensitive and accidental activation or cloud processing still carries risks.', - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.': - 'You answered all questions positively. However, smart locks still have elevated baseline risk because misuse directly affects physical access to your home.', - 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.': - 'You answered all questions positively. However, baseline risk remains elevated in a child\'s bedroom because especially sensitive data about children and their daily life can be affected there.', - 'Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.': - 'You answered all questions positively. The device can still remain medium/high risk because its type may reveal sensitive usage and behavior data.', - 'Geräteeinstellungen besser kennenlernen': - 'Get to know device settings better', - 'Mindestens eine Frage wurde mit "Weiß ich nicht" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.': - 'At least one question was answered with "I don\'t know". Review your device settings and documentation to reduce risk more effectively.', - 'Grundrisiko des Gerätetyps': 'Baseline risk of device type', - 'Erhöhte Sensibilität: Kinderzimmer': - 'Increased sensitivity: child\'s bedroom', - 'Standard-Passwort nicht geändert': 'Default password not changed', - 'Automatische Updates nicht aktiv': 'Automatic updates not enabled', - 'Kein separates IoT-WLAN eingerichtet': 'No separate IoT Wi-Fi configured', - 'Haushaltsmitglieder nicht informiert': 'Household members not informed', - 'App-Berechtigungen nicht reduziert': 'App permissions not reduced', - 'Kein Einverständnis für Kamerabereich': - 'No consent for camera-covered area', - 'Mikrofon nicht bei Nichtnutzung deaktiviert': - 'Microphone not disabled when unused', - 'Pflichtdkonto beim Hersteller nötig': 'Mandatory vendor account required', - 'Daten in die Cloud übertragen': 'Data transferred to cloud', - 'Elternkontrolle nicht eingerichtet': 'Parental controls not configured', - 'Datenmenge nicht eingeschränkt': 'Data collection not limited', - 'Aufnahmen nicht deaktivierbar': 'Recording cannot be disabled', - 'Gesundheitsdaten mit Dritten geteilt': - 'Health data shared with third parties', - 'Standortverfolgung aktiv': 'Location tracking enabled', - 'Standard-Passwort ändern': 'Change default password', - 'Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.': - 'Replace the default password with a strong, unique password. Use a password manager.', - 'Automatische Updates aktivieren': 'Enable automatic updates', - 'Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.': - 'Enable automatic security updates in device or app settings.', - 'Separates IoT-WLAN einrichten': 'Set up separate IoT Wi-Fi', - 'Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.': - 'Set up a dedicated Wi-Fi network for smart home devices, for example with your router\'s guest network.', - 'Haushaltsmitglieder informieren': 'Inform household members', - 'Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.': - 'Inform all residents about what data the device collects, who has access, and how it can be disabled.', - 'App-Berechtigungen einschränken': 'Restrict app permissions', - 'Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.': - 'Check companion-app permissions in phone settings and disable unnecessary ones.', - 'Kameraausrichtung mit Bewohnern abstimmen': - 'Align camera positioning with residents', - 'Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.': - 'Obtain consent from everyone affected. The camera must not record areas without consent.', - 'Mikrofon bei Nichtnutzung deaktivieren': - 'Disable microphone when not in use', - 'Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.': - 'Use the physical mute switch or disable the microphone in settings.', - 'Messintervall reduzieren': 'Reduce measurement interval', - 'Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.': - 'If possible, reduce sensor measurement frequency. Less frequent measurements produce fewer behavior data points.', - 'Alte Messwerte löschen': 'Delete old measurement values', - 'Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.': - 'Review retention periods in app or web UI and enable auto deletion, or delete older data manually on a regular basis.', - 'Daten weniger detailliert anzeigen': 'Show less detailed data', - 'Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.': - 'If possible, switch to less granular display or evaluation, for example daily values instead of minute values.', - 'Lokale Verarbeitung bevorzugen': 'Prefer local processing', - 'Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.': - 'Check whether cloud sync can be disabled or local storage enabled so measurement data is not sent to the vendor.', - 'Skills/Fähigkeiten überprüfen': 'Review skills/integrations', - 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.': - 'Review which third-party skills have access. Disable unnecessary skills.', - 'WLAN-Verschlüsselung prüfen': 'Check Wi-Fi encryption', - 'BSI-Empfehlung: Verwenden Sie WPA2 oder WPA3 für Ihr Heimnetz. WEP und WPA sind veraltet.': - 'BSI recommendation: Use WPA2 or WPA3 on your home network. WEP and WPA are outdated.', - 'Zugriffsrechte der Kamera überprüfen': 'Review camera access rights', - 'Überprüfen Sie monatlich in der App, wer auf Live-View und Aufnahmen zugreifen kann.': - 'Check monthly in the app who can access live view and recordings.', - 'Zwei-Faktor-Authentifizierung aktivieren': - 'Enable two-factor authentication', - 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.': - 'BSI recommendation: Enable 2FA for your lock account to protect remote access.', - 'Grundriss-Speicherung klären': 'Clarify floor-plan storage', - 'Überprüfen Sie: Werden Grundrisse lokal oder in der Cloud gespeichert? Bevorzugen Sie lokal.': - 'Check whether floor plans are stored locally or in cloud storage. Prefer local storage.', - 'Haushalt nicht über Sensor informiert': - 'Household not informed about sensor', - 'Sensor nicht im IoT-Netz eingebunden': - 'Sensor not connected to IoT network', - 'Messintervall nicht reduziert': 'Measurement interval not reduced', - 'Alte Messwerte nicht gelöscht': 'Old measurement values not deleted', - 'Daten zu fein granular gespeichert': - 'Data stored with too much granularity', - 'Sprachaufnahmen nicht löschbar': 'Voice recordings not deletable', - 'Keine lokale Sprachverarbeitung': 'No local voice processing', - 'Skills nicht regelmäßig geprüft': 'Skills not reviewed regularly', - 'Videoübertragung nicht verschlüsselt': 'Video transmission not encrypted', - 'Aufnahmen nur in Anbieter-Cloud': 'Recordings only in vendor cloud', - 'Zugriff auf Aufnahmen nicht kontrolliert': - 'Recording access not controlled', - 'Bewegungserkennung immer aktiv': 'Motion detection always active', - 'Werbe-Tracking nicht deaktiviert': 'Ad tracking not disabled', - 'Kein Offline-Betrieb möglich': 'No offline operation possible', - 'Temperaturverlauf an Hersteller übertragen': - 'Temperature history sent to vendor', - 'Zugriff nicht einschränkbar': 'Access cannot be restricted', - 'Automatisierungen nur mit Internet': - 'Automations require internet connection', - 'Schaltmuster vom Hersteller erfasst': - 'Switching patterns collected by vendor', - 'Gerät offline nicht nutzbar': 'Device unusable offline', - 'Kein Offline-Öffnen möglich': 'No offline unlock possible', - 'Kein Zugriffsprotokoll verfügbar': 'No access log available', - '2-Faktor-Authentifizierung fehlt': 'Two-factor authentication missing', - 'Grundriss an Hersteller übertragen': 'Floor plan transmitted to vendor', - 'Navigation nur mit Cloud möglich': 'Navigation only possible via cloud', - 'Kamerabilder gespeichert oder übertragen': - 'Camera images stored or transmitted', - 'Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?': - 'Is the retention duration for your personal data explicitly defined and limited to what is necessary?', - 'Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.': - 'Inspired by the CMU IoT Security & Privacy Label and Unboxing.IoT.Privacy: short, clear retention periods reduce risk.', - 'Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?': - 'Can you control access rights granularly (roles, separate accounts, no shared default logins)?', - 'Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.': - 'Granular access control reduces the risk of unauthorized access and misuse.', - 'Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?': - 'Is third-party sharing disabled or clearly limited to necessary services?', - 'Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.': - 'Check privacy and account settings to see whether data is sent to advertising, analytics, or partner services.', - 'Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?': - 'Is the sale of your data excluded (or actively disabled, where possible)?', - 'Eine ausdrückliche "kein Datenverkauf"-Option ist ein starkes Datenschutzsignal.': - 'An explicit "no data sale" option is a strong privacy signal.', - 'Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?': - 'Is it known how long the vendor guarantees security updates?', - 'Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.': - 'A transparent update commitment reduces long-term security and privacy risks.', - 'Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?': - 'Is there a documented process for reporting and fixing vulnerabilities?', - 'Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.': - 'Prefer vendors that provide responsible disclosure policies or clear security contact information.', - 'Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?': - 'Does the device remain meaningfully usable with limited internet connectivity?', - 'Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.': - 'More offline functionality often means less continuous data transfer to the cloud.', - 'Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?': - 'Are people nearby transparently informed (for example via visibility, notices, clear recording indicators)?', - 'Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.': - 'This addresses bystander privacy and is highlighted in Unboxing.IoT.Privacy as a key challenge.', - 'Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?': - 'Are child-data protections active (minimization, no profiling, restrictive sharing)?', - 'Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.': - 'Devices in child-related contexts require especially strict privacy safeguards.', - 'Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?': - 'Can digital keys/access rights be revoked quickly and individually?', - 'Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.': - 'Fast revocation is crucial when devices are shared or users change.', - 'Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?': - 'Are features that infer sensitive health or behavior profiles restricted or disableable?', - 'Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.': - 'Inference controls reduce risks from secondary use of sensitive data.', - 'Aufbewahrungsdauer unklar/zu lang': - 'Retention duration unclear or too long', - 'Granulare Zugriffskontrolle fehlt': 'Granular access control missing', - 'Weitergabe an Dritte nicht begrenzt': 'Third-party sharing not limited', - 'Datenverkauf nicht ausgeschlossen': 'Data sale not excluded', - 'Garantierter Update-Zeitraum unbekannt': - 'Guaranteed update support window unknown', - 'Schwachstellenprozess nicht dokumentiert': - 'Vulnerability process not documented', - 'Sinnvoller Betrieb ohne Internet nicht möglich': - 'Meaningful offline operation not possible', - 'Transparenz für Betroffene im Umfeld fehlt': - 'Transparency for nearby bystanders missing', - 'Schutzmaßnahmen für Kinderdaten fehlen': - 'Child-data protection measures missing', - 'Einzelner Zugriffswiderruf nicht möglich': - 'Individual access revocation not possible', - 'Kontrollen gegen sensible Inferenz fehlen': - 'Controls against sensitive inference missing', - }; - - static String localize(String source) { - if (AppLocalizations.activeLanguageCode == 'de') { - return source; - } - return _deToEn[source] ?? source; - } -} - extension QuestionAnswerCodec on QuestionAnswer { String get wireValue { switch (this) { @@ -565,80 +165,57 @@ class DeviceInstance { // ── Base question definitions (referenced selectively per device type) ───── const qPassword = DeviceQuestion( id: 'password', - text: - 'Haben Sie das Standard-Passwort des Geräts oder des zugehörigen Kontos geändert?', - hint: - 'Voreingestellte Passwörter sind oft öffentlich bekannt und leicht zu knacken.', + text: 'q_password_text', + hint: 'q_password_hint', ); const qUpdates = DeviceQuestion( id: 'updates', - text: 'Sind automatische Sicherheits-Updates für das Gerät aktiviert?', - hint: 'Updates schließen bekannte Sicherheitslücken zeitnah.', + text: 'q_updates_text', + hint: 'q_updates_hint', ); const qNetwork = DeviceQuestion( id: 'network', - text: - 'Ist das Gerät in einem separaten Smart-Home- oder IoT-WLAN eingebunden?', - hint: - 'Ein eigenes Netz für smarte Geräte schützt Ihr restliches Heimnetzwerk.', + text: 'q_network_text', + hint: 'q_network_hint', ); const qInformed = DeviceQuestion( id: 'informed', - text: - 'Sind alle Personen im Haushalt über dieses Gerät und seine Funktion informiert?', - hint: - 'Alle Mitbewohnenden sollten wissen, welche Daten das Gerät erfasst.', + text: 'q_informed_text', + hint: 'q_informed_hint', ); const qPermissions = DeviceQuestion( id: 'permissions', - text: - 'Haben Sie unnötige App-Berechtigungen (z. B. Standort, Kontakte) deaktiviert?', - hint: 'Nur wirklich benötigte Berechtigungen sollten aktiviert sein.', + text: 'q_permissions_text', + hint: 'q_permissions_hint', ); const qMicActive = DeviceQuestion( id: 'mic_active', - text: 'Deaktivieren Sie das Mikrofon, wenn Sie es nicht aktiv nutzen?', - hint: - 'Smarte Lautsprecher und Geräte mit Mikrofonen können versehentlich aktiviert werden.', + text: 'q_mic_active_text', + hint: 'q_mic_active_hint', ); - // Unused base questions kept for reference (re-enable per device type as needed): - // const qCameraConsent = DeviceQuestion( - // id: 'camera_consent', - // text: 'Filmt die Kamera nur Bereiche, für die alle Betroffenen ihr Einverständnis gegeben haben?', - // hint: 'Kameras in Gemeinschafts- oder Privatbereichen bedürfen der Zustimmung aller Bewohner.', - // ); // ── Sensor: tailored set – no app/password/update concept ───────────────── if (template.deviceType == 'sensor') { return const [ - // DeviceQuestion(id: 'sensor_informed', ...) // removed – generic, ≈ qInformed - // DeviceQuestion(id: 'sensor_network', ...) // removed – generic, ≈ qNetwork DeviceQuestion( id: 'sensor_frequency', - text: - 'Können Sie das Messintervall des Sensors reduzieren (z. B. seltener messen)?', - hint: - 'Eine niedrigere Messfrequenz erzeugt weniger Daten und schränkt Rückschlüsse auf Ihr Verhalten ein.', + text: 'q_sensor_frequency_text', + hint: 'q_sensor_frequency_hint', ), DeviceQuestion( id: 'sensor_data_deletion', - text: 'Werden ältere Messwerte automatisch oder auf Wunsch gelöscht?', - hint: - 'Alte Verlaufsdaten sollten nicht dauerhaft gespeichert bleiben. Prüfen Sie die Aufbewahrungszeit in den Einstellungen.', + text: 'q_sensor_data_deletion_text', + hint: 'q_sensor_data_deletion_hint', ), DeviceQuestion( id: 'sensor_granularity', - text: - 'Zeigt das System die Sensordaten nur in zusammengefasster Form an (z. B. Tages- statt Minutenwerte)?', - hint: - 'Weniger granulare Anzeigen schützen vor Rückschlüssen auf genaue Anwesenheits- oder Verhaltensmuster.', + text: 'q_sensor_granularity_text', + hint: 'q_sensor_granularity_hint', ), DeviceQuestion( id: 'sensor_local', - text: - 'Werden die Messdaten lokal verarbeitet und gespeichert, ohne in eine Cloud übertragen zu werden?', - hint: - 'Lokale Verarbeitung verhindert, dass der Hersteller Einblick in Ihre Messwerte erhält.', + text: 'q_sensor_local_text', + hint: 'q_sensor_local_hint', ), ]; } @@ -646,31 +223,20 @@ class DeviceInstance { // ── Speaker ─────────────────────────────────────────────────────────────── if (template.deviceType == 'speaker') { return [ - // qPassword, // removed – generic - // qUpdates, // removed – generic - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'voice_history', - text: - 'Können Sie Sprachaufnahmen aus der Geräte-Historie löschen oder diese Funktion deaktivieren?', - hint: - 'BSI-Empfehlung: Minimieren Sie die Speicherung von Aufnahmen oder löschen Sie sie regelmäßig.', + text: 'q_voice_history_text', + hint: 'q_voice_history_hint', ), const DeviceQuestion( id: 'voice_local', - text: - 'Wird die Sprachverarbeitung teilweise lokal auf dem Gerät durchgeführt?', - hint: - 'Lokale Verarbeitung reduziert die Menge an Daten, die in die Cloud übertragen werden.', + text: 'q_voice_local_text', + hint: 'q_voice_local_hint', ), const DeviceQuestion( id: 'skills_permissions', - text: - 'Überprüfen Sie regelmäßig, welche Fähigkeiten/Skills Zugriff auf Ihr Konto haben?', - hint: - 'Skills von Drittanbietern können sensible Daten abfangen. Nur notwendige Skills aktivieren.', + text: 'q_skills_permissions_text', + hint: 'q_skills_permissions_hint', ), qMicActive, ]; @@ -679,39 +245,25 @@ class DeviceInstance { // ── Camera ──────────────────────────────────────────────────────────────── if (template.deviceType == 'camera') { return const [ - // qPassword, // removed – generic - // qUpdates, // removed – generic - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic - // qCameraConsent, // removed – generic hasCamera flag DeviceQuestion( id: 'video_encryption', - text: - 'Ist die Videoaufnahme und -übertragung durchgängig verschlüsselt?', - hint: - 'BSI-Empfehlung: Verschlüsselte Verbindung verhindert Abhören und Datenklau unterwegs.', + text: 'q_video_encryption_text', + hint: 'q_video_encryption_hint', ), DeviceQuestion( id: 'video_storage', - text: - 'Werden Aufnahmen lokal gespeichert (nicht ausschließlich in der Cloud des Anbieters)?', - hint: - 'Lokale Speicherung gibt Ihnen mehr Kontrolle über Ihre Daten; bei reiner Cloud-Speicherung sind Sie auf die Sicherheit des Anbieters angewiesen.', + text: 'q_video_storage_text', + hint: 'q_video_storage_hint', ), DeviceQuestion( id: 'sharing_restrictions', - text: - 'Können Sie steuern, wer auf die Live-View und Aufnahmen zugreifen kann?', - hint: - 'Sie sollten genau kontrollieren können, wer Zugang zu den Videoaufnahmen erhält.', + text: 'q_sharing_restrictions_text', + hint: 'q_sharing_restrictions_hint', ), DeviceQuestion( id: 'motion_detection', - text: - 'Können Sie Bewegungserkennung deaktivieren oder zeitlich begrenzen, wenn Sie zu Hause sind?', - hint: - 'BSI-Empfehlung: Unnötige Aufnahmen vermeiden reduziert Datenmenge und Missbrauchsrisiko.', + text: 'q_motion_detection_text', + hint: 'q_motion_detection_hint', ), ]; } @@ -719,31 +271,21 @@ class DeviceInstance { // ── Smart TV ────────────────────────────────────────────────────────────── if (template.deviceType == 'tv') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'account_required', - text: - 'Können Sie das Gerät ohne obligatorisches Online-Konto nutzen?', - hint: - 'Pflichtkonten ermöglichen dem Hersteller Werbe-Tracking und das Speichern Ihrer Sehgewohnheiten. Ein kontoloser Betrieb schützt Ihre Privatsphäre.', + text: 'q_account_required_text', + hint: 'q_account_required_hint', ), const DeviceQuestion( id: 'tracking_disabled', - text: - 'Können Sie Werbe- und Tracking-Funktionen vollständig deaktivieren?', - hint: - 'Smart-TVs sammeln oft Daten über Ihre Sehgewohnheiten. Suchen Sie nach Datenschutzoptionen.', + text: 'q_tracking_disabled_text', + hint: 'q_tracking_disabled_hint', ), const DeviceQuestion( id: 'local_mode', - text: - 'Können Sie das Gerät über HDMI oder lokale Quellen ohne Internetverbindung nutzen?', - hint: - 'Offline-Betrieb schützt Ihre Nutzungsdaten vor Übertragung an den Hersteller.', + text: 'q_local_mode_text', + hint: 'q_local_mode_hint', ), ]; } @@ -751,31 +293,21 @@ class DeviceInstance { // ── Thermostat ──────────────────────────────────────────────────────────── if (template.deviceType == 'thermostat') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'data_collection', - text: - 'Bleiben Ihre Temperatur-Historien und Zeitpläne auf dem Gerät (keine Übertragung an den Hersteller)?', - hint: - 'Historien können Anwesenheitsmuster und Lebensgewohnheiten offenbaren. Lokale Speicherung schützt vor unerwünschter Auswertung.', + text: 'q_data_collection_text', + hint: 'q_data_collection_hint', ), const DeviceQuestion( id: 'offline_control', - text: - 'Können Sie das Thermostat auch offline betreiben (ohne Internet)?', - hint: - 'Offline-Betrieb oder lokale Automatisierung schützt Ihre Daten vor Cloud-Zugriff.', + text: 'q_offline_control_text', + hint: 'q_offline_control_hint', ), const DeviceQuestion( id: 'family_access', - text: - 'Können Sie steuern, wer die Heizung anpassen darf (z. B. nur Gäste einschränken)?', - hint: - 'Haushaltsmitglieder sollten Kontrolle haben, ohne dass Besucher alles ändern können.', + text: 'q_family_access_text', + hint: 'q_family_access_hint', ), ]; } @@ -785,31 +317,21 @@ class DeviceInstance { template.deviceType == 'plug' || template.deviceType == 'blind') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'local_control', - text: - 'Können Automatisierungen lokal ohne Internetverbindung erfolgen?', - hint: - 'Lokale Ausführung von Szenen und Zeitplänen schützt Ihre Privatsphäre besser.', + text: 'q_local_control_text', + hint: 'q_local_control_hint', ), const DeviceQuestion( id: 'usage_tracking', - text: - 'Haben Sie die Erfassung von Schaltmustern und Nutzungszeiten durch den Hersteller deaktiviert oder eingeschränkt?', - hint: - 'Nutzungsmuster können Ihre Anwesenheit und Gewohnheiten offenbaren. Prüfen Sie die Datenschutzeinstellungen der App.', + text: 'q_usage_tracking_text', + hint: 'q_usage_tracking_hint', ), const DeviceQuestion( id: 'offline_fallback', - text: - 'Funktionieren die Geräte noch, wenn die Internet- oder App-Verbindung ausfällt?', - hint: - 'Zuverlässige lokale Funktion ist wichtig für alltägliche Nutzung und Privatsphäre.', + text: 'q_offline_fallback_text', + hint: 'q_offline_fallback_hint', ), ]; } @@ -818,29 +340,20 @@ class DeviceInstance { if (template.deviceType == 'lock') { return [ qPassword, - // qUpdates, // removed – generic - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'offline_unlock', - text: - 'Können Sie das Schloss auch offline (z. B. mit Code oder Schlüssel) öffnen?', - hint: - 'Backup-Optionen verhindern Aussperrung bei Internet- oder Stromausfällen.', + text: 'q_offline_unlock_text', + hint: 'q_offline_unlock_hint', ), const DeviceQuestion( id: 'access_logging', - text: 'Können Sie nachvollziehen, wer wann das Schloss geöffnet hat?', - hint: - 'Ein Zugriffsverlauf ermöglicht Ihnen, verdächtige Aktivitäten zu erkennen.', + text: 'q_access_logging_text', + hint: 'q_access_logging_hint', ), const DeviceQuestion( id: 'two_factor', - text: - 'Ist Zwei-Faktor-Authentifizierung (2FA) für das Sperr-Konto verfügbar?', - hint: - 'BSI-Empfehlung: 2FA schützt Ihr Konto vor unbefugtem Fernzugriff auf das Schloss.', + text: 'q_two_factor_text', + hint: 'q_two_factor_hint', ), ]; } @@ -848,31 +361,21 @@ class DeviceInstance { // ── Robot Vacuum ────────────────────────────────────────────────────────── if (template.deviceType == 'robot') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'map_privacy', - text: - 'Werden die erstellten Grundrisse ausschließlich lokal auf dem Gerät gespeichert?', - hint: - 'Grundrisse Ihres Hauses sind sensible Informationen und sollten nicht an den Hersteller übermittelt werden.', + text: 'q_map_privacy_text', + hint: 'q_map_privacy_hint', ), const DeviceQuestion( id: 'cloud_required', - text: - 'Funktioniert die Grundriss-Navigation auch ohne Cloud-Verbindung?', - hint: - 'Geräte mit lokaler Navigation sind datenschutzfreundlicher, da keine Raumdaten in die Cloud übertragen werden.', + text: 'q_cloud_required_text', + hint: 'q_cloud_required_hint', ), const DeviceQuestion( id: 'vision_data', - text: - 'Wenn der Roboter Kameras nutzt: Werden die Kamerabilder ausschließlich lokal für die Navigation verwendet (kein Speichern oder Übertragen)?', - hint: - 'Kamerabilder sollten nur lokal für die Navigation verarbeitet und weder gespeichert noch an den Hersteller gesendet werden.', + text: 'q_vision_data_text', + hint: 'q_vision_data_hint', ), ]; } @@ -880,31 +383,21 @@ class DeviceInstance { // ── Connected Toy ───────────────────────────────────────────────────────── if (template.deviceType == 'toy') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic - // qPermissions, // removed – generic const DeviceQuestion( id: 'parental_control', - text: - 'Gibt es Elternkontroll-Funktionen zur Verwaltung des Spielzeugs?', - hint: - 'Elternkontrolle sollte ermöglichen, Kontakte und Funktionen zu beschränken.', + text: 'q_parental_control_text', + hint: 'q_parental_control_hint', ), const DeviceQuestion( id: 'child_data_limits', - text: - 'Können Sie einschränken, welche persönlichen Daten das Spielzeug sammelt?', - hint: - 'Kinder-spezifische Geräte sollten minimale Datenmenge erfassen und speichern.', + text: 'q_child_data_limits_text', + hint: 'q_child_data_limits_hint', ), const DeviceQuestion( id: 'recording_disable', - text: - 'Können Sie Audio- und Videoaufnahmen auf dem Gerät deaktivieren?', - hint: - 'BSI-Empfehlung: Aufnahmen von Kindern sollten nur mit expliziter Kontrolle möglich sein.', + text: 'q_recording_disable_text', + hint: 'q_recording_disable_hint', ), ]; } @@ -912,88 +405,60 @@ class DeviceInstance { // ── Wearable / Fitness Tracker ──────────────────────────────────────────── if (template.deviceType == 'wearable') { return [ - // qPassword, // removed – generic qUpdates, - // qNetwork, // removed – generic - // qInformed, // removed – generic qPermissions, const DeviceQuestion( id: 'health_sharing', - text: - 'Können Sie steuern, welche Drittanbieter Zugriff auf Ihre Gesundheitsdaten haben?', - hint: - 'Gesundheitsdaten sind sensibel. Nur autorisierte Apps sollten Zugriff erhalten.', + text: 'q_health_sharing_text', + hint: 'q_health_sharing_hint', ), const DeviceQuestion( id: 'location_tracking', - text: - 'Können Sie Standortverfolgung deaktivieren, wenn Sie sie nicht benötigen?', - hint: - 'GPS-Tracking verbraucht Akku und kann Ihre Bewegungsmuster offenbaren.', + text: 'q_location_tracking_text', + hint: 'q_location_tracking_hint', ), ]; } // ── Default / custom device ─────────────────────────────────────────────── - // Keep the 4 most universally important base questions. - return [ - qPassword, - qUpdates, - qNetwork, - qInformed, - // qPermissions, // removed – only applicable when device has a companion app - ]; + return [qPassword, qUpdates, qNetwork, qInformed]; } static const List _expertCommonQuestions = [ DeviceQuestion( id: 'expert_data_retention_duration', - text: - 'Ist die Aufbewahrungsdauer Ihrer personenbezogenen Daten konkret festgelegt und auf das Notwendige begrenzt?', - hint: - 'Inspiriert durch CMU IoT Security & Privacy Label und Unboxing.IoT.Privacy: kurze, klare Speicherfristen reduzieren Risiken.', + text: 'q_expert_data_retention_duration_text', + hint: 'q_expert_data_retention_duration_hint', ), DeviceQuestion( id: 'expert_access_control_granular', - text: - 'Können Sie Zugriffsrechte granular steuern (Rollen, getrennte Konten, keine geteilten Standard-Logins)?', - hint: - 'Granulare Zugriffskontrolle senkt das Risiko unbefugter Einsicht und Fehlbedienung.', + text: 'q_expert_access_control_granular_text', + hint: 'q_expert_access_control_granular_hint', ), DeviceQuestion( id: 'expert_third_party_sharing_limited', - text: - 'Ist die Weitergabe an Dritte deaktiviert oder klar auf notwendige Dienste begrenzt?', - hint: - 'Prüfen Sie in Datenschutz- und Kontoeinstellungen, ob Daten an Werbe-, Analyse- oder Partnerdienste fließen.', + text: 'q_expert_third_party_sharing_limited_text', + hint: 'q_expert_third_party_sharing_limited_hint', ), DeviceQuestion( id: 'expert_data_sale_disabled', - text: - 'Ist der Verkauf Ihrer Daten ausgeschlossen (oder aktiv deaktiviert, falls möglich)?', - hint: - 'Eine ausdrückliche "kein Datenverkauf"-Option ist ein starkes Datenschutzsignal.', + text: 'q_expert_data_sale_disabled_text', + hint: 'q_expert_data_sale_disabled_hint', ), DeviceQuestion( id: 'expert_update_support_window', - text: - 'Ist bekannt, wie lange der Hersteller Sicherheitsupdates garantiert?', - hint: - 'Eine transparente Update-Zusage reduziert langfristige Sicherheits- und Privatsphärerisiken.', + text: 'q_expert_update_support_window_text', + hint: 'q_expert_update_support_window_hint', ), DeviceQuestion( id: 'expert_vulnerability_process', - text: - 'Gibt es einen dokumentierten Prozess zur Meldung und Behebung von Sicherheitslücken?', - hint: - 'Bevorzugen Sie Hersteller mit Responsible-Disclosure- oder Security-Contact-Informationen.', + text: 'q_expert_vulnerability_process_text', + hint: 'q_expert_vulnerability_process_hint', ), DeviceQuestion( id: 'expert_offline_functionality', - text: - 'Bleibt das Gerät auch mit eingeschränkter Internetverbindung sinnvoll nutzbar?', - hint: - 'Mehr Offline-Funktionalität bedeutet oft weniger laufende Datenübertragung in die Cloud.', + text: 'q_expert_offline_functionality_text', + hint: 'q_expert_offline_functionality_hint', ), ]; @@ -1003,10 +468,8 @@ class DeviceInstance { questions.add( const DeviceQuestion( id: 'expert_bystander_transparency', - text: - 'Werden Betroffene im Umfeld transparent informiert (z. B. Sichtbarkeit, Hinweise, klare Aufnahmeanzeige)?', - hint: - 'Das adressiert Bystander-Privacy und wurde in Unboxing.IoT.Privacy als zentrale Herausforderung hervorgehoben.', + text: 'q_expert_bystander_transparency_text', + hint: 'q_expert_bystander_transparency_hint', ), ); } @@ -1014,10 +477,8 @@ class DeviceInstance { questions.add( const DeviceQuestion( id: 'expert_child_data_protection', - text: - 'Sind Schutzmaßnahmen für Kinderdaten aktiv (Minimierung, keine Profilbildung, restriktive Freigaben)?', - hint: - 'Geräte in kinderbezogenen Kontexten brauchen besonders strenge Datenschutzvorgaben.', + text: 'q_expert_child_data_protection_text', + hint: 'q_expert_child_data_protection_hint', ), ); } @@ -1025,10 +486,8 @@ class DeviceInstance { questions.add( const DeviceQuestion( id: 'expert_access_revocation', - text: - 'Können digitale Schlüssel/Zugriffe schnell und einzeln widerrufen werden?', - hint: - 'Schneller Widerruf ist zentral, wenn Geräte geteilt oder Nutzer gewechselt werden.', + text: 'q_expert_access_revocation_text', + hint: 'q_expert_access_revocation_hint', ), ); } @@ -1036,10 +495,8 @@ class DeviceInstance { questions.add( const DeviceQuestion( id: 'expert_sensitive_inference_controls', - text: - 'Sind Funktionen zur Ableitung sensibler Gesundheits-/Verhaltensprofile eingeschränkt oder deaktivierbar?', - hint: - 'Inferenzkontrolle reduziert Risiken durch sekundäre Nutzung sensibler Daten.', + text: 'q_expert_sensitive_inference_controls_text', + hint: 'q_expert_sensitive_inference_controls_hint', ), ); } @@ -1183,364 +640,315 @@ class DeviceInstance { } if (template.deviceType == 'camera' || template.hasCamera) { - return 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Kameras höher, weil sie besonders sensible Beobachtungsdaten erfassen und bei Fehlkonfiguration zur Überwachung genutzt werden können.'; + return 'risk_hint_camera'; } if (template.deviceType == 'speaker' || template.hasMicrophone) { - return 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt das Grundrisiko bei Geräten mit Mikrofon erhöht, da Sprachdaten sehr sensibel sind und Fehlaktivierungen bzw. Cloud-Verarbeitung weiterhin Risiken bergen.'; + return 'risk_hint_mic'; } if (template.deviceType == 'lock') { - return 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt bei smarten Schlössern ein erhöhtes Grundrisiko, da ein möglicher Missbrauch direkt den physischen Zugang zur Wohnung betrifft.'; + return 'risk_hint_lock'; } if (roomId == _childBedroomRoomId) { - return 'Sie haben alle Fragen positiv beantwortet. Dennoch bleibt im Kinderzimmer ein erhöhtes Grundrisiko, da dort häufig besonders sensible Daten zu Kindern und ihrem Alltag betroffen sind.'; + return 'risk_hint_child_room'; } - return 'Sie haben alle Fragen positiv beantwortet. Das Gerät bleibt trotzdem im mittleren/hohen Bereich, weil bereits die Art des Geräts sensible Nutzungs- und Verhaltensdaten offenlegen kann.'; + return 'risk_hint_generic'; } List get suggestedActions { final actions = []; const noAnswerActions = { 'password': PrivacyAction( - title: 'Standard-Passwort ändern', - description: - 'Ersetzen Sie das voreingestellte Passwort durch ein starkes, einzigartiges Passwort. Nutzen Sie einen Passwortmanager.', + title: 'a_password_title', + description: 'a_password_desc', type: ActionType.security, priority: ActionPriority.high, ), 'updates': PrivacyAction( - title: 'Automatische Updates aktivieren', - description: - 'Aktivieren Sie automatische Sicherheits-Updates in den Geräte- oder App-Einstellungen.', + title: 'a_updates_title', + description: 'a_updates_desc', type: ActionType.security, priority: ActionPriority.high, ), 'network': PrivacyAction( - title: 'Separates IoT-WLAN einrichten', - description: - 'Richten Sie ein eigenes WLAN für Smart-Home-Geräte ein, z. B. über die Gastnetz-Funktion Ihres Routers.', + title: 'a_network_title', + description: 'a_network_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'informed': PrivacyAction( - title: 'Haushaltsmitglieder informieren', - description: - 'Informieren Sie alle Bewohner: welche Daten das Gerät erfasst, wer Zugriff hat und wie es sich deaktivieren lässt.', + title: 'a_informed_title', + description: 'a_informed_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'permissions': PrivacyAction( - title: 'App-Berechtigungen einschränken', - description: - 'Prüfen Sie in den Smartphone-Einstellungen die Berechtigungen der zugehörigen App und deaktivieren Sie nicht benötigte.', + title: 'a_permissions_title', + description: 'a_permissions_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'camera_consent': PrivacyAction( - title: 'Kameraausrichtung mit Bewohnern abstimmen', - description: - 'Holen Sie das Einverständnis aller Betroffenen ein. Die Kamera darf keine Bereiche ohne Zustimmung erfassen.', + title: 'a_camera_consent_title', + description: 'a_camera_consent_desc', type: ActionType.social, priority: ActionPriority.high, ), 'mic_active': PrivacyAction( - title: 'Mikrofon bei Nichtnutzung deaktivieren', - description: - 'Nutzen Sie den physischen Stummschalter oder deaktivieren Sie das Mikrofon in den Einstellungen.', + title: 'a_mic_active_title', + description: 'a_mic_active_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'sensor_frequency': PrivacyAction( - title: 'Messintervall reduzieren', - description: - 'Verringern Sie, wenn möglich, die Messfrequenz des Sensors. Weniger häufige Messungen erzeugen weniger Verhaltensdaten.', + title: 'a_sensor_frequency_title', + description: 'a_sensor_frequency_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'sensor_data_deletion': PrivacyAction( - title: 'Alte Messwerte löschen', - description: - 'Prüfen Sie Aufbewahrungsfristen in App oder Weboberfläche und aktivieren Sie automatische Löschung oder löschen Sie ältere Daten regelmäßig manuell.', + title: 'a_sensor_data_deletion_title', + description: 'a_sensor_data_deletion_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'sensor_granularity': PrivacyAction( - title: 'Daten weniger detailliert anzeigen', - description: - 'Stellen Sie, wenn möglich, eine gröbere Anzeige oder Auswertung ein, zum Beispiel Tageswerte statt Minutenwerte.', + title: 'a_sensor_granularity_title', + description: 'a_sensor_granularity_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'sensor_local': PrivacyAction( - title: 'Lokale Verarbeitung bevorzugen', - description: - 'Prüfen Sie, ob sich Cloud-Synchronisation deaktivieren oder eine lokale Speicherung aktivieren lässt, damit Messdaten nicht an den Hersteller übertragen werden.', + title: 'a_sensor_local_title', + description: 'a_sensor_local_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'voice_history': PrivacyAction( - title: 'Sprachaufzeichnungen löschen', - description: - 'BSI-Empfehlung: Löschen Sie regelmäßig (monatlich) Ihre Sprachaufzeichnungen im Hersteller-Konto.', + title: 'a_voice_history_title', + description: 'a_voice_history_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'voice_local': PrivacyAction( - title: 'Lokale Sprachverarbeitung aktivieren', - description: - 'Aktivieren Sie lokale Sprachverarbeitung, falls verfügbar. Falls nicht verfügbar, minimieren Sie Cloud-Speicherung von Sprachdaten.', + title: 'a_voice_local_title', + description: 'a_voice_local_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'skills_permissions': PrivacyAction( - title: 'Skills/Fähigkeiten überprüfen', - description: - 'Überprüfen Sie, welche Drittanbieter-Skills Zugriff haben. Deaktivieren Sie unnötige Skills.', + title: 'a_skills_permissions_title', + description: 'a_skills_permissions_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'video_encryption': PrivacyAction( - title: 'WLAN-Verschlüsselung prüfen', - description: - 'BSI-Empfehlung: Verwenden Sie WPA2 oder WPA3 für Ihr Heimnetz. WEP und WPA sind veraltet.', + title: 'a_video_encryption_title', + description: 'a_video_encryption_desc', type: ActionType.security, priority: ActionPriority.high, ), 'video_storage': PrivacyAction( - title: 'Aufnahmen lokal speichern', - description: - 'Stellen Sie, wenn möglich, lokale Speicherung ein. Falls nur Cloud-Speicherung möglich ist, reduzieren Sie die Aufbewahrungsdauer und löschen Sie Aufnahmen regelmäßig.', + title: 'a_video_storage_title', + description: 'a_video_storage_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'sharing_restrictions': PrivacyAction( - title: 'Zugriffsrechte der Kamera überprüfen', - description: - 'Überprüfen Sie monatlich in der App, wer auf Live-View und Aufnahmen zugreifen kann.', + title: 'a_sharing_restrictions_title', + description: 'a_sharing_restrictions_desc', type: ActionType.social, priority: ActionPriority.high, ), 'motion_detection': PrivacyAction( - title: 'Bewegungserkennung zeitlich begrenzen', - description: - 'Konfigurieren Sie Zeitpläne oder Privatzonen, damit unnötige Aufnahmen in Anwesenheitszeiten vermieden werden.', + title: 'a_motion_detection_title', + description: 'a_motion_detection_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'account_required': PrivacyAction( - title: 'Kontopflicht datenschutzarm umsetzen', - description: - 'Falls kein kontoloser Betrieb möglich ist, verwenden Sie ein separates Konto mit minimalen Profildaten und deaktivieren Sie personalisierte Dienste.', + title: 'a_account_required_title', + description: 'a_account_required_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'tracking_disabled': PrivacyAction( - title: 'Tracking und Werbung deaktivieren', - description: - 'Deaktivieren Sie in den Datenschutzoptionen Tracking, personalisierte Werbung und optionale Telemetrie.', + title: 'a_tracking_disabled_title', + description: 'a_tracking_disabled_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'local_mode': PrivacyAction( - title: 'Offline-Nutzung bevorzugen', - description: - 'Nutzen Sie das Gerät primär über lokale Quellen (z. B. HDMI), um Datenübertragung an den Hersteller zu reduzieren.', + title: 'a_local_mode_title', + description: 'a_local_mode_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'data_collection': PrivacyAction( - title: 'Cloud-Datenerfassung reduzieren', - description: - 'Prüfen Sie in der Thermostat-App, ob Historien-Upload deaktiviert oder Speicherdauer verkürzt werden kann.', + title: 'a_data_collection_title', + description: 'a_data_collection_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'offline_control': PrivacyAction( - title: 'Lokale Steuerung einrichten', - description: - 'Konfigurieren Sie lokale Zeitpläne und eine Bedienung ohne Cloud-Abhängigkeit, falls das Gerät dies unterstützt.', + title: 'a_offline_control_title', + description: 'a_offline_control_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'family_access': PrivacyAction( - title: 'Zugriffsrechte für Haushaltsmitglieder trennen', - description: - 'Richten Sie getrennte Rollen/Konten ein, damit nur berechtigte Personen Änderungen an der Heizung vornehmen können.', + title: 'a_family_access_title', + description: 'a_family_access_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'local_control': PrivacyAction( - title: 'Lokale Automatisierungen aktivieren', - description: - 'Nutzen Sie lokale Szenen/Zeitpläne statt Cloud-Automatisierungen, sofern verfügbar.', + title: 'a_local_control_title', + description: 'a_local_control_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'usage_tracking': PrivacyAction( - title: 'Nutzungs-Tracking einschränken', - description: - 'Deaktivieren Sie in den App-Einstellungen Analyse- und Nutzungsdaten, soweit möglich.', + title: 'a_usage_tracking_title', + description: 'a_usage_tracking_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'offline_fallback': PrivacyAction( - title: 'Offline-Notbetrieb sicherstellen', - description: - 'Prüfen Sie lokale Schalter/Taster und richten Sie Fallback-Bedienung ein, damit das Gerät auch ohne Internet nutzbar bleibt.', + title: 'a_offline_fallback_title', + description: 'a_offline_fallback_desc', type: ActionType.security, priority: ActionPriority.medium, ), 'offline_unlock': PrivacyAction( - title: 'Offline-Zugang absichern', - description: - 'Richten Sie einen physischen Schlüssel oder einen Notfall-Code ein und testen Sie den Zugriff bei Ausfall der Internetverbindung.', + title: 'a_offline_unlock_title', + description: 'a_offline_unlock_desc', type: ActionType.security, priority: ActionPriority.high, ), 'access_logging': PrivacyAction( - title: 'Zugriffsprotokoll aktivieren', - description: - 'Aktivieren Sie Protokollierung und Benachrichtigungen für Schlossöffnungen, damit unbefugte Zugriffe auffallen.', + title: 'a_access_logging_title', + description: 'a_access_logging_desc', type: ActionType.security, priority: ActionPriority.medium, ), 'two_factor': PrivacyAction( - title: 'Zwei-Faktor-Authentifizierung aktivieren', - description: - 'BSI-Empfehlung: Aktivieren Sie 2FA für Ihr Schlosskonto um Remote-Zugriffe zu schützen.', + title: 'a_two_factor_title', + description: 'a_two_factor_desc', type: ActionType.security, priority: ActionPriority.high, ), 'map_privacy': PrivacyAction( - title: 'Grundriss-Speicherung klären', - description: - 'Überprüfen Sie: Werden Grundrisse lokal oder in der Cloud gespeichert? Bevorzugen Sie lokal.', + title: 'a_map_privacy_title', + description: 'a_map_privacy_desc', type: ActionType.social, priority: ActionPriority.high, ), 'cloud_required': PrivacyAction( - title: 'Cloud-Abhängigkeit reduzieren', - description: - 'Aktivieren Sie lokale Navigation oder Offline-Modus, falls verfügbar. Wenn nicht verfügbar, bewerten Sie einen Wechsel zu einem datenschutzfreundlicheren Modell.', + title: 'a_cloud_required_title', + description: 'a_cloud_required_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'vision_data': PrivacyAction( - title: 'Kameradaten nur lokal verarbeiten', - description: - 'Deaktivieren Sie Upload/Speicherung von Kamerabildern und nutzen Sie, wenn möglich, ausschließlich lokale Navigationsverarbeitung.', + title: 'a_vision_data_title', + description: 'a_vision_data_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'parental_control': PrivacyAction( - title: 'Elternkontrolle einrichten', - description: - 'Aktivieren Sie Elternkontrolle mit PIN und beschränken Sie Kontakte, Funktionen und Freigaben auf das Notwendige.', + title: 'a_parental_control_title', + description: 'a_parental_control_desc', type: ActionType.social, priority: ActionPriority.high, ), 'child_data_limits': PrivacyAction( - title: 'Datenerfassung minimieren', - description: - 'Deaktivieren Sie optionale Profildaten und erfassen Sie nur die für die Kernfunktion erforderlichen Kinderdaten.', + title: 'a_child_data_limits_title', + description: 'a_child_data_limits_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'recording_disable': PrivacyAction( - title: 'Audio/Video-Aufnahmen deaktivieren', - description: - 'Schalten Sie Aufnahmefunktionen standardmäßig aus und aktivieren Sie sie nur bei konkretem Bedarf kurzzeitig.', + title: 'a_recording_disable_title', + description: 'a_recording_disable_desc', type: ActionType.security, priority: ActionPriority.high, ), 'health_sharing': PrivacyAction( - title: 'Gesundheitsdaten-Freigaben einschränken', - description: - 'Entziehen Sie unnötigen Drittanbieter-Apps den Zugriff auf Gesundheitsdaten in App- und Kontoeinstellungen.', + title: 'a_health_sharing_title', + description: 'a_health_sharing_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'location_tracking': PrivacyAction( - title: 'Standortfreigabe reduzieren', - description: - 'Deaktivieren Sie Standortverfolgung außerhalb aktiver Nutzung oder erlauben Sie sie nur beim Verwenden der App.', + title: 'a_location_tracking_title', + description: 'a_location_tracking_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'expert_data_retention_duration': PrivacyAction( - title: 'Speicherfristen festlegen', - description: - 'Setzen Sie klare kurze Aufbewahrungsfristen in den Einstellungen und löschen Sie Altbestände regelmäßig.', + title: 'a_expert_data_retention_duration_title', + description: 'a_expert_data_retention_duration_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'expert_access_control_granular': PrivacyAction( - title: 'Granulare Rollen und Konten einführen', - description: - 'Nutzen Sie getrennte Konten statt Shared-Logins und vergeben Sie nur die minimal nötigen Rechte.', + title: 'a_expert_access_control_granular_title', + description: 'a_expert_access_control_granular_desc', type: ActionType.security, priority: ActionPriority.high, ), 'expert_third_party_sharing_limited': PrivacyAction( - title: 'Drittweitergabe begrenzen', - description: - 'Deaktivieren Sie unnötige Partner- und Analysefreigaben in Datenschutz- und Kontoeinstellungen.', + title: 'a_expert_third_party_sharing_limited_title', + description: 'a_expert_third_party_sharing_limited_desc', type: ActionType.technical, priority: ActionPriority.high, ), 'expert_data_sale_disabled': PrivacyAction( - title: 'Datenverkauf widersprechen', - description: - 'Aktivieren Sie vorhandene "Do not sell"-Optionen bzw. widersprechen Sie der Datenweitergabe für Vermarktung.', + title: 'a_expert_data_sale_disabled_title', + description: 'a_expert_data_sale_disabled_desc', type: ActionType.social, priority: ActionPriority.high, ), 'expert_update_support_window': PrivacyAction( - title: 'Update-Zusage verifizieren', - description: - 'Prüfen Sie die offizielle Update-Policy des Herstellers und planen Sie bei fehlender Zusage einen Gerätewechsel ein.', + title: 'a_expert_update_support_window_title', + description: 'a_expert_update_support_window_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'expert_vulnerability_process': PrivacyAction( - title: 'Hersteller-Sicherheitsprozess prüfen', - description: - 'Bevorzugen Sie Hersteller mit klarer Security-Kontaktstelle und Responsible-Disclosure-Prozess.', + title: 'a_expert_vulnerability_process_title', + description: 'a_expert_vulnerability_process_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'expert_offline_functionality': PrivacyAction( - title: 'Offline-Funktionalität priorisieren', - description: - 'Aktivieren Sie lokale Betriebsmodi und minimieren Sie Cloud-Pflichtfunktionen, sofern das Gerät dies erlaubt.', + title: 'a_expert_offline_functionality_title', + description: 'a_expert_offline_functionality_desc', type: ActionType.technical, priority: ActionPriority.medium, ), 'expert_bystander_transparency': PrivacyAction( - title: 'Transparenzhinweise für Umfeld ergänzen', - description: - 'Sorgen Sie für sichtbare Hinweise, Aufnahmeanzeigen und klare Information für betroffene Personen im Umfeld.', + title: 'a_expert_bystander_transparency_title', + description: 'a_expert_bystander_transparency_desc', type: ActionType.social, priority: ActionPriority.medium, ), 'expert_child_data_protection': PrivacyAction( - title: 'Kinderdatenschutz verschärfen', - description: - 'Aktivieren Sie kindgerechte Profile, minimieren Sie Datenerhebung und deaktivieren Sie Profilbildung/Weitergabe.', + title: 'a_expert_child_data_protection_title', + description: 'a_expert_child_data_protection_desc', type: ActionType.security, priority: ActionPriority.high, ), 'expert_access_revocation': PrivacyAction( - title: 'Schnellen Zugriffswiderruf einrichten', - description: - 'Stellen Sie sicher, dass digitale Schlüssel einzeln und sofort widerrufen werden können, z. B. bei Geräteverlust.', + title: 'a_expert_access_revocation_title', + description: 'a_expert_access_revocation_desc', type: ActionType.security, priority: ActionPriority.high, ), 'expert_sensitive_inference_controls': PrivacyAction( - title: 'Inferenzfunktionen einschränken', - description: - 'Deaktivieren Sie Funktionen, die sensible Gesundheits- oder Verhaltensprofile ableiten, sofern diese nicht zwingend benötigt werden.', + title: 'a_expert_sensitive_inference_controls_title', + description: 'a_expert_sensitive_inference_controls_desc', type: ActionType.technical, priority: ActionPriority.high, ), @@ -1560,9 +968,8 @@ class DeviceInstance { if (dontKnowAnswerCount > 0) { actions.add( const PrivacyAction( - title: 'Geräteeinstellungen besser kennenlernen', - description: - 'Mindestens eine Frage wurde mit "Weiß ich nicht" beantwortet. Prüfen Sie die Einstellungen und Dokumentation Ihres Geräts, damit Sie Risiken künftig gezielt reduzieren können.', + title: 'a_dont_know_title', + description: 'a_dont_know_desc', type: ActionType.social, priority: ActionPriority.medium, ), @@ -1581,7 +988,7 @@ class DeviceInstance { if (template.baseRiskScore > 0) { factors.add( ScoringFactor( - label: 'Grundrisiko des Gerätetyps', + label: 'sl_base_risk', penalty: template.baseRiskScore, isDontKnow: false, isBaseRisk: true, @@ -1591,7 +998,7 @@ class DeviceInstance { if (roomId == _childBedroomRoomId) { factors.add( const ScoringFactor( - label: 'Erhöhte Sensibilität: Kinderzimmer', + label: 'sl_child_room_bonus', penalty: _childBedroomRiskBonus, isDontKnow: false, isBaseRisk: true, @@ -1628,78 +1035,75 @@ class DeviceInstance { } } - check('password', 'Standard-Passwort nicht geändert', 20, 10); - check('updates', 'Automatische Updates nicht aktiv', 15, 8); - check('network', 'Kein separates IoT-WLAN eingerichtet', 10, 5); - check('informed', 'Haushaltsmitglieder nicht informiert', 10, 5); - check('permissions', 'App-Berechtigungen nicht reduziert', 5, 3); + check('password', 'sl_password', 20, 10); + check('updates', 'sl_updates', 15, 8); + check('network', 'sl_network', 10, 5); + check('informed', 'sl_informed', 10, 5); + check('permissions', 'sl_permissions', 5, 3); if (template.hasCamera) { - check('camera_consent', 'Kein Einverständnis für Kamerabereich', 15, 8); + check('camera_consent', 'sl_camera_consent', 15, 8); } if (template.hasMicrophone) { - check('mic_active', 'Mikrofon nicht bei Nichtnutzung deaktiviert', 10, 5); + check('mic_active', 'sl_mic_active', 10, 5); } // Device-specific questions — use short labels instead of full question text. const Map shortLabels = { // Sensor - 'sensor_frequency': 'Messintervall nicht reduziert', - 'sensor_data_deletion': 'Alte Messwerte nicht gelöscht', - 'sensor_granularity': 'Daten zu fein granular gespeichert', - 'sensor_local': 'Daten in die Cloud übertragen', + 'sensor_frequency': 'sl_sensor_frequency', + 'sensor_data_deletion': 'sl_sensor_data_deletion', + 'sensor_granularity': 'sl_sensor_granularity', + 'sensor_local': 'sl_sensor_local', // Speaker - 'voice_history': 'Sprachaufnahmen nicht löschbar', - 'voice_local': 'Keine lokale Sprachverarbeitung', - 'skills_permissions': 'Skills nicht regelmäßig geprüft', + 'voice_history': 'sl_voice_history', + 'voice_local': 'sl_voice_local', + 'skills_permissions': 'sl_skills_permissions', // Camera - 'video_encryption': 'Videoübertragung nicht verschlüsselt', - 'video_storage': 'Aufnahmen nur in Anbieter-Cloud', - 'sharing_restrictions': 'Zugriff auf Aufnahmen nicht kontrolliert', - 'motion_detection': 'Bewegungserkennung immer aktiv', + 'video_encryption': 'sl_video_encryption', + 'video_storage': 'sl_video_storage', + 'sharing_restrictions': 'sl_sharing_restrictions', + 'motion_detection': 'sl_motion_detection', // TV - 'account_required': 'Pflichtdkonto beim Hersteller nötig', - 'tracking_disabled': 'Werbe-Tracking nicht deaktiviert', - 'local_mode': 'Kein Offline-Betrieb möglich', + 'account_required': 'sl_account_required', + 'tracking_disabled': 'sl_tracking_disabled', + 'local_mode': 'sl_local_mode', // Thermostat - 'data_collection': 'Temperaturverlauf an Hersteller übertragen', - 'offline_control': 'Kein Offline-Betrieb möglich', - 'family_access': 'Zugriff nicht einschränkbar', + 'data_collection': 'sl_data_collection', + 'offline_control': 'sl_offline_control', + 'family_access': 'sl_family_access', // Light / Plug / Blind - 'local_control': 'Automatisierungen nur mit Internet', - 'usage_tracking': 'Schaltmuster vom Hersteller erfasst', - 'offline_fallback': 'Gerät offline nicht nutzbar', + 'local_control': 'sl_local_control', + 'usage_tracking': 'sl_usage_tracking', + 'offline_fallback': 'sl_offline_fallback', // Lock - 'offline_unlock': 'Kein Offline-Öffnen möglich', - 'access_logging': 'Kein Zugriffsprotokoll verfügbar', - 'two_factor': '2-Faktor-Authentifizierung fehlt', + 'offline_unlock': 'sl_offline_unlock', + 'access_logging': 'sl_access_logging', + 'two_factor': 'sl_two_factor', // Robot - 'map_privacy': 'Grundriss an Hersteller übertragen', - 'cloud_required': 'Navigation nur mit Cloud möglich', - 'vision_data': 'Kamerabilder gespeichert oder übertragen', + 'map_privacy': 'sl_map_privacy', + 'cloud_required': 'sl_cloud_required', + 'vision_data': 'sl_vision_data', // Toy - 'parental_control': 'Elternkontrolle nicht eingerichtet', - 'child_data_limits': 'Datenmenge nicht eingeschränkt', - 'recording_disable': 'Aufnahmen nicht deaktivierbar', + 'parental_control': 'sl_parental_control', + 'child_data_limits': 'sl_child_data_limits', + 'recording_disable': 'sl_recording_disable', // Wearable - 'health_sharing': 'Gesundheitsdaten mit Dritten geteilt', - 'location_tracking': 'Standortverfolgung aktiv', + 'health_sharing': 'sl_health_sharing', + 'location_tracking': 'sl_location_tracking', // Expert mode - 'expert_data_retention_duration': 'Aufbewahrungsdauer unklar/zu lang', - 'expert_access_control_granular': 'Granulare Zugriffskontrolle fehlt', + 'expert_data_retention_duration': 'sl_expert_data_retention_duration', + 'expert_access_control_granular': 'sl_expert_access_control_granular', 'expert_third_party_sharing_limited': - 'Weitergabe an Dritte nicht begrenzt', - 'expert_data_sale_disabled': 'Datenverkauf nicht ausgeschlossen', - 'expert_update_support_window': 'Garantierter Update-Zeitraum unbekannt', - 'expert_vulnerability_process': - 'Schwachstellenprozess nicht dokumentiert', - 'expert_offline_functionality': - 'Sinnvoller Betrieb ohne Internet nicht möglich', - 'expert_bystander_transparency': - 'Transparenz für Betroffene im Umfeld fehlt', - 'expert_child_data_protection': 'Schutzmaßnahmen für Kinderdaten fehlen', - 'expert_access_revocation': 'Einzelner Zugriffswiderruf nicht möglich', + 'sl_expert_third_party_sharing_limited', + 'expert_data_sale_disabled': 'sl_expert_data_sale_disabled', + 'expert_update_support_window': 'sl_expert_update_support_window', + 'expert_vulnerability_process': 'sl_expert_vulnerability_process', + 'expert_offline_functionality': 'sl_expert_offline_functionality', + 'expert_bystander_transparency': 'sl_expert_bystander_transparency', + 'expert_child_data_protection': 'sl_expert_child_data_protection', + 'expert_access_revocation': 'sl_expert_access_revocation', 'expert_sensitive_inference_controls': - 'Kontrollen gegen sensible Inferenz fehlen', + 'sl_expert_sensitive_inference_controls', }; const baseIds = { 'password', diff --git a/lib/screens/device_questionnaire_screen.dart b/lib/screens/device_questionnaire_screen.dart index cf49db8..7a156a7 100644 --- a/lib/screens/device_questionnaire_screen.dart +++ b/lib/screens/device_questionnaire_screen.dart @@ -355,7 +355,7 @@ class _QuestionCard extends StatelessWidget { const SizedBox(width: 10), Expanded( child: Text( - DeviceDomainI18n.localize(question.text), + AppLocalizations.translate(question.text), style: text.bodyMedium?.copyWith( fontWeight: FontWeight.w500, height: 1.4, @@ -367,7 +367,7 @@ class _QuestionCard extends StatelessWidget { Padding( padding: const EdgeInsets.only(left: 34, top: 6), child: Text( - DeviceDomainI18n.localize(question.hint), + AppLocalizations.translate(question.hint), style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, fontStyle: FontStyle.italic, diff --git a/lib/screens/summary_screen.dart b/lib/screens/summary_screen.dart index 051048a..c04cddc 100644 --- a/lib/screens/summary_screen.dart +++ b/lib/screens/summary_screen.dart @@ -487,7 +487,7 @@ void _writeRiskSection( final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : DeviceDomainI18n.localize(device.inherentRiskHint!); + : AppLocalizations.translate(device.inherentRiskHint!); if (actions.isEmpty) { buffer.writeln(' ${_noActionMessage(device.riskLevel, localizations)}'); if (inherentRiskHint != null) { @@ -497,9 +497,9 @@ void _writeRiskSection( buffer.writeln(' ${actions.length} ${localizations.recommendations()}:'); for (final action in actions) { buffer.writeln( - ' - ${DeviceDomainI18n.localize(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', + ' - ${AppLocalizations.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', ); - buffer.writeln(' ${DeviceDomainI18n.localize(action.description)}'); + buffer.writeln(' ${AppLocalizations.translate(action.description)}'); } } buffer.writeln(); @@ -609,7 +609,7 @@ List _buildPdfRiskSection( final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : DeviceDomainI18n.localize(device.inherentRiskHint!); + : AppLocalizations.translate(device.inherentRiskHint!); final widgets = [ pw.Text( '${CatalogData.deviceName(device.template)} (${CatalogData.localizeText(device.roomName)})', @@ -642,10 +642,10 @@ List _buildPdfRiskSection( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ pw.Text( - '- ${DeviceDomainI18n.localize(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', + '- ${AppLocalizations.translate(action.title)} [${_priorityLabel(action.priority, localizations)} | ${_actionTypeLabel(action.type, localizations)}]', style: pw.TextStyle(fontWeight: pw.FontWeight.bold), ), - pw.Text(DeviceDomainI18n.localize(action.description)), + pw.Text(AppLocalizations.translate(action.description)), ], ), ), @@ -975,7 +975,7 @@ class _DeviceResultCardState extends State<_DeviceResultCard> { final actions = device.suggestedActions; final inherentRiskHint = device.inherentRiskHint == null ? null - : DeviceDomainI18n.localize(device.inherentRiskHint!); + : AppLocalizations.translate(device.inherentRiskHint!); final noActionColor = level == RiskLevel.low ? _riskColor(RiskLevel.low) : color; @@ -1289,7 +1289,7 @@ class _FactorRow extends StatelessWidget { const SizedBox(width: 6), Expanded( child: Text( - DeviceDomainI18n.localize(factor.label), + AppLocalizations.translate(factor.label), style: text.bodySmall?.copyWith(height: 1.3), maxLines: 2, overflow: TextOverflow.ellipsis, @@ -1353,7 +1353,7 @@ class _ActionTile extends StatelessWidget { children: [ Expanded( child: Text( - DeviceDomainI18n.localize(action.title), + AppLocalizations.translate(action.title), style: text.bodySmall?.copyWith( fontWeight: FontWeight.bold, ), @@ -1385,7 +1385,7 @@ class _ActionTile extends StatelessWidget { ), const SizedBox(height: 4), Text( - DeviceDomainI18n.localize(action.description), + AppLocalizations.translate(action.description), style: text.bodySmall?.copyWith( color: colors.onSurfaceVariant, height: 1.4,