def handleDeviceCall(self, deviceId, payload):
deviceIdHex = binascii.hexlify(deviceId)
self.logger.debug("Handling request from device {0} with payload {1}".format(deviceIdHex, payload))
payloadDict = json.loads(payload)
session = self.service.sessions[deviceId]
model = DeviceModel().loadFromSession(session, self.deviceConfig, payloadDict)
if "image" in payloadDict:
imageType = payloadDict.get("type", "jpg")
imageData = base64.b64decode(payloadDict["image"])
fn = "{0}.{1}".format(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'), imageType)
imageFile = os.path.join(self.getDeviceFolder(deviceIdHex, "images"), fn)
self.logger.info("Received {0} bytes of image data from device {1} - saving to {2}".format(len(imageData), deviceIdHex, imageFile))
with open(imageFile, 'wb+') as f:
f.write(imageData)
model.newImageUrl = "/upload/{0}/images/{1}".format(deviceIdHex, fn)
if "values" in payloadDict:
for variable, value in payloadDict["values"].items():
self.database.save(deviceIdHex, variable, session.protocol, session.clientAddr[0], session.lastUpdateTime, value)
with session.lock:
model.saveTrends(self.trends)
model.computeTrends(self.trends)
self.webServer.websocketSend(model.toJSON())
评论列表
文章目录