def __init__(self, scan_addr=0, sec=3):

        self.found = False
        print("Start scanning.")
        self.service = BeaconService("hci0")
        self.devices = self.service.scan(sec)
        self.print_device(scan_addr)
        print("Done scanning.")
Beispiel #2
0
    def __init__(self, sec=5):
        self.my_uuid = "11111111-2222-3333-4444-555555555555"
        self.my_major = 1
        self.my_minor = 1
        self.my_txpower = 1
        self.my_interval = 200

        self.service = BeaconService("hci0")
        self.advertise(sec)
Beispiel #3
0
class MyAdvertising(object):
    '''Beacon advertising class'''
    def __init__(self, sec=5):
        self.my_uuid = "11111111-2222-3333-4444-555555555555"
        self.my_major = 1
        self.my_minor = 1
        self.my_txpower = 1
        self.my_interval = 200

        self.service = BeaconService("hci0")
        self.advertise(sec)

    def advertise(self, sec=5):
        print("start Advertising.")
        self.service.start_advertising(self.my_uuid, self.my_major,
                                       self.my_minor, self.my_txpower,
                                       self.my_interval)
        #service.start_advertising("11111111-2222-3333-4444-555555555555",1,1,1,200)

        time.sleep(sec)
        self.service.stop_advertising()

        print("Done Advertising.")
class MyScanning(object):
    '''Beacon Scanning class'''
    def __init__(self, scan_addr=0, sec=3):

        self.found = False
        print("Start scanning.")
        self.service = BeaconService("hci0")
        self.devices = self.service.scan(sec)
        self.print_device(scan_addr)
        print("Done scanning.")

    def __str__(self):
        ret = "No"
        if (self.found == True):
            ret = "Yes"

        return ret

    def print_device(self, scan_addr):

        print("Result")
        #       for address,name in list(self.devices.items()):
        #           print ("name:{}, address:{}".format(name,address))

        for addr, data in list(self.devices.items()):
            my_addr = addr
            my_uuid = data[0]
            my_major = data[1]
            my_minor = data[2]
            my_power = data[3]
            my_rssi = data[4]

            print ("Beacon: Addr={ADDR} uuid={UUID} ver={MAJOR}.{MINOR} txpower={PWR} rssi={RSSI}"\
             .format(ADDR=my_addr,UUID=my_uuid,MAJOR=my_major,MINOR=my_minor,PWR=my_power,RSSI=my_rssi) )

            if (scan_addr != 0 and scan_addr == my_addr):
                self.found = True
Beispiel #5
0
def main():
    ser = serial.Serial('/dev/ttyACM0', 9600)
    server_sock = BluetoothSocket(RFCOMM)
    server_sock.bind(("", PORT_ANY))
    server_sock.listen(1)

    port = server_sock.getsockname()[1]

    uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

    advertise_service(
        server_sock,
        "AquaPiServer",
        service_id=uuid,
        service_classes=[uuid, SERIAL_PORT_CLASS],
        profiles=[SERIAL_PORT_PROFILE],
        #                   protocols = [ OBEX_UUID ]
    )

    print("Waiting for connection on RFCOMM channel %d" % port)
    client_sock, client_info = server_sock.accept()
    print("Accepted connection from ", client_info)
    client_sock.send("connect")
    client_sock.setblocking(0)
    client_sock.settimeout(0.5)
    command = ""
    cnt = 0
    loglist = []
    data = ""
    flag = 0
    while True:
        try:
            data = client_sock.recv(512)
            data = data.decode()
        except:
            if flag == 0:
                print("time out")
                continue

        print(data)

        if flag == 0:
            flag = 1

        if data == "start":

            print("GGGG")
            service = BeaconService("hci0")
            devices = service.scan(2)
            for address, beacon_data in list(devices.items()):
                b = Beacon(beacon_data, address)

            if len(loglist) < 3:
                loglist.append(b._rssi)
                cnt += 1
            else:
                loglist[cnt % 3] = b._rssi
                cnt += 1
            x = sum(loglist) / 3

            RSSI = 0.9 * x + 0.1 * b._rssi
            #print(RSSI,'rssi')
            calculate = RSSI
            #calculate = (sum(loglist)-max(loglist)-min(loglist))/8
            #print('rssi',calculate)
            command = "g"
            if RSSI < -80 and command == "g":
                command = "g"
                #print(command)
                ser.writelines('g')
                if b._rssi > -75:
                    command = "s"
                    #print(command)
                    ser.writelines('s')
            else:
                command = "s"
                #print(command)
        elif data == "l":
            print('l')
            data = "start"
            ser.writelines('l')
        elif data == "r":
            print('r')
            ser.writelines('r')
            data = "start"
        elif data == "end":
            print('end')
            flag = 0
            client_sock.close()
            server_sock.close()
            break

        ## only turn when close

        #print('s',loglist)

        #ser.writelines(command)
        #print(command,loglist)
        #else : ser.writelines('g')
        #print ("send [%s]" % tempchar)

        #else :
    #except IOError:
    #pass

    #client_sock.close()
    #server_sock.close()
    print("all done")
