Example #1
0
func (h *WT450ProtocolHandler) OnRead(data api.ReadRequest) {
	parsed, err := utils.ParseThingFuSerialData(data.GetPayload().(string))
	if err != nil {
		log.Println(err)
		return
	}

	val, _ := strconv.Atoi(parsed["Data"].(string))
	ch := val >> 26
	thing, service, err := h.getThing(strconv.Itoa(ch))

	if err == nil {
		factory := h.GetFactory()
		thingManager := h.GetThingManager()

		drv := factory.CreateThingAdapter("433mhz-wt450")

		go func() {
			data.Put("channel", ch)
			data.Put("dhtdata", val)

			handler := thingManager.GetProtocolHandlerForThing(thing)
			state := drv.OnRead(thing, service, data, handler)

			lastEvent := service.LastEvent
			desc := thing.Descriptor
			if utils.TimeWithinThreshold(lastEvent, desc.EventUpdateBuffer, 5000) {
				service.UpdateLastEvent(time.Now())
				thingManager.SaveThing(*thing)

				thingManager.Handle(thing, service, state)
			}
		}()
	}
}