Beispiel #1
0
    def test_search_request(self):
        """Test parsing and streaming SearchRequest KNX/IP packet."""
        raw = (
            0x06,
            0x10,
            0x02,
            0x01,
            0x00,
            0x0E,
            0x08,
            0x01,
            0xE0,
            0x00,
            0x17,
            0x0C,
            0x0E,
            0x57,
        )
        xknx = XKNX()
        knxipframe = KNXIPFrame(xknx)
        knxipframe.from_knx(raw)

        assert isinstance(knxipframe.body, SearchRequest)
        assert knxipframe.body.discovery_endpoint == HPAI(
            ip_addr="224.0.23.12", port=3671
        )

        knxipframe2 = KNXIPFrame.init_from_body(
            SearchRequest(
                xknx, discovery_endpoint=HPAI(ip_addr="224.0.23.12", port=3671)
            )
        )

        assert knxipframe2.to_knx() == list(raw)
Beispiel #2
0
 def test_search_reqeust(self):
     """Test string representation of KNX/IP SearchRequest."""
     xknx = XKNX(loop=self.loop)
     search_request = SearchRequest(xknx)
     self.assertEqual(
         str(search_request),
         '<SearchRequest discovery_endpoint="<HPAI 224.0.23.12:3671 />" />')
Beispiel #3
0
    async def _search_interface(self, interface: str, ip_addr: str) -> None:
        """Send a search request on a specific interface."""
        logger.debug("Searching on %s / %s", interface, ip_addr)

        udp_client = UDPClient(
            self.xknx,
            (ip_addr, 0),
            (self.xknx.multicast_group, self.xknx.multicast_port),
            multicast=True,
        )

        udp_client.register_callback(
            partial(self._response_rec_callback, interface=interface),
            [KNXIPServiceType.SEARCH_RESPONSE],
        )
        await udp_client.connect()

        self._udp_clients.append(udp_client)

        (local_addr, local_port) = udp_client.getsockname()
        discovery_endpoint = HPAI(ip_addr=local_addr, port=local_port)

        search_request = SearchRequest(self.xknx,
                                       discovery_endpoint=discovery_endpoint)
        udp_client.send(KNXIPFrame.init_from_body(search_request))
Beispiel #4
0
    def test_search_request(self):
        """Test parsing and streaming SearchRequest KNX/IP packet."""
        raw = bytes.fromhex("06 10 02 01 00 0E 08 01 E0 00 17 0C 0E 57")
        knxipframe = KNXIPFrame()
        knxipframe.from_knx(raw)

        assert isinstance(knxipframe.body, SearchRequest)
        assert knxipframe.body.discovery_endpoint == HPAI(
            ip_addr="224.0.23.12", port=3671
        )

        knxipframe2 = KNXIPFrame.init_from_body(
            SearchRequest(discovery_endpoint=HPAI(ip_addr="224.0.23.12", port=3671))
        )

        assert knxipframe2.to_knx() == raw
Beispiel #5
0
 async def _send_search_requests(udp_transport: UDPTransport) -> None:
     """Send search requests on a specific interface."""
     await udp_transport.connect()
     discovery_endpoint = HPAI(*udp_transport.getsockname())
     # send SearchRequestExtended requesting needed DIBs
     search_request_extended = SearchRequestExtended(
         discovery_endpoint=discovery_endpoint,
         srps=[
             SRP.request_device_description([
                 DIBTypeCode.DEVICE_INFO,
                 DIBTypeCode.SUPP_SVC_FAMILIES,
                 DIBTypeCode.SECURED_SERVICE_FAMILIES,
                 DIBTypeCode.TUNNELING_INFO,
             ])
         ],
     )
     udp_transport.send(KNXIPFrame.init_from_body(search_request_extended))
     # send SearchRequest for Core-V1 devices
     search_request = SearchRequest(discovery_endpoint=discovery_endpoint)
     udp_transport.send(KNXIPFrame.init_from_body(search_request))
Beispiel #6
0
 def test_search_reqeust(self):
     """Test string representation of KNX/IP SearchRequest."""
     search_request = SearchRequest()
     assert (str(search_request) ==
             '<SearchRequest discovery_endpoint="0.0.0.0:0/udp" />')