@@ -281,7 +281,7 @@ export class XiaoshiOfflineCard extends LitElement {
align-items: center;
padding: 0px;
border-bottom: 1px solid rgb(150,150,150,0.2);
margin: 0 32px 8 px 32px;
margin: 0 32px 0 px 32px;
}
/*设备、实体明细背景*/
@@ -289,7 +289,7 @@ export class XiaoshiOfflineCard extends LitElement {
flex: 1;
overflow-y: auto;
min-height: 0;
padding: 0 0 8px 0;
padding: 0 0 8px 0;
}
.device-icon {
@@ -304,7 +304,7 @@ export class XiaoshiOfflineCard extends LitElement {
.device-name {
font-weight: 500;
color: var(--fg-color, #000);
margin-bottom : 4 px;
padding : 6 px 0 0 0 ;
}
.device-entity {
@@ -316,7 +316,6 @@ export class XiaoshiOfflineCard extends LitElement {
.device-details {
font-size: 10px;
color: var(--fg-color, #000);
margin-top: 4px;
}
.device-last-seen {
@@ -327,7 +326,7 @@ export class XiaoshiOfflineCard extends LitElement {
.no-devices {
text-align: center;
padding: 0 px;
padding: 8 px 0 0 0 ;
color: var(--fg-color, #000);
}
@@ -426,6 +425,12 @@ export class XiaoshiOfflineCard extends LitElement {
const offlineDevices = [ ] ;
// 获取设备排除模式
const excludeDevicePatterns = this . config . exclude _devices || [ ] ;
// 记录被排除的设备ID集合
const excludedDeviceIds = new Set ( ) ;
// 并行检查所有设备
const deviceChecks = devices . map ( device => {
const deviceEntities = entitiesByDevice [ device . id ] || [ ] ;
@@ -435,12 +440,6 @@ export class XiaoshiOfflineCard extends LitElement {
isOffline : this . _checkDeviceAvailabilitySync ( device , deviceEntities , entityMap )
} ;
} ) ;
// 获取设备排除模式
const excludeDevicePatterns = this . config . exclude _devices || [ ] ;
// 记录被排除的设备ID集合
const excludedDeviceIds = new Set ( ) ;
// 过滤离线设备并构建数据
deviceChecks . forEach ( ( { device , deviceEntities , isOffline } ) => {
@@ -454,16 +453,25 @@ export class XiaoshiOfflineCard extends LitElement {
return ; // 跳过匹配排除模式的设备
}
offlineDevices . push ( {
device _id : device . id ,
name : deviceName ,
model : device . model ,
manufacturer : device . manufacturer ,
area _id : device . area _id ,
entities : deviceEntities ,
last _seen : this . _getDeviceLastSeen ( deviceEntities , entityMap ) ,
icon : this . _getDeviceIcon ( device , deviceEntities )
// 再次确保设备有有效实体
const validEntities = deviceEntities . filter ( entityReg => {
const entity = entityMap [ entityReg . entity _id ] ;
return entity && ! entityReg . disabled _by ;
} ) ;
// 只有当设备有有效实体时才添加到离线设备列表
if ( validEntities . length > 0 ) {
offlineDevices . push ( {
device _id : device . id ,
name : deviceName ,
model : device . model ,
manufacturer : device . manufacturer ,
area _id : device . area _id ,
entities : validEntities , // 使用有效实体而不是所有实体
last _seen : this . _getDeviceLastSeen ( validEntities , entityMap ) ,
icon : this . _getDeviceIcon ( device , validEntities )
} ) ;
}
}
} ) ;
@@ -538,7 +546,7 @@ export class XiaoshiOfflineCard extends LitElement {
_checkDeviceAvailabilitySync ( device , deviceEntities , entityMap ) {
if ( ! deviceEntities || deviceEntities . length === 0 ) {
return tru e; // 没有实体的设备视为离线
return fals e; // 没有实体的设备不 视为离线,直接排除
}
// 检查设备的可用性状态
@@ -546,16 +554,23 @@ export class XiaoshiOfflineCard extends LitElement {
return false ; // 被禁用的设备不算离线
}
// 过滤出有效的实体( 未被禁用且在entityMap中存在)
const validEntities = deviceEntities . filter ( entityReg => {
const entity = entityMap [ entityReg . entity _id ] ;
return entity && ! entityReg . disabled _by ;
} ) ;
// 如果没有有效实体,则不视为离线设备,直接排除
if ( validEntities . length === 0 ) {
return false ;
}
let hasAvailableEntity = false ;
let hasUnavailableEntity = false ;
for ( const entityReg of device Entities) {
for ( const entityReg of valid Entities) {
const entity = entityMap [ entityReg . entity _id ] ;
if ( ! entity ) continue ;
// 跳过被禁用的实体
if ( entityReg . disabled _by ) continue ;
if ( entity . state !== 'unavailable' ) {
hasAvailableEntity = true ;
break ; // 找到一个可用实体就可以停止检查
@@ -564,7 +579,7 @@ export class XiaoshiOfflineCard extends LitElement {
}
}
// 如果设备有实体但所有实体都不可用,则设备离线
// 如果设备有有效 实体但所有实体都不可用,则设备离线
return hasUnavailableEntity && ! hasAvailableEntity ;
}