-
Notifications
You must be signed in to change notification settings - Fork 0
/
capability_button.go
95 lines (81 loc) · 2.21 KB
/
capability_button.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package go_fritzbox_api
// todo: FD440 has humidity sensor
// note: only tested for model 400
import (
"encoding/json"
"fmt"
"strings"
"time"
)
type Button struct {
CapName string
Buttons []ButtonPress
Batterylow string
Battery string
device *SmarthomeDevice
}
type ButtonPress struct {
ID string `json:"-id"`
Type string
Name string `json:"name"`
Identifier string `json:"-identifier"`
LastPressedTimeStamp string `json:"lastpressedtimestamp"`
}
// GetLastPressTime converts the last-press-time string to a time-struct
func (bp ButtonPress) GetLastPressTime() (t time.Time) {
return unixStringToTime(bp.LastPressedTimeStamp)
}
// Reload reloads all client values
func (b *Button) Reload(c *Client) error {
tt, err := getDeviceInfosFromCapability(c, b)
if err != nil {
return err
}
// update current capability
th := tt.(*Button)
b.CapName = th.CapName
b.Buttons = th.Buttons
b.Batterylow = th.Batterylow
b.Battery = th.Battery
b.device = th.device
return nil
}
func (b *Button) String() string {
s := fmt.Sprintf("%s: {[", b.CapName)
for _, bp := range b.Buttons {
s += bp.String() + ", "
}
return s[:len(s)-2] + "]}"
}
func (bp ButtonPress) String() string {
return fmt.Sprintf("{ID: %s, Name: %s, Button-Typ: %s, Identifier: %s, zuletzt betätigt: %s}", bp.ID, bp.Name, bp.Type, bp.Identifier, bp.GetLastPressTime())
}
func (b *Button) Name() string {
return b.CapName
}
func (b *Button) Device() *SmarthomeDevice {
return b.device
}
func (b *Button) fromJSON(m map[string]json.RawMessage, d *SmarthomeDevice) (Capability, error) {
b.Batterylow = string(m["batterylow"])
b.Batterylow = string(m["battery"])
err := json.Unmarshal(m["button"], &b.Buttons)
if err != nil {
return nil, err
}
for i, bs := range b.Buttons {
if strings.Contains(bs.Name, EvTastendruckKurz) || strings.Contains(bs.Name, EvTastendruckLang) {
t := bs.Name[strings.LastIndex(bs.Name, ": ")+2:]
if t == EvTastendruckLang {
bs.Type = EvTastendruckLang
} else if t == EvTastendruckKurz {
bs.Type = EvTastendruckKurz
}
b.Buttons[i] = bs
} else {
fmt.Println("Unknown Button-Type: " + bs.Name)
}
}
b.device = d
return b, nil
}