Fix logbook stream subscription (#25927)

This commit is contained in:
Eric Stern 2025-06-26 00:42:43 -07:00 committed by GitHub
parent b81cd37776
commit dd4cb1df72
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 16 additions and 3 deletions

View File

@ -114,9 +114,13 @@ const getLogbookDataFromServer = (
export const subscribeLogbook = ( export const subscribeLogbook = (
hass: HomeAssistant, hass: HomeAssistant,
callbackFunction: (message: LogbookStreamMessage) => void, callbackFunction: (
message: LogbookStreamMessage,
subscriptionId: number
) => void,
startDate: string, startDate: string,
endDate: string, endDate: string,
subscriptionId: number,
entityIds?: string[], entityIds?: string[],
deviceIds?: string[] deviceIds?: string[]
): Promise<UnsubscribeFunc> => { ): Promise<UnsubscribeFunc> => {
@ -140,7 +144,7 @@ export const subscribeLogbook = (
params.device_ids = deviceIds; params.device_ids = deviceIds;
} }
return hass.connection.subscribeMessage<LogbookStreamMessage>( return hass.connection.subscribeMessage<LogbookStreamMessage>(
(message) => callbackFunction(message), (message) => callbackFunction(message, subscriptionId),
params params
); );
}; };

View File

@ -88,6 +88,8 @@ export class HaLogbook extends LitElement {
1000 1000
); );
private _logbookSubscriptionId = 0;
protected render() { protected render() {
if (!isComponentLoaded(this.hass, "logbook")) { if (!isComponentLoaded(this.hass, "logbook")) {
return nothing; return nothing;
@ -278,13 +280,20 @@ export class HaLogbook extends LitElement {
} }
try { try {
this._logbookSubscriptionId++;
this._unsubLogbook = subscribeLogbook( this._unsubLogbook = subscribeLogbook(
this.hass, this.hass,
(streamMessage) => { (streamMessage, subscriptionId) => {
if (subscriptionId !== this._logbookSubscriptionId) {
// Ignore messages from previous subscriptions
return;
}
this._processOrQueueStreamMessage(streamMessage); this._processOrQueueStreamMessage(streamMessage);
}, },
logbookPeriod.startTime.toISOString(), logbookPeriod.startTime.toISOString(),
logbookPeriod.endTime.toISOString(), logbookPeriod.endTime.toISOString(),
this._logbookSubscriptionId,
this.entityIds, this.entityIds,
this.deviceIds this.deviceIds
); );