Skip to content

Commit e0fcb27

Browse files
authored
Update fast-search-card.js
1 parent 4f3dfb6 commit e0fcb27

File tree

1 file changed

+63
-25
lines changed

1 file changed

+63
-25
lines changed

dist/fast-search-card.js

Lines changed: 63 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -9081,31 +9081,63 @@ class FastSearchCard extends HTMLElement {
90819081

90829082
// NEU: Timer by ID laden
90839083
async getTimerById(timerId) {
9084-
// Implementierung je nach Ihrem Backend
9085-
// Beispiel für Home Assistant Scheduler:
90869084
try {
9085+
// Korrekte WebSocket-Anfrage für Home Assistant Scheduler
90879086
const schedules = await this._hass.callWS({
9088-
type: 'scheduler/items'
9087+
type: 'call_service',
9088+
domain: 'scheduler',
9089+
service: 'list',
9090+
service_data: {}
90899091
});
9092+
9093+
// Alternative: Falls das nicht funktioniert, versuchen Sie:
9094+
// const schedules = this._hass.states;
9095+
// return Object.values(schedules).find(s => s.entity_id.includes(timerId));
9096+
90909097
return schedules.find(s => s.schedule_id === timerId);
90919098
} catch (error) {
90929099
console.error('Fehler beim Laden des Timers:', error);
9093-
return null;
9100+
9101+
// Fallback: Timer-Daten aus der aktuellen Liste holen
9102+
return this.getCurrentTimerFromList(timerId);
90949103
}
90959104
}
9105+
9106+
// FALLBACK: Timer aus der aktuellen Anzeige holen
9107+
getCurrentTimerFromList(timerId) {
9108+
// Vereinfachter Ansatz: Nimm die ursprüngliche Aktion vom Button
9109+
if (this.lastLoadedTimers) {
9110+
return this.lastLoadedTimers.find(t => t.schedule_id === timerId);
9111+
}
9112+
9113+
// Minimal-Timer-Objekt für Edit-Zwecke
9114+
return {
9115+
schedule_id: timerId,
9116+
action: 'turn_off', // Default-Aktion
9117+
name: 'Timer'
9118+
};
9119+
}
90969120

90979121
// NEU: Timer-Zeit aktualisieren
90989122
async updateTimerTime(timerId, newTotalMinutes) {
9099-
const future = new Date(Date.now() + newTotalMinutes * 60 * 1000);
9100-
const timeString = future.toTimeString().slice(0, 5);
9101-
9102-
await this._hass.callService('scheduler', 'edit', {
9103-
entity_id: `schedule.${timerId}`,
9104-
timeslots: [{
9105-
start: timeString,
9106-
// Weitere Timer-Daten beibehalten...
9107-
}]
9108-
});
9123+
try {
9124+
const future = new Date(Date.now() + newTotalMinutes * 60 * 1000);
9125+
const timeString = future.toTimeString().slice(0, 5);
9126+
9127+
// Korrekte Service-Calls für Scheduler
9128+
await this._hass.callService('scheduler', 'edit', {
9129+
entity_id: timerId,
9130+
timeslots: [{
9131+
start: timeString
9132+
}]
9133+
});
9134+
9135+
console.log(`✅ Timer ${timerId} erfolgreich auf ${newTotalMinutes} Minuten aktualisiert`);
9136+
9137+
} catch (error) {
9138+
console.error('❌ Fehler beim Aktualisieren des Timers:', error);
9139+
throw error;
9140+
}
91099141
}
91109142

91119143
closeMinimalTimePicker(parentContainer) {
@@ -9541,7 +9573,7 @@ class FastSearchCard extends HTMLElement {
95419573
console.error('❌ Timer Fehler:', error);
95429574
// TODO: Error Toast (später)
95439575
}
9544-
9576+
95459577
async loadActiveTimers(entityId) {
95469578
const container = this.shadowRoot.getElementById(`active-timers-${entityId}`);
95479579
if (!container) return;
@@ -9562,14 +9594,12 @@ class FastSearchCard extends HTMLElement {
95629594
const belongsToEntity = schedule.timeslots && schedule.timeslots.some(slot =>
95639595
slot.actions && slot.actions.some(action => action.entity_id === entityId)
95649596
);
9565-
95669597
// Timer = einmalige Ausführung (erkennt man am Namen oder fehlendem repeat_type)
95679598
const isTimer = !schedule.weekdays ||
95689599
schedule.weekdays.length === 0 ||
95699600
(schedule.name && schedule.name.includes('min)')) || // Timer haben oft "(30min)" im Namen
95709601
schedule.repeat_type === 'once' ||
95719602
!schedule.repeat_type;
9572-
95739603
// DEBUG: Zeige alle relevanten Schedules
95749604
if (belongsToEntity) {
95759605
console.log(`🔍 TIMER DEBUG - Schedule: ${schedule.name}, weekdays: ${JSON.stringify(schedule.weekdays)}, isTimer: ${isTimer}`);
@@ -9580,7 +9610,11 @@ class FastSearchCard extends HTMLElement {
95809610

95819611
console.log(`🎯 Timer für ${entityId}:`, entityTimers);
95829612

9583-
this.renderActiveTimers(entityTimers, entityId);
9613+
// NEU: Timer zwischenspeichern für Edit-Fallback
9614+
this.lastLoadedTimers = entityTimers;
9615+
9616+
// NEU: Verwende displayActiveTimers statt renderActiveTimers
9617+
this.displayActiveTimers(container, entityTimers, entityId);
95849618

95859619
} catch (error) {
95869620
console.error('❌ Fehler beim Laden der Timer:', error);
@@ -9745,18 +9779,22 @@ class FastSearchCard extends HTMLElement {
97459779

97469780
async deleteTimer(timerId, entityId) {
97479781
try {
9748-
// KORRIGIERT: Verwende callApi statt callService
9749-
await this._hass.callApi('POST', 'scheduler/remove', {
9750-
schedule_id: timerId
9782+
console.log(`🗑️ Timer löschen: ${timerId}`);
9783+
9784+
// Korrekte Service-Call für Timer-Löschung
9785+
await this._hass.callService('scheduler', 'remove', {
9786+
entity_id: timerId
97519787
});
97529788

9753-
console.log(`🗑️ Timer ${timerId} gelöscht`);
9789+
console.log('✅ Timer erfolgreich gelöscht');
97549790

9755-
// Timer Liste neu laden
9756-
this.loadActiveTimers(entityId);
9791+
// Timer-Liste neu laden
9792+
setTimeout(() => {
9793+
this.loadActiveTimers(entityId);
9794+
}, 500);
97579795

97589796
} catch (error) {
9759-
console.error('❌ Fehler beim Löschen:', error);
9797+
console.error('❌ Fehler beim Löschen des Timers:', error);
97609798
}
97619799
}
97629800

0 commit comments

Comments
 (0)