コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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