def my_data_received_callback(self,xbee_message): address = xbee_message.remote_device.get_64bit_addr() data = xbee_message.data.decode("utf8") print("Received data from %s: %s" % (address, data)) #remote_dev = RemoteXBeeDevice(self.device, address) #self.device.send_data(remote_dev, "Hello XBee!") threading.Thread(target=self.append, args=[address,data]).start() ATcommand1 = RemoteATCommandPacket(1,address,XBee16BitAddress.from_hex_string("FFFE"),2,"P2",bytearray([0x05])) #raw1 = bytearray([0x7E,0x00,0x10,0x17,0x01,0x00,0x13,0xA2,0x00,0x41,0x47,0x9E,0xC1,0xFF,0xFE,0x02,0x50,0x32,0x05,0xC5]) #ATpacket1 = RemoteATCommandPacket.create_packet(raw1, OperatingMode.API_MODE) #self.device.send_packet(ATcommand1) #raw2 = bytearray([0x7E,0x00,0x10,0x17,0x01,0x00,0x13,0xA2,0x00,0x41,0x47,0x9E,0xC1,0xFF,0xFE,0x02,0x50,0x32,0x04,0xC6]) #ATpacket2 = RemoteATCommandPacket.create_packet(raw2, OperatingMode.API_MODE) ATcommand2 = RemoteATCommandPacket(1,address,XBee16BitAddress.from_hex_string("FFFE"),2,"P2",bytearray([0x04])) #self.device.send_packet(ATcommand2) ATcommand3 = RemoteATCommandPacket(1,address,XBee16BitAddress.from_hex_string("FFFE"),2,"D4",bytearray([0x05])) ATcommand4 = RemoteATCommandPacket(1,address,XBee16BitAddress.from_hex_string("FFFE"),2,"D4",bytearray([0x04])) for i in range(10): self.device.send_packet(ATcommand1) self.device.send_packet(ATcommand4) time.sleep(1) self.device.send_packet(ATcommand2) self.device.send_packet(ATcommand3) time.sleep(1)
def reset(self): self.id = "unknown" self.address = XBee16BitAddress.from_hex_string("0x0000") self.received_count = 0 self.sent_count = 0 self.remote = None self.runtime = 0
def __init__(self, port_name, remote_addr, callback_var): self.con_device = XBD.XBeeDevice(port_name, BAUD_RATE) self.remote_device = XBD.RemoteXBeeDevice(self.con_device, XBee16BitAddress.from_hex_string(remote_addr)) self.callback = callback_var self.running = False self.con_device.open() self.con_device.flush_queues()
def mandar_mensage(self, dir_64, msg=PING, dir_16=None) -> TransmitStatusPacket: """ Manda el mensaje al destinatario por defecto. """ ack = None # Transformamos el mensaje recibido en un string tratable msg = str(msg) # Recuperamos la dirección del dispositivo remoto en formato de 64 bits high = None try: dir_64 = XBee64BitAddress.from_hex_string(dir_64) high = dir_64 or self.remote_zigbee.get_64bit_addr() except: high = XBee64BitAddress.UNKNOWN_ADDRESS # Recuperamos la dirección del dispositivo remoto en 16 bits o la marcamos como desconocida low = None try: low = XBee16BitAddress.from_hex_string( dir_16) or self.remote_zigbee.get_16bit_addr() except: low = XBee16BitAddress.UNKNOWN_ADDRESS try: # Intentamos mandar el mensaje ## Versión fragmentando el paquete ## Versión sin fragmentar el paquete ack = super().send_data_64_16(high, low, msg) # self.logger.debug(format(ack)) if ack.transmit_status is not TransmitStatus.SUCCESS: self.logger.warning( "Algo no fue bien mandando el mensaje:\n{}\nError:\t{}". format(msg, ack)) except Exception as e: error = "Se ha encontrado un error al mandar el mensaje\n\t" + str( e) self.logger.error(error) raise EOFError(error) # ack = super().send_data_64_16(high, low, msg) # Añadir código para el reintento else: # TODO Borrar esta traza de control self.logger.debug("Mandado mensaje:\t" + msg) return ack
''' Created on Feb 18, 2019 @author: Jake ''' from digi.xbee.devices import XBeeDevice, RemoteXBeeDevice import RobotInstruction from builtins import input from digi.xbee.models.address import XBee16BitAddress, XBee64BitAddress COMport = 'COM9' baud_rate = 9600 remote_address = '0008' transmitDevice = XBeeDevice(COMport,baud_rate) remoteDevice = RemoteXBeeDevice(transmitDevice, XBee64BitAddress.from_hex_string(remote_address), XBee16BitAddress.from_hex_string(remote_address)) def main(): transmitDevice.close() print('transmitting to: ') print(remoteDevice.get_16bit_addr()) cont = 'y' while(cont != 'q'): try: transmitDevice.open() instruction = getCommand() #print(hex(instruction)) sendInstructions(instruction)
from digi.xbee.models.message import XBeeMessage from digi.xbee.models.address import XBee16BitAddress, XBee64BitAddress from DisplayManager import DisplayManager import sys try: COMport = sys.argv[1] except IndexError: COMport = 'COM9' baud_rate = 9600 remote_address = '0010' transmitDevice = XBeeDevice(COMport, baud_rate) remoteDevice = RemoteXBeeDevice( transmitDevice, XBee64BitAddress.from_hex_string(remote_address), XBee16BitAddress.from_hex_string(remote_address)) def main(): xbeeCommunication() def xbeeCommunication(): transmitDevice.close() print('transmitting to: ') print(remoteDevice.get_16bit_addr()) cont = 'y' pb = PB.PathBuilder() while (cont != 'n'):
def run_server(): """ Xbee Server :return: """ # INIT SERVER print("starting run_server...") UpdaWear.reset() MessageBuffer.clear() server = Raw802Device(PORT, BAUD_RATE) UpdaWear.id = "UPDA-WEAR-1" UpdaWear.address = XBee16BitAddress.from_hex_string(WEAR_16B_ADDR) UpdaWear.remote = RemoteRaw802Device(server, UpdaWear.address) instance_manager = None exit_message = bytearray([0x05, 0x00]) try: # might not want this if not os.path.exists('./data'): print("unable to find './data' to store information") raise KeyboardInterrupt # get data count to make a new file num_patients = len([name for name in os.listdir('./data')]) instance_manager = InstanceLoader(num_patients) instance_manager.start() # start the thread server.open() def msg_callback(message): UpdaWear.received_count = UpdaWear.received_count + 1 # register the device # print("{} >> {}".format(server.get_16bit_addr(), message.data.decode())) # pass information off to a buffer # store the data (byte array) with BufferLock: MessageBuffer.append(message.data) server.add_data_received_callback(msg_callback) print("press enter to stop run_server...") input() except KeyboardInterrupt: print() # add a space so everything is nearly on a different line except serial.serialutil.SerialException: print("Unable to open {}".format(PORT)) finally: if instance_manager is not None: # close instance manager with BufferLock: MessageBuffer.append(exit_message) instance_manager.join() if server is not None and server.is_open(): server.close() print("closing run_server...")
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. from digi.xbee.devices import RemoteXBeeDevice, XBeeDevice from digi.xbee.models.address import XBee64BitAddress, XBee16BitAddress # TODO: Replace with the serial port where your local module is connected to. PORT = "COM1" # TODO: Replace with the baud rate of your local module. BAUD_RATE = 9600 ADDR_64_REMOTE_A = XBee64BitAddress.from_hex_string("0013A200AAAAAAAA") ADDR_64_REMOTE_B = XBee64BitAddress.from_hex_string("0013A200BBBBBBBB") ADDR_16_REMOTE_A = XBee16BitAddress.from_hex_string("AAAA") ADDR_16_REMOTE_A_2 = XBee16BitAddress.from_hex_string("BBBB") NODE_ID_REMOTE_A = "TEST" def main(): print(" +---------------------------------+") print(" | Add Devices to the Network Test |") print(" +---------------------------------+\n") device = XBeeDevice(PORT, BAUD_RATE) try: device.open()