示例#1
0
    def send(self, command, parameters=None):
        """Build and send the given command."""
        if self._devtype is None or self._serial is None:
            self.__enter__()  # when called outside of cm, initialize.

        cmd = {
            "id": self._id,
            "method": command,
        }

        if parameters:
            cmd["params"] = parameters

        header = {
            'length': 0,
            'unknown': 0x00000000,
            'devtype': self._devtype,
            'serial': self._serial,
            'ts': datetime.datetime.utcnow()
        }

        msg = {
            'data': {
                'value': cmd
            },
            'header': {
                'value': header
            },
            'checksum': 0
        }
        ctx = {'token': self.token}
        m = Message.build(msg, ctx)
        _LOGGER.debug("%s:%s >>: %s" % (self.ip, self.port, cmd))
        if self.debug > 1:
            _LOGGER.debug("send (timeout %s): %s", self._timeout,
                          Message.parse(m, ctx))

        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.settimeout(self._timeout)

        try:
            s.sendto(m, (self.ip, self.port))
        except OSError as ex:
            _LOGGER.error("failed to send msg: %s" % ex)
            raise DeviceException from ex

        try:
            data, addr = s.recvfrom(1024)
            m = Message.parse(data, ctx)
            if self.debug > 1:
                _LOGGER.debug("recv: %s" % m)
            _LOGGER.debug(
                "%s:%s (ts: %s) << %s" %
                (self.ip, self.port, m.header.value.ts, m.data.value))
            return m.data.value["result"]
        except OSError as ex:
            _LOGGER.error("got error when receiving: %s", ex)
            raise DeviceException from ex
示例#2
0
    def send(self, command, parameters=None):
        """Build and send the given command."""
        cmd = {
            "id": self._id,
            "method": command,
        }

        if parameters:
            cmd["params"] = parameters

        header = {
            'length': 0,
            'unknown': 0x00000000,
            'devtype': 0x02f2,
            'serial': 0xa40d,
            'ts': datetime.datetime.utcnow()
        }

        msg = {
            'data': {
                'value': cmd
            },
            'header': {
                'value': header
            },
            'checksum': 0
        }
        m = Message.build(msg)
        _LOGGER.debug("%s:%s >>: %s" % (self.ip, self.port, cmd))
        if self.debug > 1:
            _LOGGER.debug("send (timeout %s): %s", self._timeout,
                          Message.parse(m))

        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.settimeout(self._timeout)

        try:
            s.sendto(m, (self.ip, self.port))
        except Exception as ex:
            _LOGGER.error("failed to send msg: %s" % ex)

        try:
            data, addr = s.recvfrom(1024)
            m = Message.parse(data)
            if self.debug > 1:
                _LOGGER.debug("recv: %s" % m)
            _LOGGER.debug(
                "%s:%s (ts: %s) << %s" %
                (self.ip, self.port, m.header.value.ts, m.data.value))
            return m.data.value["result"]
        except Exception as ex:
            _LOGGER.error("got error when receiving: %s" % ex)
            raise