def mea_dataFromSensor(data): fn_name = __name__ + "/" + str(sys._getframe().f_code.co_name) try: device_id = data["device_id"] except: verbose(2, "ERROR (", fn_name, ") - device_id not found") return False try: device_name = data["device_name"] interface_id = data["interface_id"] parameters = data["device_parameters"] parameters = parameters.strip().lower() params = mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") typeoftype = data["typeoftype"] api_key = data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - invalid data") return False if not "value" in params: verbose(2, "ERROR (", fn_name, ") - no value parameter") return False value = params["value"] mem_device = mea.getMemory(device_id) mem_interface = mea.getMemory("interface" + str(interface_id)) pdata = mea_utils.parseKeyValueDatasToDictionary( str(data['data']).strip().lower(), ";", "=") if value in pdata: v = pdata[value].lower() f = 0 if type(v) == str: try: f = float(v) except: if v in ["on", "off", "high", "low", "true", "false"]: f = v else: return False xplMsg = mea_utils.xplMsgNew("me", "*", "xpl-trig", "sensor", "basic") mea_utils.xplMsgAddValue(xplMsg, "device", device_name) mea_utils.xplMsgAddValue(xplMsg, "current", str(f)) mea.xplSendMsg(xplMsg) mea.interfaceAPI(api_key, "mea_writeData", "[[[" + device_name + "!OK]]]\n") return True return False
def mea_commissionningRequest(data): fn_name = sys._getframe().f_code.co_name if "interface_parameters" in data: mem = {} try: mem = mea.getMemory(data["interface_id"]) except: verbose(2, "ERROR (", fn_name, ") - can't acces share memory") return False sample_set = False paramsList = mea_utils.parseKeyValueDatasToList( data["interface_parameters"], ",", ":") if paramsList != None: for i in paramsList: numVal = -1 alphaVal = "" if i[0][0] != "#" and i[0][0] != "@": verbose(3, "ERROR (", fn_name, ") - syntaxe error :", i[0], "not a command, skipped") continue if i[1] != None: if i[1][0:2] == "0x": try: numVal = int(i[1], 16) except: alphaVal = i[1] elif i[1][0] == "$": (numVal, alphaVal) = getInternalVarValue(data, i[1]) else: try: numVal = int(i[1], 10) except: alphaVal = i[1] # commande AT ? if i[0][0] == "@": if len(i[0]) == 3: if numVal >= 0: ret = mea.sendXbeeCmd(data["ID_XBEE"], data["ADDR_H"], data["ADDR_L"], i[0][1:3].upper(), numVal) if ret == 0: verbose(5, "WARNING (", fn_name, ") - Transmission error for", i[0], "= ", numVal) else: ret = mea.sendXbeeCmd(data["ID_XBEE"], data["ADDR_H"], data["ADDR_L"], i[0][1:3].upper(), alphaVal) if ret == 0: verbose(5, "WARNING (", fn_name, ") - Transmission error for", i[0], "= ", alphaVal) else: verbose(9, "WARNING (", fn_name, ") - syntaxe error :", i[0], "not an at cmnd, skip") continue # commande special ? if i[0][0:2] == "#d": ret = config_IO(data, i[0], alphaVal, mem) continue if i[0] == "#set_dhdl": ret = config_DHDL(data, alphaVal) if ret == -1: verbose(5, "WARNING (", fn_name, ") - value error :", i[1], "not an xbee adress, skip") continue if i[0] == "#set_sleep": ret = config_sleep(data, numVal) continue if i[0] == "#set_name": ret = config_name(data, alphaVal) if ret == -1: verbose(5, "WARNING (", fn_name, ") - value error :", i[1], "not an xbee adress, skip") continue if i[0] == "#set_sample": sample_set = True config_sample(data, numVal) continue else: if len(i[0]) == 3: # ret=mea.sendXbeeCmd(data["ID_XBEE"], data["ADDR_H"], data["ADDR_L"], i[0][1:3].upper(), ""); ret = mea.interfaceAPI(api_key, "sendXbeeCmd", data["ADDR_H"], data["ADDR_L"], bytes(i[0][1:3].upper()), "") if ret == 0: verbose(3, "ERROR (", fn_name, ") - Transmission error for", i[0], "= ", numVal) enable_change_detection(data, mem) if sample_set == False: enable_sample(data, mem) return True else: return False else: return False
def mea_xplCmndMsg(data): fn_name = sys._getframe().f_code.co_name try: id_sensor = data["device_id"] parameters = data["device_parameters"] typeoftype = data["typeoftype"] api_key = data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - invalid data") return 0 mem = mea.getMemory(id_sensor) paramsDict = mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") x = data["xplmsg"] body = x["body"] target = "*" if "source" in x: target = x["source"] channel = -1 current = -1 if x["schema"] == "control.basic" and typeoftype == 1: try: if body["type"] == "output": if body["current"] == "high": current = 100 elif body["current"] == "low": current = 0 if current <> -1: channel = ord(paramsDict["channel"][0]) - ord('A') buf = bytearray() buf.append(0x01) buf.append(channel & 0b11111) buf.append(current & 0b1111111) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) try: if paramsDict["force_status"] == "yes": channel = ord(paramsDict["channel"][0]) - ord('A') buf = bytearray() buf.append(0x03) buf.append(channel & 0b11111) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't query device: ", str(e)) pass except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't create/send enocean packet: ", str(e)) return False elif x["schema"] == "sensor.request" and typeoftype == 0: if body["request"] == "current": try: buf = bytearray() channel = ord(paramsDict["channel"][0]) - ord('A') buf.append(0x03) buf.append(channel & 0b11111) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't query device: ", str(e)) return False else: verbose(2, "ERROR (", fn_name, ") - invalid request (", body["request"], ")") return False return True return False
def mea_xplCmndMsg(data): fn_name=sys._getframe().f_code.co_name try: id_sensor=data["device_id"] parameters=data["device_parameters"] api_key=data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - device_id not found") return 0 mem=mea.getMemory(id_sensor) paramsDict=mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") x=data["xplmsg"] body=x["body"] target="*" if "source" in x: target=x["source"] channel = -1; current = -1; if x["schema"]=="control.basic": try: if body["type"] == "output": if body["current"]=="high": current = 100; elif body["current"]=="low": current = 0; if paramsDict["channel"]=="A": channel = 0; elif paramsDict["channel"]=="B": channel = 1; if channel <> -1 and current <> -1: buf=bytearray(); buf.append(0x01) buf.append(channel & 0b11111) buf.append(current & 0b1111111) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't create enocean packet ", str(e)) return False elif x["schema"]=="sensor.request": try: xplMsg=mea_utils.xplMsgNew("me", target, "xpl-stat", "sensor", "basic") mea_utils.xplMsgAddValue(xplMsg,"device", data["device_name"].lower()) if body["request"]=="current": mea_utils.xplMsgAddValue(xplMsg,"current",mem["current"]) elif body["request"]=="last": mea_utils.xplMsgAddValue(xplMsg,"last",mem["last"]) else: verbose(2, "ERROR (", fn_name, ") - invalid request (", body["request"],")") return False mea_utils.xplMsgAddValue(xplMsg,"type","input") except: verbose(2, "ERROR (", fn_name, ") - can't create xpl message") return False mea.xplSendMsg(xplMsg) return True return False
def mea_xplCmndMsg(data): fn_name = __name__ + "/" + str(sys._getframe().f_code.co_name) verbose(9, "DEBUG (", fn_name, ") data = ", data) try: id_device = data["device_id"] except: verbose(2, "ERROR (", fn_name, ") - device_id not found") return False try: device_name = data["device_name"] interface_id = data["interface_id"] parameters = data["device_parameters"] parameters = parameters.strip().lower() params = mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") typeoftype = data["typeoftype"] api_key = data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - parameters error") return False mem_device = mea.getMemory(id_device) mem_interface = mea.getMemory("interface" + str(interface_id)) x = data["xplmsg"] body = x["body"] target = "*" if "source" in x: target = x["source"] if x["msgtype"] != 'xpl-cmnd': return False if x["schema"] == "sensor.request": if "request" in body: if body["request"] == "current": mea.interfaceAPI(api_key, "mea_writeData", "[[[" + device_name + "?current]]]\n") return True return False elif x["schema"] == "control.basic": if typeoftype != 1: verbose(2, "ERROR (", fn_name, ") - device (" + devicename + ") is not an output") return False if not "current" in body: verbose(2, "ERROR (", fn_name, ") - no current in body") return False v = body["current"].lower() try: f = float(v) except: if v in ["on", "off", "high", "low", "true", "false"]: f = v else: verbose(2, "ERROR (", fn_name, ") - invalid current (" + v + ") value") return False mea.interfaceAPI(api_key, "mea_writeData", "[[[" + device_name + "=" + str(f) + "]]]\n") return True return False
def mea_xplCmndMsg(data): fn_name=sys._getframe().f_code.co_name print data try: id_sensor=data["device_id"] parameters=data["device_parameters"] # id_driver=data["driver_id"] api_key=data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - device_id not found") return 0 mem=mea.getMemory(id_sensor) paramsDict=mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") x=data["xplmsg"] body=x["body"] target="*" if "source" in x: target=x["source"] channel = -1; current = -1; if x["schema"]=="control.basic": try: if body["type"] == "output": if body["current"]=="high": current = 100; elif body["current"]=="low": current = 0; if paramsDict["channel"]=="A": channel = 0; elif paramsDict["channel"]=="B": channel = 1; if channel <> -1 and current <> -1: buf=bytearray(); buf.append(0x01) buf.append(channel & 0b11111) buf.append(current & 0b1111111) # mea.sendEnoceanRadioErp1Packet(data["ID_ENOCEAN"], 0xD2, 0, data["ENOCEAN_ADDR"], buf) # mea.interfaceAPI(id_driver, api_key, "sendEnoceanRadioErp1Packet", data["ID_ENOCEAN"], 0xD2, 0, data["ENOCEAN_ADDR"], buf) # mea.interfaceAPI(id_driver, api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't create enocean packet ", str(e)) return False elif x["schema"]=="sensor.request": try: xplMsg=mea_utils.xplMsgNew("me", target, "xpl-stat", "sensor", "basic") mea_utils.xplMsgAddValue(xplMsg,"device", data["device_name"].lower()) if body["request"]=="current": mea_utils.xplMsgAddValue(xplMsg,"current",mem["current"]) elif body["request"]=="last": mea_utils.xplMsgAddValue(xplMsg,"last",mem["last"]) else: verbose(2, "ERROR (", fn_name, ") - invalid request (", body["request"],")") return False mea_utils.xplMsgAddValue(xplMsg,"type","input") except: verbose(2, "ERROR (", fn_name, ") - can't create xpl message") return False mea.xplSendMsg(xplMsg) return True return False
def mea_xplCmndMsg(data): fn_name=sys._getframe().f_code.co_name try: id_sensor=data["device_id"] parameters=data["device_parameters"] typeoftype=data["typeoftype"] # id_driver=data["driver_id"] api_key=data["api_key"] except: verbose(2, "ERROR (", fn_name, ") - invalid data") return 0 # verbose(1, mea.interfaceAPI(id_driver, api_key, "test")) mem=mea.getMemory(id_sensor) paramsDict=mea_utils.parseKeyValueDatasToDictionary(parameters, ",", ":") x=data["xplmsg"] body=x["body"] target="*" if "source" in x: target=x["source"] channel = -1; current = -1; if x["schema"]=="control.basic" and typeoftype == 1: try: if body["type"] == "output": if body["current"]=="high": current = 100; elif body["current"]=="low": current = 0; if current <> -1: channel = ord(paramsDict["channel"][0]) - ord('A'); buf=bytearray() buf.append(0x01) buf.append(channel & 0b11111) buf.append(current & 0b1111111) # mea.sendEnoceanRadioErp1Packet(data["ID_ENOCEAN"], 0xD2, 0, data["ENOCEAN_ADDR"], buf) # mea.interfaceAPI(id_driver, api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) try: if paramsDict["force_status"]=="yes": channel = ord(paramsDict["channel"][0]) - ord('A'); buf=bytearray() buf.append(0x03) buf.append(channel & 0b11111) # mea.sendEnoceanRadioErp1Packet(data["ID_ENOCEAN"], 0xD2, 0, data["ENOCEAN_ADDR"], buf) # mea.interfaceAPI(id_driver, api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) mea.interfaceAPI(api_key, "sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't query device: ", str(e)) pass except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't create/send enocean packet: ", str(e)) return False elif x["schema"]=="sensor.request" and typeoftype == 0: if body["request"]=="current": try: buf=bytearray() channel = ord(paramsDict["channel"][0]) - ord('A'); buf.append(0x03); buf.append(channel & 0b11111); # mea.sendEnoceanRadioErp1Packet(data["ID_ENOCEAN"], 0xD2, 0, data["ENOCEAN_ADDR"], buf) # mea.interfaceAPI(id_driver, api_key,"sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) mea.interfaceAPI(api_key,"sendEnoceanRadioErp1Packet", 0xD2, 0, data["ENOCEAN_ADDR"], buf) except Exception as e: verbose(2, "ERROR (", fn_name, ") - can't query device: ", str(e)) return False else: verbose(2, "ERROR (", fn_name, ") - invalid request (", body["request"],")") return False return True return False