# Copyright (C) 2014, Oscar Acena <*****@*****.**>
# This software is under the terms of Apache License v2 or later.

from gattlib import BeaconService

class Beacon(object):

    def __init__(self, data, address):
        self._uuid = data[0]
        self._major = data[1]
        self._minor = data[2]
        self._power = data[3]
        self._rssi = data[4]
        self._address = address

    def __str__(self):
        ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\
                " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\
                .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major,
                        MINOR=self._minor, POWER=self._power, RSSI=self._rssi)
        return ret

service = BeaconService("hci0")
devices = service.scan(2)

for address, data in list(devices.items()):
    b = Beacon(data, address)
    print(b)

print("Done.")
        ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\
                " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\
                .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major,
                        MINOR=self._minor, POWER=self._power, RSSI=self._rssi)
        return ret


#service = BeaconService("hci0")
#devices = service.scan(2)
loglist = []
cnt = 0
RSSI = 0
w = 0.9
while True:

    service = BeaconService("hci0")
    devices = service.scan(2)

    for address, data in list(devices.items()):
        #b = Beacon(data, address)
        b = Beacon(data, address)
        #l = math.log(abs(b._rssi))
        print(b._address, b._rssi)

    #print("Done.")
    #print(b._address, b._rssi)

    #command = raw_input("command \n")
    if len(loglist) < 3:
        loglist.append(b._rssi)
        cnt += 1
#!/usr/bin/python
# -*- mode: python; coding: utf-8 -*-

# Copyright (C) 2014, Oscar Acena <*****@*****.**>
# This software is under the terms of Apache License v2 or later.

from gattlib import BeaconService
import time

service = BeaconService("hci0")

service.start_advertising("11111111-2222-3333-4444-555555555555",
            1, 1, 1, 200)
time.sleep(5)
service.stop_advertising()

print("Done.")
from gattlib import DiscoveryService, BeaconService

service = DiscoveryService("Automatic Lights")
devices = service.discover(1)

for addr, name in devices.items():
    print("name: {}, addr : {}".format(name, addr))

print(devices)

service = BeaconService()
x = service.scan(15)
print(x)
Beispiel #10
0
class Beacon(object):
    def __init__(self, data, address):
        self._uuid = data[0]
        self._major = data[1]
        self._minor = data[2]
        self._power = data[3]
        self._rssi = data[4]
        self._address = address

    def __str__(self):
        ret = "Beacon: address:{ADDR} uuid:{UUID} major:{MAJOR}"\
                " minor:{MINOR} txpower:{POWER} rssi:{RSSI}"\
                .format(ADDR=self._address, UUID=self._uuid, MAJOR=self._major,
                        MINOR=self._minor, POWER=self._power, RSSI=self._rssi)
        return ret


