Skip to content

Commit cc4d3ac

Browse files
committed
Add support Xiaomi Home source
1 parent f527458 commit cc4d3ac

File tree

5 files changed

+440
-249
lines changed

5 files changed

+440
-249
lines changed

internal/accounts.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ import (
1111
"github.com/AlexxIT/SmartScaleConnect/pkg/zepp"
1212
)
1313

14+
const (
15+
AccGarmin = "garmin"
16+
AccMiFitness = "mifitness"
17+
AccPicooc = "picooc"
18+
AccTanita = "tanita"
19+
AccXiaomi = "xiaomi"
20+
AccXiaomiHome = "xiaomihome"
21+
AccZeppXiaomi = "zepp/xiaomi"
22+
)
23+
1424
var accounts = map[string]core.Account{}
1525

1626
func GetAccount(fields []string) (core.Account, error) {
@@ -33,15 +43,17 @@ func getAccount(fields []string, key string) (core.Account, error) {
3343
var acc core.Account
3444

3545
switch fields[0] {
36-
case "garmin":
46+
case AccGarmin:
3747
acc = garmin.NewClient()
38-
case "picooc":
48+
case AccPicooc:
3949
acc = picooc.NewClient()
40-
case "tanita":
50+
case AccTanita:
4151
acc = tanita.NewClient()
42-
case "xiaomi":
52+
case AccXiaomi, AccMiFitness:
4353
acc = xiaomi.NewClient(xiaomi.AppMiFitness)
44-
case "zepp/xiaomi":
54+
case AccXiaomiHome:
55+
acc = xiaomi.NewClient(xiaomi.AppXiaomiHome)
56+
case AccZeppXiaomi:
4557
acc = zepp.NewClient()
4658
default:
4759
return nil, errors.New("unsupported type: " + fields[0])

internal/tokens.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ package internal
33
import (
44
"encoding/json"
55
"os"
6+
"strings"
67
)
78

89
var tokens = map[string]string{}
910

1011
func LoadToken(key string) string {
12+
key = replaceKey(key)
13+
1114
if len(tokens) == 0 {
1215
f, err := os.Open("scaleconnect.json")
1316
if err != nil {
@@ -22,6 +25,8 @@ func LoadToken(key string) string {
2225
}
2326

2427
func SaveToken(key string, value string) {
28+
key = replaceKey(key)
29+
2530
tokens[key] = value
2631

2732
f, err := os.Create("scaleconnect.json")
@@ -32,3 +37,12 @@ func SaveToken(key string, value string) {
3237

3338
_ = json.NewEncoder(f).Encode(&tokens)
3439
}
40+
41+
func replaceKey(key string) string {
42+
key, value, _ := strings.Cut(key, ":")
43+
switch key {
44+
case AccMiFitness, AccXiaomiHome:
45+
return AccXiaomi + ":" + value
46+
}
47+
return key
48+
}

internal/weights.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/AlexxIT/SmartScaleConnect/pkg/core"
1616
"github.com/AlexxIT/SmartScaleConnect/pkg/csv"
1717
"github.com/AlexxIT/SmartScaleConnect/pkg/fitbit"
18+
"github.com/AlexxIT/SmartScaleConnect/pkg/xiaomi"
1819
)
1920

2021
func GetWeights(from any) ([]*core.Weight, error) {
@@ -80,14 +81,14 @@ func getWeights(config string) ([]*core.Weight, error) {
8081
case "fitbit":
8182
return fitbit.Read(fields[1])
8283

83-
case "garmin", "tanita":
84+
case AccGarmin, AccTanita:
8485
acc, err := GetAccount(fields)
8586
if err != nil {
8687
return nil, err
8788
}
8889
return acc.GetAllWeights()
8990

90-
case "picooc", "xiaomi", "zepp/xiaomi":
91+
case AccMiFitness, AccPicooc, AccXiaomi, AccZeppXiaomi:
9192
acc, err := GetAccount(fields)
9293
if err != nil {
9394
return nil, err
@@ -99,6 +100,14 @@ func getWeights(config string) ([]*core.Weight, error) {
99100

100101
return acc.(core.AccountWithFilter).GetFilterWeights(fields[3])
101102

103+
case AccXiaomiHome:
104+
acc, err := GetAccount(fields)
105+
if err != nil {
106+
return nil, err
107+
}
108+
109+
return acc.(*xiaomi.Client).GetModelWeights(fields[3], fields[4])
110+
102111
default:
103112
return nil, errors.New("unsupported type: " + fields[0])
104113
}
@@ -109,7 +118,7 @@ func SetWeights(config string, src []*core.Weight) error {
109118
case "csv", "json":
110119
return writeFile(config, src)
111120

112-
case "garmin", "zepp/xiaomi":
121+
case AccGarmin, AccZeppXiaomi:
113122
return appendAccount(config, src)
114123

115124
case "json/latest":

pkg/xiaomi/auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ func (c *Client) Request(baseURL, apiURL, params string) ([]byte, error) {
271271
}
272272
defer res.Body.Close()
273273

274-
if res.StatusCode == http.StatusUnauthorized {
274+
if res.StatusCode != http.StatusOK {
275275
return nil, errors.New(res.Status)
276276
}
277277

0 commit comments

Comments
 (0)