|
|
@@ -5,6 +5,7 @@ import (
|
|
|
"ems-backend/models"
|
|
|
"encoding/json"
|
|
|
"net/http"
|
|
|
+ "sort"
|
|
|
"time"
|
|
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
@@ -224,6 +225,20 @@ func fetchHAEntitiesByDevice(config datatypes.JSON, deviceID string) ([]HAEntity
|
|
|
DeviceName: r.DName,
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Sort by friendly_name
|
|
|
+ sort.Slice(entities, func(i, j int) bool {
|
|
|
+ nameI, okI := entities[i].Attributes["friendly_name"].(string)
|
|
|
+ nameJ, okJ := entities[j].Attributes["friendly_name"].(string)
|
|
|
+ if !okI {
|
|
|
+ nameI = entities[i].EntityID
|
|
|
+ }
|
|
|
+ if !okJ {
|
|
|
+ nameJ = entities[j].EntityID
|
|
|
+ }
|
|
|
+ return nameI < nameJ
|
|
|
+ })
|
|
|
+
|
|
|
return entities, nil
|
|
|
}
|
|
|
|
|
|
@@ -309,6 +324,20 @@ func fetchHAEntities(config datatypes.JSON) ([]HAEntity, error) {
|
|
|
DeviceName: r.DName,
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // Sort by friendly_name
|
|
|
+ sort.Slice(entities, func(i, j int) bool {
|
|
|
+ nameI, okI := entities[i].Attributes["friendly_name"].(string)
|
|
|
+ nameJ, okJ := entities[j].Attributes["friendly_name"].(string)
|
|
|
+ if !okI {
|
|
|
+ nameI = entities[i].EntityID
|
|
|
+ }
|
|
|
+ if !okJ {
|
|
|
+ nameJ = entities[j].EntityID
|
|
|
+ }
|
|
|
+ return nameI < nameJ
|
|
|
+ })
|
|
|
+
|
|
|
return entities, nil
|
|
|
}
|
|
|
// If decode failed, fallthrough to legacy method
|
|
|
@@ -338,6 +367,19 @@ func fetchHAEntities(config datatypes.JSON) ([]HAEntity, error) {
|
|
|
return nil, fmt.Errorf("failed to decode response: %v", err)
|
|
|
}
|
|
|
|
|
|
+ // Sort by friendly_name
|
|
|
+ sort.Slice(entities, func(i, j int) bool {
|
|
|
+ nameI, okI := entities[i].Attributes["friendly_name"].(string)
|
|
|
+ nameJ, okJ := entities[j].Attributes["friendly_name"].(string)
|
|
|
+ if !okI {
|
|
|
+ nameI = entities[i].EntityID
|
|
|
+ }
|
|
|
+ if !okJ {
|
|
|
+ nameJ = entities[j].EntityID
|
|
|
+ }
|
|
|
+ return nameI < nameJ
|
|
|
+ })
|
|
|
+
|
|
|
return entities, nil
|
|
|
}
|
|
|
|