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
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