Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
 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
Ejemplo n.º 5
0
'''
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)
Ejemplo n.º 6
0
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'):
Ejemplo n.º 7
0
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...")
Ejemplo n.º 8
0
# 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()