@@ -11492,59 +11492,121 @@ class FastSearchCard extends HTMLElement {
1149211492 return null;
1149311493 }
1149411494
11495-
11496- // 🎯 FIND RELATED SCRIPTS
11495+ // 🎯 FIND RELATED SCRIPTS - Erweiterte Metadaten-Analyse
1149711496 findRelatedScripts(deviceId, deviceArea) {
1149811497 if (!this._hass || !this.allItems) return [];
1149911498
11499+ // Device-ID und Area-ID des Ziel-Devices ermitteln
11500+ const targetDeviceId = this.getDeviceId(deviceId);
11501+ const targetAreaId = this.getAreaId(deviceId, deviceArea);
11502+
11503+ console.log(`📜 Target Device ID: ${targetDeviceId}, Area ID: ${targetAreaId}`);
11504+
1150011505 return this.allItems.filter(item => {
1150111506 if (item.domain !== 'script') return false;
1150211507
11503- // METHODE 1: Gleiche Area
11508+ // METHODE 1: Gleiche Area (bestehend)
1150411509 if (item.area === deviceArea && deviceArea !== 'Ohne Raum') {
1150511510 console.log(`✅ Script ${item.name} in same area: ${deviceArea}`);
1150611511 return true;
1150711512 }
1150811513
11509- // METHODE 2: Name-Matching
11514+ // 🆕 METHODE 2: Script hat gleiche Area-ID
11515+ const scriptAreaId = this.getAreaId(item.id);
11516+ if (targetAreaId && scriptAreaId === targetAreaId) {
11517+ console.log(`✅ Script ${item.name} has same area ID: ${targetAreaId}`);
11518+ return true;
11519+ }
11520+
11521+ // 🆕 METHODE 3: Script hat gleiche Device-ID
11522+ const scriptDeviceId = this.getDeviceId(item.id);
11523+ if (targetDeviceId && scriptDeviceId === targetDeviceId) {
11524+ console.log(`✅ Script ${item.name} on same device: ${targetDeviceId}`);
11525+ return true;
11526+ }
11527+
11528+ // METHODE 4: Name-Matching (bestehend, aber erweitert)
1151011529 const scriptName = item.name.toLowerCase();
1151111530 const deviceName = deviceId.split('.')[1].toLowerCase();
1151211531 const areaName = deviceArea.toLowerCase();
1151311532
11514- if (scriptName.includes(deviceName) || scriptName.includes(areaName)) {
11515- console.log(`✅ Script ${item.name} matches by name`);
11516- return true;
11533+ // Erweiterte Name-Patterns
11534+ const namePatterns = [
11535+ deviceName,
11536+ areaName,
11537+ deviceId.replace(/[._]/g, ' ').toLowerCase(),
11538+ // Device-spezifische Patterns
11539+ deviceName.replace(/[._]/g, ' '),
11540+ areaName.replace(/[._]/g, ' ')
11541+ ];
11542+
11543+ for (const pattern of namePatterns) {
11544+ if (pattern && scriptName.includes(pattern)) {
11545+ console.log(`✅ Script ${item.name} matches pattern: ${pattern}`);
11546+ return true;
11547+ }
1151711548 }
1151811549
1151911550 return false;
1152011551 });
1152111552 }
1152211553
11523- // 🎯 FIND RELATED AUTOMATIONS
11554+ // 🎯 FIND RELATED AUTOMATIONS - Erweiterte Metadaten-Analyse
1152411555 findRelatedAutomations(deviceId, deviceArea) {
1152511556 if (!this._hass || !this.allItems) return [];
1152611557
11558+ // Device-ID und Area-ID des Ziel-Devices ermitteln
11559+ const targetDeviceId = this.getDeviceId(deviceId);
11560+ const targetAreaId = this.getAreaId(deviceId, deviceArea);
11561+
11562+ console.log(`⚙️ Target Device ID: ${targetDeviceId}, Area ID: ${targetAreaId}`);
11563+
1152711564 return this.allItems.filter(item => {
1152811565 if (item.domain !== 'automation') return false;
1152911566
11530- // Gleiche Logik wie Scripts
11567+ // METHODE 1: Gleiche Area (bestehend)
1153111568 if (item.area === deviceArea && deviceArea !== 'Ohne Raum') {
1153211569 console.log(`✅ Automation ${item.name} in same area: ${deviceArea}`);
1153311570 return true;
1153411571 }
1153511572
11573+ // 🆕 METHODE 2: Automation hat gleiche Area-ID
11574+ const autoAreaId = this.getAreaId(item.id);
11575+ if (targetAreaId && autoAreaId === targetAreaId) {
11576+ console.log(`✅ Automation ${item.name} has same area ID: ${targetAreaId}`);
11577+ return true;
11578+ }
11579+
11580+ // 🆕 METHODE 3: Automation hat gleiche Device-ID
11581+ const autoDeviceId = this.getDeviceId(item.id);
11582+ if (targetDeviceId && autoDeviceId === targetDeviceId) {
11583+ console.log(`✅ Automation ${item.name} on same device: ${targetDeviceId}`);
11584+ return true;
11585+ }
11586+
11587+ // METHODE 4: Name-Matching (erweitert wie bei Scripts)
1153611588 const autoName = item.name.toLowerCase();
1153711589 const deviceName = deviceId.split('.')[1].toLowerCase();
1153811590 const areaName = deviceArea.toLowerCase();
1153911591
11540- if (autoName.includes(deviceName) || autoName.includes(areaName)) {
11541- console.log(`✅ Automation ${item.name} matches by name`);
11542- return true;
11592+ const namePatterns = [
11593+ deviceName,
11594+ areaName,
11595+ deviceId.replace(/[._]/g, ' ').toLowerCase(),
11596+ deviceName.replace(/[._]/g, ' '),
11597+ areaName.replace(/[._]/g, ' ')
11598+ ];
11599+
11600+ for (const pattern of namePatterns) {
11601+ if (pattern && autoName.includes(pattern)) {
11602+ console.log(`✅ Automation ${item.name} matches pattern: ${pattern}`);
11603+ return true;
11604+ }
1154311605 }
1154411606
1154511607 return false;
1154611608 });
11547- }
11609+ }
1154811610
1154911611 // 🎯 RENDER ACTION RESULTS
1155011612 renderActionResults(relatedActions, container, filter = 'all') {
0 commit comments