mirror of
https://github.com/nikdoof/hapz2m.git
synced 2026-01-29 22:38:23 +00:00
This should allow the ExposeMapping struct to be changed without constantly impacting its callers.
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package hapz2m
|
|
|
|
import (
|
|
"github.com/brutella/hap/accessory"
|
|
"github.com/brutella/hap/characteristic"
|
|
"github.com/brutella/hap/service"
|
|
|
|
"regexp"
|
|
)
|
|
|
|
var outletRegex = regexp.MustCompile(`(?i)\boutlet\b`)
|
|
|
|
func createSwitchServices(dev *Device) (byte, []*service.S, []*ExposeMapping, error) {
|
|
var svcs []*service.S
|
|
var exposes []*ExposeMapping
|
|
|
|
for _, exp := range dev.Definition.Exposes {
|
|
if exp.Ignored() {
|
|
continue
|
|
}
|
|
|
|
switch {
|
|
case exp.Type == "switch" && len(exp.Features) > 0:
|
|
exp := exp // create a copy
|
|
|
|
f := exp.Features[0]
|
|
if f.Name == "state" && f.Type == "binary" && f.IsStateSetGet() {
|
|
sw := service.NewSwitch()
|
|
|
|
// add a name/label for this switch
|
|
n := characteristic.NewName()
|
|
n.SetValue(f.Endpoint)
|
|
sw.AddC(n.C)
|
|
|
|
svcs = append(svcs, sw.S)
|
|
exposes = append(exposes, NewExposeMapping(&f, sw.On.C))
|
|
}
|
|
}
|
|
}
|
|
|
|
accTyp := accessory.TypeSwitch
|
|
if outletRegex.MatchString(dev.Definition.Description) {
|
|
accTyp = accessory.TypeOutlet
|
|
}
|
|
|
|
return accTyp, svcs, exposes, nil
|
|
}
|
|
|
|
func init() {
|
|
RegisterCreateServiceHandler(createSwitchServices)
|
|
}
|