コード例 #1
0
def create_message(msg_dict):
    """Create a message from a dictionary."""
    address = msg_dict.get("address")
    flags = int.from_bytes(unhexlify(msg_dict.get("flags")), "big")
    cmd1 = int.from_bytes(unhexlify(msg_dict.get("cmd1")), "big")
    cmd2 = int.from_bytes(unhexlify(msg_dict.get("cmd2", "00")), "big")
    if msg_dict.get("user_data") == "":
        user_data = None
    else:
        user_data_in = msg_dict.get("user_data")
        user_data = UserData()
        for k, v in user_data_in.items():
            val = int.from_bytes(unhexlify(v), "big")
            user_data[k] = val
    if msg_dict.get("ack") == "":
        ack = None
    else:
        ack = int.from_bytes(unhexlify(msg_dict.get("ack")), "big")
    if msg_dict.get("target") == "":
        target = None
    else:
        target = msg_dict.get("target")
    msg = create_std_ext_msg(
        address, flags, cmd1, cmd2, user_data=user_data, target=target, ack=ack
    )
    return DataItem(msg, 0.02)
コード例 #2
0
    async def test_receive_on_msg(self):
        """Test receiving an ON message."""
        async with async_protocol_manager() as protocol:
            last_topic = None

            def topic_received(cmd1,
                               cmd2,
                               target,
                               user_data,
                               hops_left,
                               topic=pub.AUTO_TOPIC):
                """Receive the OFF topic for a device."""
                nonlocal last_topic
                last_topic = topic.name

            address = random_address()
            byte_data = create_std_ext_msg(address,
                                           0x80,
                                           0x11,
                                           0xFF,
                                           target=Address("000001"))
            expected_topic = "{}.{}.on.broadcast".format(address.id, 1)
            pub.subscribe(topic_received, expected_topic)
            on_cmd = DataItem(byte_data, 0)
            data = [on_cmd]
            send_data(data, protocol.read_queue)
            await asyncio.sleep(0.05)
            assert last_topic == expected_topic
コード例 #3
0
def create_message(msg_dict, delay=0.1):
    """Create a message from a dictionary."""
    address = msg_dict.get("address")
    flags = msg_dict.get("flags")
    cmd1 = msg_dict.get("cmd1")
    cmd2 = msg_dict.get("cmd2")
    user_data = msg_dict.get("user_data")
    ack = msg_dict.get("ack")
    target = msg_dict.get("target")
    msg = create_std_ext_msg(
        address, flags, cmd1, cmd2, user_data=user_data, target=target, ack=ack
    )
    return DataItem(msg, delay)
コード例 #4
0
def create_message(msg_dict, delay=0.1):
    """Create a message from a dictionary."""
    address = msg_dict.get("address")
    for k in ["flags", "cmd1", "cmd2"]:
        if str(msg_dict.get(k)).startswith("0x"):
            msg_dict[k] = int.from_bytes(unhexlify(msg_dict[k][2:]), "big")
    for k in msg_dict["user_data"]:
        if str(msg_dict["user_data"][k]).startswith("0x"):
            msg_dict["user_data"][k] = int.from_bytes(
                unhexlify(msg_dict["user_data"][k][2:]), "big"
            )
    flags = msg_dict.get("flags")
    cmd1 = msg_dict.get("cmd1")
    cmd2 = msg_dict.get("cmd2")
    user_data = msg_dict.get("user_data")
    ack = msg_dict.get("ack")
    target = msg_dict.get("target")
    msg = create_std_ext_msg(
        address, flags, cmd1, cmd2, user_data=user_data, target=target, ack=ack
    )
    return DataItem(msg, delay)
コード例 #5
0
    async def test_receive_on_msg(self):
        """Test receiving an ON message."""
        topic_lock = asyncio.Lock()
        async with async_protocol_manager() as protocol:
            last_topic = None

            def topic_received(cmd1,
                               cmd2,
                               target,
                               user_data,
                               hops_left,
                               topic=pub.AUTO_TOPIC):
                """Receive the OFF topic for a device."""
                nonlocal last_topic
                last_topic = topic.name
                if topic_lock.locked():
                    topic_lock.release()

            address = random_address()
            byte_data = create_std_ext_msg(address,
                                           0x80,
                                           0x11,
                                           0xFF,
                                           target=Address("000001"))
            expected_topic = "{}.{}.on.broadcast".format(address.id, 1)
            pub.subscribe(topic_received, expected_topic)
            on_cmd = DataItem(byte_data, 0)
            data = [on_cmd]
            await topic_lock.acquire()
            send_data(data, protocol.read_queue)
            try:
                await asyncio.wait_for(topic_lock.acquire(), 2)
                assert last_topic == expected_topic
            except asyncio.TimeoutError:
                assert expected_topic is None
            if topic_lock.locked():
                topic_lock.release()