service = BeaconService("hci0")


def scan():
    devices = service.scan(1)
    for address, data in list(devices.items()):
        b = Beacon(data, address)
        print(b)


while True:
    scan()
Beispiel #11
0
#!/usr/bin/python3
# -*- mode: python; coding: utf-8 -*-

# Copyright (C) 2014, Oscar Acena <*****@*****.**>
# This software is under the terms of Apache License v2 or later.

from gattlib import BeaconService
import time

service = BeaconService("hci0")

service.start_advertising("11111111-2222-3333-4444-555555555555", 1, 1, 1, 200)
time.sleep(5)
service.stop_advertising()

print("Done.")
Beispiel #12
0
def main():
    server_sock = BluetoothSocket(RFCOMM)
    server_sock.bind(("", PORT_ANY))
    server_sock.listen(1)

    port = server_sock.getsockname()[1]
    global camera
    camera = picamera.PiCamera()

    uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

    advertise_service(
        server_sock,
        "AquaPiServer",
        service_id=uuid,
        service_classes=[uuid, SERIAL_PORT_CLASS],
        profiles=[SERIAL_PORT_PROFILE],
        #                   protocols = [ OBEX_UUID ]
    )

    print("Waiting for connection on RFCOMM channel %d" % port)

    client_sock, client_info = server_sock.accept()
    print("Accepted connection from ", client_info)

    command = ""
    cnt = 0
    loglist = []
    data = ""
    flag = 0

    prev_data = ""

    while True:

        try:
            data = client_sock.recv(1024)
            data = data.decode()
            print(data, "AAAAAAAAA")

        except:
            ser.flushInput()
            read_serial = ser.readline()
            uu_dist = read_serial[:-2]
            try:
                u_dist = float(uu_dist)
            except:
                u_dist = 800.0

            if flag == 0:
                print("time out")
                continue

        # print(data, type(data))

        if flag == 0:
            flag = 1
        if data == "cam":
            client_sock.setblocking(2)
            # client_sock.settimeout(0)
            print('running')
            prev_data = "cam"

            data_machine = machine()
            myfile = open('cam.jpg', 'rb')
            sbytes = myfile.read()
            file_size = str(len(sbytes))
            client_sock.send(file_size)
            client_sock.sendall(sbytes)
            # client_sock.send(b'end')
            client_sock.send(data_machine)

        # print("data:", data)
        print(data, "BBBBBBBBB")

        if data == "start":
            prev_data = "start"
            client_sock.setblocking(0)
            client_sock.settimeout(0.1)

            if (flag == 0 or flag == 1):
                ser.flushInput()
                read_serial = ser.readline()
                uu_dist = read_serial[:-2]
                try:
                    u_dist = float(uu_dist)
                except:
                    u_dist = 800.0
                flag = 2
                command = "g"
                ser.writelines('g')

            service = BeaconService("hci0")

            try:
                for i in range(10):
                    devices = service.scan(2)
                    if devices != {}:
                        break
                prev_devices = devices

            except:
                devices = prev_devices

            for address, beacon_data in list(devices.items()):
                b = Beacon(beacon_data, address)

            print("prev : ", command)

            if command == "g":
                if u_dist < 600:
                    command = "s"
                    ser.writelines('s')
            else:
                if b._rssi < -75 and u_dist >= 600:
                    command = "g"
                    ser.writelines('g')

            print(b._rssi, u_dist, command)

        elif data == "l" and prev_data == "start":
            print('left')
            data = "start"
            ser.writelines('l')
        elif data == "r" and prev_data == "start":
            print('right')
            ser.writelines('r')
            data = "start"
        elif data == "end":
            print('end')
            flag = 0
            ser.writelines('s')
            break
        else:
            data = "start"

    print("disconnected")

    client_sock.close()
    server_sock.close()
    print("all done")