func (d *Device) SetStateLabel(pkt *packet.Packet) error { l := stateLabel{} if err := pkt.DecodePayload(&l); err != nil { return err } common.Log.Debugf("Got label (%v): %+v\n", d.id, l.Label) newLabel := stripNull(string(l.Label[:])) if newLabel != d.label { d.label = newLabel if err := d.publish(common.EventUpdateLabel{Label: d.label}); err != nil { return err } } return nil }
func (d *Device) SetStateHostFirmware(pkt *packet.Packet) error { f := stateHostFirmware{} if err := pkt.DecodePayload(&f); err != nil { return err } common.Log.Debugf("Got firmware version (%d): %d", d.id, f.Version) d.RLock() version := d.firmwareVersion d.RUnlock() if f.Version != version { d.Lock() d.firmwareVersion = f.Version d.firmwareVersionString = f.String() d.Unlock() } return nil }
func (d *Device) SetStateLabel(pkt *packet.Packet) error { l := stateLabel{} if err := pkt.DecodePayload(&l); err != nil { return err } common.Log.Debugf("Got label (%d): %v", d.id, string(l.Label[:])) newLabel := stripNull(string(l.Label[:])) if newLabel != d.CachedLabel() { d.Lock() d.label = newLabel d.Unlock() if err := d.publish(common.EventUpdateLabel{Label: newLabel}); err != nil { return err } } return nil }
func New(addr *net.UDPAddr, requestSocket *net.UDPConn, timeout *time.Duration, retryInterval *time.Duration, reliable bool, pkt *packet.Packet) (*Device, error) { d := new(Device) d.init(addr, requestSocket, timeout, retryInterval, reliable) if pkt != nil { d.id = pkt.Target service := new(stateService) if err := pkt.DecodePayload(service); err != nil { return nil, err } d.address.Port = int(service.Port) } go d.handler() return d, nil }
func (d *Device) SetStatePower(pkt *packet.Packet) error { p := statePower{} if err := pkt.DecodePayload(&p); err != nil { return err } common.Log.Debugf("Got power (%v): %+v\n", d.id, d.power) if d.power != p.Level { d.Lock() d.power = p.Level d.Unlock() if err := d.publish(common.EventUpdatePower{Power: d.power > 0}); err != nil { return err } } return nil }
func (d *Device) SetStatePower(pkt *packet.Packet) error { p := statePower{} if err := pkt.DecodePayload(&p); err != nil { return err } common.Log.Debugf("Got power (%d): %d", d.id, d.power) state := p.Level > 0 if d.CachedPower() != state { d.Lock() d.power = p.Level d.Unlock() if err := d.publish(common.EventUpdatePower{Power: state}); err != nil { return err } } return nil }
func (g *Group) Parse(pkt *packet.Packet) error { var shouldUpdate, labelUpdate bool s := stateGroup{} if err := pkt.DecodePayload(&s); err != nil { return err } g.RLock() if s.UpdatedAt > g.updatedAt { shouldUpdate = true } g.RUnlock() if shouldUpdate { g.Lock() g.id = s.ID g.idEncoded = strings.Replace( base64.URLEncoding.EncodeToString(s.ID[:]), `=`, ``, -1, ) g.updatedAt = s.UpdatedAt if g.label != s.Label { g.label = s.Label labelUpdate = true } g.Unlock() if labelUpdate { if err := g.publish(common.EventUpdateLabel{Label: g.GetLabel()}); err != nil { return err } } } return nil }
func (l *Light) SetState(pkt *packet.Packet) error { s := &state{} if err := pkt.DecodePayload(s); err != nil { return err } common.Log.Debugf("Got light state (%v): %+v\n", l.id, s) if l.color != s.Color { l.Lock() l.color = s.Color l.Unlock() if err := l.publish(common.EventUpdateColor{Color: l.color}); err != nil { return err } } if l.power != s.Power { l.Lock() l.power = s.Power l.Unlock() if err := l.publish(common.EventUpdatePower{Power: l.power > 0}); err != nil { return err } } newLabel := stripNull(string(s.Label[:])) if newLabel != l.label { l.Lock() l.label = newLabel l.Unlock() if err := l.publish(common.EventUpdateLabel{Label: l.label}); err != nil { return err } } return nil }