mirror of
https://github.com/nikdoof/hapz2m.git
synced 2026-01-30 13:58:17 +00:00
There doesn't seem to be any distinction in Z2M between occupancy and motion sensors, but HomeKit has separate types. Most of the sensors are PIR, so they are technically motion sensors instead of occupancy sensors. There are of course _real_ occupancy sensors like mmWave, but we'll deal with those when we get there.
37 lines
834 B
Go
37 lines
834 B
Go
package hapz2m
|
|
|
|
import (
|
|
"github.com/brutella/hap/accessory"
|
|
"github.com/brutella/hap/service"
|
|
)
|
|
|
|
// there isn't a distinction between motion and occupancy sensors in z2m,
|
|
// but most sensors are PIR, so they are technically motion sensors
|
|
|
|
func createMotionServices(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 == "binary" && exp.Name == "occupancy":
|
|
exp := exp // create a copy
|
|
|
|
s := service.NewMotionSensor()
|
|
|
|
svcs = append(svcs, s.S)
|
|
exposes = append(exposes, &ExposeMapping{&exp, s.MotionDetected.C, nil})
|
|
}
|
|
}
|
|
|
|
return accessory.TypeSensor, svcs, exposes, nil
|
|
}
|
|
|
|
func init() {
|
|
RegisterCreateServiceHandler(createMotionServices)
|
|
}
|