def calculateDistanceWithRSSI(rssi,beaconnumber): beacon = conf.BeaconList[beaconnumber]; txPower = beacon[7] ratio_db = txPower - rssi; ratio_linear = pow(10, ratio_db / 10); r = pow(ratio_linear, .5); return r def getXYFrom3Beacons(beaconnumbera, beaconnumberb, beaconnumberc, rollingRSSIArray): beacona = conf.BeaconList[beaconnumbera]; beaconb = conf.BeaconList[beaconnumberb]; beaconc = conf.BeaconList[beaconnumberc]; xa = float(beacona[2]) ya = float(beacona[3]) xb = float(beaconb[2]) yb = float(beaconb[3]) xc = float(beaconc[2]) yc = float(beaconc[3]) ra = float(calculateDistanceWithRSSI(rollingRSSIArray[beaconnumbera], beaconnumbera )) rb = float(calculateDistanceWithRSSI(rollingRSSIArray[beaconnumberb], beaconnumberb )) rc = float(calculateDistanceWithRSSI(rollingRSSIArray[beaconnumberc], beaconnumberc )) S = (pow(xc, 2.) - pow(xb, 2.) + pow(yc, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(rc, 2.)) / 2.0 T = (pow(xa, 2.) - pow(xb, 2.) + pow(ya, 2.) - pow(yb, 2.) + pow(rb, 2.) - pow(ra, 2.)) / 2.0 try: y = ((T * (xb - xc)) - (S * (xb - xa))) / a - yb) * (xb - xc)) - ((yc - yb) * - xa))) x = ((y * (ya - yb)) - T) / (xb - xa) except ZeroDivisionError as detail: print 'Handling run-time error:', detail return [-1,-1] point = [x, y] return point