def scooterJam(): """ Scans for available devices. """ scan = Scanner() sec = 5 print("Scanning for %s seconds" % sec) devs = scan.scan(sec) print("Hackable Scooters found:") for dev in devs: localname = dev.getValueText(9) if localname and localname.startswith( "MIScooter") and dev.addr != my_scooter_mac_address: print("%s" % (dev.addr)) scooter_mac_address = dev.addr scooter = m365py.M365(scooter_mac_address, handle_message) scooter.connect() print("Connected to Scooter") scooter.request(m365message.turn_on_lock) print("Locked scooter") time.sleep(1) scooter.disconnect() print("Disconnected from Scooter") elif localname or dev.addr == (my_scooter_mac_address): print("Skipping your scooter") print("No more scooters in range. Shutting down.") scooterJam()
def scooter_control(): # This is the Scooter - Bluetooth #put the mac address of your scooter scooter_mac_address = 'E3:15:58:36:C0:90' scooter = m365py.M365(scooter_mac_address, handle_message) scooter.set_connected_callback(connected) scooter.set_disconnected_callback(disconnected) scooter.connect() scooter.request(m365message.battery_percentage) scooter.request(m365message.turn_on_lock) while True: if Lock_status.l == True: scooter.request(m365message.turn_off_tail_light) scooter.request(m365message.turn_on_lock) print("lockei") else: scooter.request(m365message.turn_off_lock) scooter.request(m365message.turn_on_tail_light) print("deslockei") scooter.request(m365message.battery_percentage) data = json.dumps(scooter.cached_state, indent=4, sort_keys=True) battery = json.loads(data) client.publish("trotinete/1/battery", str(battery['battery_percent'])) # Send battery status every 5s time.sleep(3) return "main terminated"
def __init__(self, mac): self.session = None self.speed = 0 self.battery = 0 self.lat = 0 self.lng = 0 self.mac = mac self.session = None self.scooter = m365py.M365(mac, self.handleMessage)
#logging.getLogger('m365py').setLevel(logging.DEBUG) # parametres macAddress = sys.argv[1] if sys.argv[2] == '1': autoReconnect = True else: autoReconnect = False # callback for received messages from scooter def handle_message(m365_peripheral, m365_message, value): ret = 1 scooter = m365py.M365(macAddress, handle_message, autoReconnect) scooter.connect() # Request all currently supported 'attributes' scooter.request(m365message.battery_voltage) scooter.request(m365message.battery_ampere) scooter.request(m365message.battery_percentage) scooter.request(m365message.battery_cell_voltages) scooter.request(m365message.battery_info) scooter.request(m365message.general_info) scooter.request(m365message.motor_info) scooter.request(m365message.trip_info) scooter.request(m365message.trip_distance) scooter.request(m365message.distance_left) scooter.request(m365message.speed)
if m365_message.attribute == m365message.Attribute.SUPPLEMENTARY: if value['kers_mode'] == m365py.KersMode.WEAK: print('kers set to weak') def connected(m365_peripheral): print('Scooter Connected') def disconnected(m365_peripheral): print('Scooter Disconnected') scooter_mac_address = 'D6:0E:DB:7B:EA:AB' scooter = m365py.M365(scooter_mac_address, handle_message) scooter.set_connected_callback(connected) scooter.set_disconnected_callback(disconnected) scooter.connect() # Make tail light blink in a blocking fashion, timeout = 2.0 scooter.request(m365message.turn_off_tail_light) received_within_timeout = scooter.waitForNotifications(2.0) scooter.request(m365message.turn_on_tail_light) received_within_timeout = scooter.waitForNotifications(2.0) scooter.request(m365message.turn_off_tail_light) received_within_timeout = scooter.waitForNotifications(2.0) # turn on cruise mode scooter.request(m365message.turn_on_cruise) # fetch value to confirm that the scooter cruise mode has been enabled